summaryrefslogtreecommitdiffstats
path: root/src/com
diff options
context:
space:
mode:
authorJouni Koivuviita <jouni@vaadin.com>2012-08-07 16:05:49 +0300
committerJouni Koivuviita <jouni@vaadin.com>2012-08-07 16:05:49 +0300
commit8356465b3897fa16233064cfd586b4557f33e8e4 (patch)
treeaa14a1e52e85935486e7a4aec453247939a228fc /src/com
parent9a83722fde94af949b45d4c091399ba9e1f6ba29 (diff)
parent5813e0e9e5af4f946e5ea9c73d426e95d93b7bc4 (diff)
downloadvaadin-framework-8356465b3897fa16233064cfd586b4557f33e8e4.tar.gz
vaadin-framework-8356465b3897fa16233064cfd586b4557f33e8e4.zip
merge master
Diffstat (limited to 'src/com')
-rw-r--r--src/com/vaadin/Application.java16
-rw-r--r--src/com/vaadin/Vaadin.gwt.xml85
-rw-r--r--src/com/vaadin/annotations/JavaScript.java42
-rw-r--r--src/com/vaadin/annotations/LoadScripts.java24
-rw-r--r--src/com/vaadin/annotations/StyleSheet.java38
-rw-r--r--src/com/vaadin/data/Container.java1
-rw-r--r--src/com/vaadin/data/fieldgroup/DefaultFieldGroupFieldFactory.java1
-rw-r--r--src/com/vaadin/data/util/AbstractBeanContainer.java12
-rw-r--r--src/com/vaadin/data/util/AbstractContainer.java2
-rw-r--r--src/com/vaadin/data/util/AbstractInMemoryContainer.java22
-rw-r--r--src/com/vaadin/data/util/AbstractProperty.java8
-rw-r--r--src/com/vaadin/data/util/BeanItemContainer.java1
-rw-r--r--src/com/vaadin/data/util/ContainerHierarchicalWrapper.java28
-rw-r--r--src/com/vaadin/data/util/ContainerOrderedWrapper.java27
-rw-r--r--src/com/vaadin/data/util/DefaultItemSorter.java3
-rw-r--r--src/com/vaadin/data/util/FilesystemContainer.java26
-rw-r--r--src/com/vaadin/data/util/HierarchicalContainer.java8
-rw-r--r--src/com/vaadin/data/util/HierarchicalContainerOrderedWrapper.java8
-rw-r--r--src/com/vaadin/data/util/IndexedContainer.java24
-rw-r--r--src/com/vaadin/data/util/ItemSorter.java1
-rw-r--r--src/com/vaadin/data/util/MethodProperty.java3
-rw-r--r--src/com/vaadin/data/util/MethodPropertyDescriptor.java3
-rw-r--r--src/com/vaadin/data/util/NestedMethodProperty.java3
-rw-r--r--src/com/vaadin/data/util/NestedPropertyDescriptor.java3
-rw-r--r--src/com/vaadin/data/util/ObjectProperty.java3
-rw-r--r--src/com/vaadin/data/util/PropertyFormatter.java7
-rw-r--r--src/com/vaadin/data/util/PropertysetItem.java7
-rw-r--r--src/com/vaadin/data/util/QueryContainer.java29
-rw-r--r--src/com/vaadin/data/util/TextFileProperty.java3
-rw-r--r--src/com/vaadin/data/util/TransactionalPropertyWrapper.java7
-rw-r--r--src/com/vaadin/data/util/converter/DateToLongConverter.java4
-rw-r--r--src/com/vaadin/data/util/converter/DefaultConverterFactory.java1
-rw-r--r--src/com/vaadin/data/util/converter/ReverseConverter.java4
-rw-r--r--src/com/vaadin/data/util/converter/StringToBooleanConverter.java4
-rw-r--r--src/com/vaadin/data/util/converter/StringToDateConverter.java4
-rw-r--r--src/com/vaadin/data/util/converter/StringToDoubleConverter.java4
-rw-r--r--src/com/vaadin/data/util/converter/StringToIntegerConverter.java4
-rw-r--r--src/com/vaadin/data/util/converter/StringToNumberConverter.java4
-rw-r--r--src/com/vaadin/data/util/filter/AbstractJunctionFilter.java1
-rw-r--r--src/com/vaadin/data/util/filter/And.java1
-rw-r--r--src/com/vaadin/data/util/filter/Between.java2
-rw-r--r--src/com/vaadin/data/util/filter/Compare.java2
-rw-r--r--src/com/vaadin/data/util/filter/IsNull.java2
-rw-r--r--src/com/vaadin/data/util/filter/Like.java2
-rw-r--r--src/com/vaadin/data/util/filter/Not.java2
-rw-r--r--src/com/vaadin/data/util/filter/Or.java1
-rw-r--r--src/com/vaadin/data/util/filter/SimpleStringFilter.java2
-rw-r--r--src/com/vaadin/data/util/sqlcontainer/ColumnProperty.java5
-rw-r--r--src/com/vaadin/data/util/sqlcontainer/RowItem.java4
-rw-r--r--src/com/vaadin/data/util/sqlcontainer/SQLContainer.java34
-rw-r--r--src/com/vaadin/data/util/sqlcontainer/connection/J2EEConnectionPool.java3
-rw-r--r--src/com/vaadin/data/util/sqlcontainer/connection/SimpleJDBCConnectionPool.java3
-rw-r--r--src/com/vaadin/data/util/sqlcontainer/query/FreeformQuery.java12
-rw-r--r--src/com/vaadin/data/util/sqlcontainer/query/TableQuery.java16
-rw-r--r--src/com/vaadin/data/util/sqlcontainer/query/generator/DefaultSQLGenerator.java66
-rw-r--r--src/com/vaadin/data/util/sqlcontainer/query/generator/MSSQLGenerator.java2
-rw-r--r--src/com/vaadin/data/util/sqlcontainer/query/generator/OracleGenerator.java12
-rw-r--r--src/com/vaadin/data/util/sqlcontainer/query/generator/StatementHelper.java24
-rw-r--r--src/com/vaadin/data/util/sqlcontainer/query/generator/filter/AndTranslator.java2
-rw-r--r--src/com/vaadin/data/util/sqlcontainer/query/generator/filter/BetweenTranslator.java2
-rw-r--r--src/com/vaadin/data/util/sqlcontainer/query/generator/filter/CompareTranslator.java2
-rw-r--r--src/com/vaadin/data/util/sqlcontainer/query/generator/filter/IsNullTranslator.java2
-rw-r--r--src/com/vaadin/data/util/sqlcontainer/query/generator/filter/LikeTranslator.java2
-rw-r--r--src/com/vaadin/data/util/sqlcontainer/query/generator/filter/NotTranslator.java2
-rw-r--r--src/com/vaadin/data/util/sqlcontainer/query/generator/filter/OrTranslator.java2
-rw-r--r--src/com/vaadin/data/util/sqlcontainer/query/generator/filter/SimpleStringTranslator.java2
-rw-r--r--src/com/vaadin/data/validator/AbstractValidator.java1
-rw-r--r--src/com/vaadin/data/validator/BeanValidator.java3
-rw-r--r--src/com/vaadin/data/validator/CompositeValidator.java1
-rw-r--r--src/com/vaadin/data/validator/NullValidator.java1
-rw-r--r--src/com/vaadin/event/ActionManager.java6
-rw-r--r--src/com/vaadin/event/EventRouter.java5
-rw-r--r--src/com/vaadin/event/FieldEvents.java6
-rw-r--r--src/com/vaadin/event/ItemClickEvent.java2
-rw-r--r--src/com/vaadin/event/LayoutEvents.java4
-rw-r--r--src/com/vaadin/event/MouseEvents.java2
-rw-r--r--src/com/vaadin/event/ShortcutListener.java1
-rw-r--r--src/com/vaadin/event/TransferableImpl.java4
-rw-r--r--src/com/vaadin/event/dd/TargetDetailsImpl.java2
-rw-r--r--src/com/vaadin/event/dd/acceptcriteria/AcceptAll.java1
-rw-r--r--src/com/vaadin/event/dd/acceptcriteria/And.java1
-rw-r--r--src/com/vaadin/event/dd/acceptcriteria/ClientSideCriterion.java3
-rw-r--r--src/com/vaadin/event/dd/acceptcriteria/ContainsDataFlavor.java1
-rw-r--r--src/com/vaadin/event/dd/acceptcriteria/Not.java1
-rw-r--r--src/com/vaadin/event/dd/acceptcriteria/Or.java1
-rw-r--r--src/com/vaadin/event/dd/acceptcriteria/ServerSideCriterion.java3
-rw-r--r--src/com/vaadin/event/dd/acceptcriteria/SourceIs.java1
-rw-r--r--src/com/vaadin/event/dd/acceptcriteria/SourceIsTarget.java1
-rw-r--r--src/com/vaadin/event/dd/acceptcriteria/TargetDetailIs.java1
-rw-r--r--src/com/vaadin/external/json/JSONException.java1
-rw-r--r--src/com/vaadin/external/json/JSONStringer.java1
-rw-r--r--src/com/vaadin/navigator/Navigator.java100
-rw-r--r--src/com/vaadin/shared/AbstractFieldState.java (renamed from src/com/vaadin/terminal/gwt/client/AbstractFieldState.java)6
-rw-r--r--src/com/vaadin/shared/ComponentState.java (renamed from src/com/vaadin/terminal/gwt/client/ComponentState.java)6
-rw-r--r--src/com/vaadin/shared/Connector.java (renamed from src/com/vaadin/terminal/gwt/client/Connector.java)5
-rw-r--r--src/com/vaadin/shared/EventId.java (renamed from src/com/vaadin/terminal/gwt/client/EventId.java)2
-rw-r--r--src/com/vaadin/shared/JavaScriptConnectorState.java14
-rw-r--r--src/com/vaadin/shared/JavaScriptExtensionState.java (renamed from src/com/vaadin/terminal/gwt/client/JavaScriptExtensionState.java)7
-rw-r--r--src/com/vaadin/shared/MouseEventDetails.java (renamed from src/com/vaadin/terminal/gwt/client/MouseEventDetails.java)2
-rw-r--r--src/com/vaadin/shared/VBrowserDetails.java (renamed from src/com/vaadin/terminal/gwt/client/VBrowserDetails.java)3
-rw-r--r--src/com/vaadin/shared/communication/ClientRpc.java (renamed from src/com/vaadin/terminal/gwt/client/communication/ClientRpc.java)2
-rw-r--r--src/com/vaadin/shared/communication/FieldRpc.java (renamed from src/com/vaadin/terminal/gwt/client/communication/FieldRpc.java)2
-rw-r--r--src/com/vaadin/shared/communication/MethodInvocation.java (renamed from src/com/vaadin/terminal/gwt/client/communication/MethodInvocation.java)2
-rw-r--r--src/com/vaadin/shared/communication/ServerRpc.java (renamed from src/com/vaadin/terminal/gwt/client/communication/ServerRpc.java)2
-rw-r--r--src/com/vaadin/shared/communication/SharedState.java (renamed from src/com/vaadin/terminal/gwt/client/communication/SharedState.java)4
-rw-r--r--src/com/vaadin/shared/communication/URLReference.java (renamed from src/com/vaadin/terminal/gwt/client/communication/URLReference.java)2
-rw-r--r--src/com/vaadin/shared/communication/UidlValue.java (renamed from src/com/vaadin/terminal/gwt/client/communication/UidlValue.java)2
-rw-r--r--src/com/vaadin/shared/extension/javascriptmanager/ExecuteJavaScriptRpc.java (renamed from src/com/vaadin/terminal/gwt/client/extensions/javascriptmanager/ExecuteJavaScriptRpc.java)4
-rw-r--r--src/com/vaadin/shared/extension/javascriptmanager/JavaScriptManagerState.java (renamed from src/com/vaadin/terminal/gwt/client/extensions/javascriptmanager/JavaScriptManagerState.java)4
-rw-r--r--src/com/vaadin/shared/ui/AbstractLayoutState.java (renamed from src/com/vaadin/terminal/gwt/client/ui/AbstractLayoutState.java)4
-rw-r--r--src/com/vaadin/shared/ui/AbstractMediaState.java (renamed from src/com/vaadin/terminal/gwt/client/ui/AbstractMediaState.java)6
-rw-r--r--src/com/vaadin/shared/ui/AlignmentInfo.java (renamed from src/com/vaadin/terminal/gwt/client/ui/AlignmentInfo.java)2
-rw-r--r--src/com/vaadin/shared/ui/ClickRpc.java (renamed from src/com/vaadin/terminal/gwt/client/ui/ClickRpc.java)6
-rw-r--r--src/com/vaadin/shared/ui/Connect.java (renamed from src/com/vaadin/terminal/gwt/client/ui/Connect.java)4
-rw-r--r--src/com/vaadin/shared/ui/JavaScriptComponentState.java (renamed from src/com/vaadin/terminal/gwt/client/ui/JavaScriptComponentState.java)8
-rw-r--r--src/com/vaadin/shared/ui/LayoutClickRpc.java (renamed from src/com/vaadin/terminal/gwt/client/ui/LayoutClickRpc.java)8
-rw-r--r--src/com/vaadin/shared/ui/MediaControl.java24
-rw-r--r--src/com/vaadin/shared/ui/TabIndexState.java (renamed from src/com/vaadin/terminal/gwt/client/ui/TabIndexState.java)2
-rw-r--r--src/com/vaadin/shared/ui/VMarginInfo.java (renamed from src/com/vaadin/terminal/gwt/client/ui/VMarginInfo.java)2
-rw-r--r--src/com/vaadin/shared/ui/absolutelayout/AbsoluteLayoutServerRpc.java11
-rw-r--r--src/com/vaadin/shared/ui/absolutelayout/AbsoluteLayoutState.java (renamed from src/com/vaadin/terminal/gwt/client/ui/absolutelayout/AbsoluteLayoutState.java)6
-rw-r--r--src/com/vaadin/shared/ui/button/ButtonServerRpc.java (renamed from src/com/vaadin/terminal/gwt/client/ui/button/ButtonServerRpc.java)6
-rw-r--r--src/com/vaadin/shared/ui/button/ButtonState.java (renamed from src/com/vaadin/terminal/gwt/client/ui/button/ButtonState.java)8
-rw-r--r--src/com/vaadin/shared/ui/checkbox/CheckBoxServerRpc.java (renamed from src/com/vaadin/terminal/gwt/client/ui/checkbox/CheckBoxServerRpc.java)6
-rw-r--r--src/com/vaadin/shared/ui/checkbox/CheckBoxState.java (renamed from src/com/vaadin/terminal/gwt/client/ui/checkbox/CheckBoxState.java)4
-rw-r--r--src/com/vaadin/shared/ui/csslayout/CssLayoutServerRpc.java11
-rw-r--r--src/com/vaadin/shared/ui/csslayout/CssLayoutState.java (renamed from src/com/vaadin/terminal/gwt/client/ui/csslayout/CssLayoutState.java)6
-rw-r--r--src/com/vaadin/shared/ui/customlayout/CustomLayoutState.java (renamed from src/com/vaadin/terminal/gwt/client/ui/customlayout/CustomLayoutState.java)6
-rw-r--r--src/com/vaadin/shared/ui/dd/AcceptCriterion.java (renamed from src/com/vaadin/terminal/gwt/client/ui/dd/AcceptCriterion.java)4
-rw-r--r--src/com/vaadin/shared/ui/dd/DragEventType.java9
-rw-r--r--src/com/vaadin/shared/ui/dd/HorizontalDropLocation.java (renamed from src/com/vaadin/terminal/gwt/client/ui/dd/HorizontalDropLocation.java)2
-rw-r--r--src/com/vaadin/shared/ui/dd/VerticalDropLocation.java (renamed from src/com/vaadin/terminal/gwt/client/ui/dd/VerticalDropLocation.java)2
-rw-r--r--src/com/vaadin/shared/ui/embedded/EmbeddedServerRpc.java10
-rw-r--r--src/com/vaadin/shared/ui/form/FormState.java (renamed from src/com/vaadin/terminal/gwt/client/ui/form/FormState.java)6
-rw-r--r--src/com/vaadin/shared/ui/gridlayout/GridLayoutServerRpc.java11
-rw-r--r--src/com/vaadin/shared/ui/gridlayout/GridLayoutState.java (renamed from src/com/vaadin/terminal/gwt/client/ui/gridlayout/GridLayoutState.java)4
-rw-r--r--src/com/vaadin/shared/ui/label/ContentMode.java46
-rw-r--r--src/com/vaadin/shared/ui/label/LabelState.java (renamed from src/com/vaadin/terminal/gwt/client/ui/label/LabelState.java)4
-rw-r--r--src/com/vaadin/shared/ui/orderedlayout/AbstractOrderedLayoutServerRpc.java12
-rw-r--r--src/com/vaadin/shared/ui/orderedlayout/AbstractOrderedLayoutState.java (renamed from src/com/vaadin/terminal/gwt/client/ui/orderedlayout/AbstractOrderedLayoutState.java)8
-rw-r--r--src/com/vaadin/shared/ui/panel/PanelServerRpc.java11
-rw-r--r--src/com/vaadin/shared/ui/panel/PanelState.java (renamed from src/com/vaadin/terminal/gwt/client/ui/panel/PanelState.java)4
-rw-r--r--src/com/vaadin/shared/ui/root/PageClientRpc.java (renamed from src/com/vaadin/terminal/gwt/client/ui/root/PageClientRpc.java)4
-rw-r--r--src/com/vaadin/shared/ui/root/RootServerRpc.java11
-rw-r--r--src/com/vaadin/shared/ui/root/RootState.java (renamed from src/com/vaadin/terminal/gwt/client/ui/root/RootState.java)6
-rw-r--r--src/com/vaadin/shared/ui/splitpanel/AbstractSplitPanelRpc.java (renamed from src/com/vaadin/terminal/gwt/client/ui/splitpanel/AbstractSplitPanelRpc.java)6
-rw-r--r--src/com/vaadin/shared/ui/splitpanel/AbstractSplitPanelState.java (renamed from src/com/vaadin/terminal/gwt/client/ui/splitpanel/AbstractSplitPanelState.java)6
-rw-r--r--src/com/vaadin/shared/ui/textarea/TextAreaState.java (renamed from src/com/vaadin/terminal/gwt/client/ui/textarea/TextAreaState.java)4
-rw-r--r--src/com/vaadin/shared/ui/textfield/AbstractTextFieldState.java (renamed from src/com/vaadin/terminal/gwt/client/ui/textfield/AbstractTextFieldState.java)4
-rw-r--r--src/com/vaadin/shared/ui/video/VideoState.java (renamed from src/com/vaadin/terminal/gwt/client/ui/video/VideoState.java)6
-rw-r--r--src/com/vaadin/shared/ui/window/WindowServerRpc.java10
-rw-r--r--src/com/vaadin/shared/ui/window/WindowState.java (renamed from src/com/vaadin/terminal/gwt/client/ui/window/WindowState.java)4
-rw-r--r--src/com/vaadin/terminal/AbstractClientConnector.java28
-rw-r--r--src/com/vaadin/terminal/AbstractErrorMessage.java2
-rw-r--r--src/com/vaadin/terminal/AbstractJavaScriptExtension.java17
-rw-r--r--src/com/vaadin/terminal/ClassResource.java6
-rw-r--r--src/com/vaadin/terminal/CombinedRequest.java20
-rw-r--r--src/com/vaadin/terminal/DeploymentConfiguration.java27
-rw-r--r--src/com/vaadin/terminal/ExternalResource.java1
-rw-r--r--src/com/vaadin/terminal/FileResource.java7
-rw-r--r--src/com/vaadin/terminal/JavaScriptCallbackHelper.java3
-rw-r--r--src/com/vaadin/terminal/Page.java2
-rw-r--r--src/com/vaadin/terminal/StreamResource.java6
-rw-r--r--src/com/vaadin/terminal/ThemeResource.java1
-rw-r--r--src/com/vaadin/terminal/gwt/DefaultWidgetSet.gwt.xml87
-rw-r--r--src/com/vaadin/terminal/gwt/VaadinBrowserSpecificOverrides.gwt.xml (renamed from src/com/vaadin/terminal/gwt/DefaultWidgetSetBrowserSpecificOverrides.gwt.xml)0
-rw-r--r--src/com/vaadin/terminal/gwt/client/ApplicationConfiguration.java45
-rw-r--r--src/com/vaadin/terminal/gwt/client/ApplicationConnection.java250
-rw-r--r--src/com/vaadin/terminal/gwt/client/BrowserInfo.java1
-rw-r--r--src/com/vaadin/terminal/gwt/client/ComponentConnector.java13
-rw-r--r--src/com/vaadin/terminal/gwt/client/ComponentLocator.java4
-rw-r--r--src/com/vaadin/terminal/gwt/client/ConnectorMap.java38
-rw-r--r--src/com/vaadin/terminal/gwt/client/EventHelper.java4
-rw-r--r--src/com/vaadin/terminal/gwt/client/JavaScriptConnectorHelper.java39
-rw-r--r--src/com/vaadin/terminal/gwt/client/JavaScriptExtension.java4
-rw-r--r--src/com/vaadin/terminal/gwt/client/MouseEventDetailsBuilder.java1
-rw-r--r--src/com/vaadin/terminal/gwt/client/NullConsole.java9
-rw-r--r--src/com/vaadin/terminal/gwt/client/ResourceLoader.java540
-rw-r--r--src/com/vaadin/terminal/gwt/client/ServerConnector.java4
-rw-r--r--src/com/vaadin/terminal/gwt/client/SimpleTree.java1
-rw-r--r--src/com/vaadin/terminal/gwt/client/SuperDevMode.java253
-rw-r--r--src/com/vaadin/terminal/gwt/client/TooltipInfo.java19
-rw-r--r--src/com/vaadin/terminal/gwt/client/UIDL.java3
-rw-r--r--src/com/vaadin/terminal/gwt/client/Util.java90
-rw-r--r--src/com/vaadin/terminal/gwt/client/VCaption.java29
-rw-r--r--src/com/vaadin/terminal/gwt/client/VConsole.java30
-rw-r--r--src/com/vaadin/terminal/gwt/client/VDebugConsole.java109
-rw-r--r--src/com/vaadin/terminal/gwt/client/VSchedulerImpl.java1
-rw-r--r--src/com/vaadin/terminal/gwt/client/VTooltip.java219
-rw-r--r--src/com/vaadin/terminal/gwt/client/VUIDLBrowser.java158
-rw-r--r--src/com/vaadin/terminal/gwt/client/WidgetLoader.java6
-rw-r--r--src/com/vaadin/terminal/gwt/client/communication/InitializableServerRpc.java1
-rw-r--r--src/com/vaadin/terminal/gwt/client/communication/JsonDecoder.java2
-rw-r--r--src/com/vaadin/terminal/gwt/client/communication/JsonEncoder.java3
-rw-r--r--src/com/vaadin/terminal/gwt/client/communication/RpcManager.java2
-rw-r--r--src/com/vaadin/terminal/gwt/client/communication/RpcMethod.java2
-rw-r--r--src/com/vaadin/terminal/gwt/client/communication/RpcProxy.java1
-rw-r--r--src/com/vaadin/terminal/gwt/client/communication/URLReference_Serializer.java3
-rw-r--r--src/com/vaadin/terminal/gwt/client/extensions/javascriptmanager/JavaScriptManagerConnector.java7
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/AbstractClickEventHandler.java5
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/AbstractComponentConnector.java240
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/AbstractComponentContainerConnector.java4
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/AbstractConnector.java19
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/AbstractFieldConnector.java23
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/AbstractLayoutConnector.java2
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/Action.java1
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/ClickEventHandler.java2
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/ConnectorClassBasedFactory.java2
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/ConnectorStateFactory.java4
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/ConnectorWidgetFactory.java1
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/FocusableFlexTable.java5
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/FocusableFlowPanel.java5
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/FocusableScrollPanel.java3
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/JavaScriptComponentConnector.java3
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/LayoutClickEventHandler.java3
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/MediaBaseConnector.java24
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/ShortcutActionHandler.java3
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/SimpleFocusablePanel.java5
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/TouchScrollDelegate.java2
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/TreeImages.java2
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/UnknownComponentConnector.java1
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/VContextMenu.java10
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/VOverlay.java243
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/Vaadin6Connector.java1
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/absolutelayout/AbsoluteLayoutConnector.java9
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/absolutelayout/AbsoluteLayoutServerRpc.java11
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/accordion/AccordionConnector.java4
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/accordion/VAccordion.java1
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/audio/AudioConnector.java2
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/button/ButtonConnector.java13
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/button/VButton.java6
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/checkbox/CheckBoxConnector.java11
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/checkbox/VCheckBox.java4
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/combobox/ComboBoxConnector.java4
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/combobox/VFilterSelect.java43
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/csslayout/CssLayoutConnector.java9
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/csslayout/CssLayoutServerRpc.java11
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/csslayout/VCssLayout.java2
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/customcomponent/CustomComponentConnector.java5
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/customfield/CustomFieldConnector.java6
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/customlayout/CustomLayoutConnector.java16
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/datefield/AbstractDateFieldConnector.java21
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/datefield/InlineDateFieldConnector.java4
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/datefield/PopupDateFieldConnector.java38
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/datefield/VCalendarPanel.java12
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/datefield/VDateField.java11
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/datefield/VDateFieldCalendar.java3
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/datefield/VPopupCalendar.java6
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/datefield/VTextualDate.java8
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/dd/DDUtil.java2
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/dd/VAbstractDropHandler.java8
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/dd/VAcceptAll.java1
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/dd/VAcceptCriterion.java1
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/dd/VAnd.java2
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/dd/VContainsDataFlavor.java1
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/dd/VDragAndDropManager.java11
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/dd/VDragSourceIs.java1
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/dd/VIsOverId.java1
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/dd/VItemIdIs.java1
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/dd/VLazyInitItemIdentifiers.java2
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/dd/VNot.java2
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/dd/VOr.java2
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/dd/VServerAccept.java2
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/dd/VSourceIsTarget.java1
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/dd/VTargetDetailIs.java1
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/dd/VTargetInSubtree.java1
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/draganddropwrapper/DragAndDropWrapperConnector.java3
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/draganddropwrapper/VDragAndDropWrapper.java23
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/embedded/EmbeddedConnector.java28
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/embedded/EmbeddedServerRpc.java10
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/embedded/VEmbedded.java3
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/form/FormConnector.java6
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/form/VForm.java1
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/formlayout/FormLayoutConnector.java42
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/formlayout/VFormLayout.java26
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/gridlayout/GridLayoutConnector.java15
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/gridlayout/GridLayoutServerRpc.java11
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/gridlayout/VGridLayout.java4
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/helloworldfeature/GreetAgainRpc.java12
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/helloworldfeature/HelloWorldExtensionConnector.java48
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/helloworldfeature/HelloWorldRpc.java10
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/helloworldfeature/HelloWorldState.java18
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/label/ContentMode.java48
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/label/LabelConnector.java5
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/label/VLabel.java4
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/layout/LayoutDependencyTree.java2
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/layout/VLayoutSlot.java2
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/link/LinkConnector.java3
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/link/VLink.java6
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/listselect/ListSelectConnector.java2
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/listselect/TooltipListBox.java41
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/listselect/VListSelect.java16
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/menubar/MenuBar.java1
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/menubar/MenuBarConnector.java32
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/menubar/MenuItem.java4
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/menubar/VMenuBar.java99
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/nativebutton/NativeButtonConnector.java10
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/nativebutton/VNativeButton.java11
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/nativeselect/NativeSelectConnector.java2
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/nativeselect/VNativeSelect.java17
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/notification/VNotification.java1
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/optiongroup/OptionGroupBaseConnector.java1
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/optiongroup/OptionGroupConnector.java4
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/optiongroup/VOptionGroup.java7
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/optiongroup/VOptionGroupBase.java3
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/orderedlayout/AbstractOrderedLayoutConnector.java12
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/orderedlayout/AbstractOrderedLayoutServerRpc.java12
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/orderedlayout/HorizontalLayoutConnector.java4
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/orderedlayout/VMeasuringOrderedLayout.java2
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/orderedlayout/VerticalLayoutConnector.java4
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/panel/PanelConnector.java11
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/panel/PanelServerRpc.java11
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/panel/VPanel.java6
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/passwordfield/PasswordFieldConnector.java2
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/popupview/PopupViewConnector.java5
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/popupview/VPopupView.java47
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/progressindicator/ProgressIndicatorConnector.java3
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/richtextarea/RichTextAreaConnector.java6
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/richtextarea/VRichTextArea.java12
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/richtextarea/VRichTextToolbar.java3
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/root/RootConnector.java21
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/root/RootServerRpc.java11
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/root/VRoot.java8
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/slider/SliderConnector.java4
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/slider/VSlider.java9
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/splitpanel/AbstractSplitPanelConnector.java9
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/splitpanel/HorizontalSplitPanelConnector.java4
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/splitpanel/VAbstractSplitPanel.java23
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/splitpanel/VerticalSplitPanelConnector.java4
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/table/TableConnector.java50
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/table/VScrollTable.java175
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/tabsheet/TabsheetBaseConnector.java1
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/tabsheet/TabsheetConnector.java34
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/tabsheet/VTabsheet.java63
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/textarea/TextAreaConnector.java3
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/textarea/VTextArea.java1
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/textfield/TextFieldConnector.java8
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/textfield/VTextField.java18
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/tree/TreeConnector.java52
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/tree/VTree.java46
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/treetable/TreeTableConnector.java2
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/treetable/VTreeTable.java45
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/twincolselect/TwinColSelectConnector.java5
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/twincolselect/VTwinColSelect.java6
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/upload/UploadConnector.java5
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/upload/VUpload.java13
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/video/VideoConnector.java5
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/window/VWindow.java16
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/window/WindowConnector.java13
-rw-r--r--src/com/vaadin/terminal/gwt/client/ui/window/WindowServerRpc.java10
-rw-r--r--src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java203
-rw-r--r--src/com/vaadin/terminal/gwt/server/AbstractApplicationServlet.java250
-rw-r--r--src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java403
-rw-r--r--src/com/vaadin/terminal/gwt/server/AbstractDeploymentConfiguration.java121
-rw-r--r--src/com/vaadin/terminal/gwt/server/AbstractStreamingEvent.java4
-rw-r--r--src/com/vaadin/terminal/gwt/server/AbstractWebApplicationContext.java16
-rw-r--r--src/com/vaadin/terminal/gwt/server/ApplicationPortlet2.java6
-rw-r--r--src/com/vaadin/terminal/gwt/server/ApplicationResourceHandler.java1
-rw-r--r--src/com/vaadin/terminal/gwt/server/ApplicationServlet.java10
-rw-r--r--src/com/vaadin/terminal/gwt/server/BootstrapHandler.java54
-rw-r--r--src/com/vaadin/terminal/gwt/server/ChangeVariablesErrorEvent.java1
-rw-r--r--src/com/vaadin/terminal/gwt/server/ClientConnector.java14
-rw-r--r--src/com/vaadin/terminal/gwt/server/ClientMethodInvocation.java1
-rw-r--r--src/com/vaadin/terminal/gwt/server/CommunicationManager.java147
-rw-r--r--src/com/vaadin/terminal/gwt/server/Constants.java2
-rw-r--r--src/com/vaadin/terminal/gwt/server/DragAndDropService.java27
-rw-r--r--src/com/vaadin/terminal/gwt/server/GAEApplicationServlet.java24
-rw-r--r--src/com/vaadin/terminal/gwt/server/JsonCodec.java45
-rw-r--r--src/com/vaadin/terminal/gwt/server/JsonPaintTarget.java69
-rw-r--r--src/com/vaadin/terminal/gwt/server/LegacyChangeVariablesInvocation.java2
-rw-r--r--src/com/vaadin/terminal/gwt/server/PortletApplicationContext2.java33
-rw-r--r--src/com/vaadin/terminal/gwt/server/PortletCommunicationManager.java139
-rw-r--r--src/com/vaadin/terminal/gwt/server/ResourceReference.java18
-rw-r--r--src/com/vaadin/terminal/gwt/server/RestrictedRenderResponse.java25
-rw-r--r--src/com/vaadin/terminal/gwt/server/ServerRpcManager.java3
-rw-r--r--src/com/vaadin/terminal/gwt/server/ServerRpcMethodInvocation.java4
-rw-r--r--src/com/vaadin/terminal/gwt/server/ServletPortletHelper.java52
-rw-r--r--src/com/vaadin/terminal/gwt/server/StreamingErrorEventImpl.java1
-rw-r--r--src/com/vaadin/terminal/gwt/server/StreamingStartEventImpl.java1
-rw-r--r--src/com/vaadin/terminal/gwt/server/UnsupportedBrowserHandler.java1
-rw-r--r--src/com/vaadin/terminal/gwt/server/WebApplicationContext.java1
-rw-r--r--src/com/vaadin/terminal/gwt/server/WebBrowser.java5
-rw-r--r--src/com/vaadin/terminal/gwt/server/WrappedHttpServletRequest.java9
-rw-r--r--src/com/vaadin/terminal/gwt/server/WrappedHttpServletResponse.java2
-rw-r--r--src/com/vaadin/terminal/gwt/server/WrappedPortletRequest.java30
-rw-r--r--src/com/vaadin/terminal/gwt/server/WrappedPortletResponse.java9
-rw-r--r--src/com/vaadin/terminal/gwt/widgetsetutils/AcceptCriteriaFactoryGenerator.java2
-rw-r--r--src/com/vaadin/terminal/gwt/widgetsetutils/ClassPathExplorer.java1
-rw-r--r--src/com/vaadin/terminal/gwt/widgetsetutils/CustomWidgetMapGenerator.java4
-rw-r--r--src/com/vaadin/terminal/gwt/widgetsetutils/EagerWidgetMapGenerator.java2
-rw-r--r--src/com/vaadin/terminal/gwt/widgetsetutils/GeneratedRpcMethodProviderGenerator.java2
-rw-r--r--src/com/vaadin/terminal/gwt/widgetsetutils/LazyWidgetMapGenerator.java2
-rw-r--r--src/com/vaadin/terminal/gwt/widgetsetutils/RpcProxyCreatorGenerator.java6
-rw-r--r--src/com/vaadin/terminal/gwt/widgetsetutils/RpcProxyGenerator.java4
-rw-r--r--src/com/vaadin/terminal/gwt/widgetsetutils/SerializerMapGenerator.java64
-rw-r--r--src/com/vaadin/terminal/gwt/widgetsetutils/WidgetMapGenerator.java6
-rw-r--r--src/com/vaadin/tools/WidgetsetCompiler.java4
-rw-r--r--src/com/vaadin/ui/AbsoluteLayout.java14
-rw-r--r--src/com/vaadin/ui/AbstractComponent.java50
-rw-r--r--src/com/vaadin/ui/AbstractComponentContainer.java10
-rw-r--r--src/com/vaadin/ui/AbstractField.java38
-rw-r--r--src/com/vaadin/ui/AbstractJavaScriptComponent.java19
-rw-r--r--src/com/vaadin/ui/AbstractLayout.java6
-rw-r--r--src/com/vaadin/ui/AbstractMedia.java8
-rw-r--r--src/com/vaadin/ui/AbstractOrderedLayout.java21
-rw-r--r--src/com/vaadin/ui/AbstractSelect.java76
-rw-r--r--src/com/vaadin/ui/AbstractSplitPanel.java16
-rw-r--r--src/com/vaadin/ui/AbstractTextField.java10
-rw-r--r--src/com/vaadin/ui/Alignment.java2
-rw-r--r--src/com/vaadin/ui/Button.java14
-rw-r--r--src/com/vaadin/ui/CheckBox.java7
-rw-r--r--src/com/vaadin/ui/Component.java10
-rw-r--r--src/com/vaadin/ui/ConnectorTracker.java129
-rw-r--r--src/com/vaadin/ui/CssLayout.java14
-rw-r--r--src/com/vaadin/ui/CustomComponent.java6
-rw-r--r--src/com/vaadin/ui/CustomField.java16
-rw-r--r--src/com/vaadin/ui/CustomLayout.java7
-rw-r--r--src/com/vaadin/ui/DateField.java6
-rw-r--r--src/com/vaadin/ui/DefaultFieldFactory.java2
-rw-r--r--src/com/vaadin/ui/DragAndDropWrapper.java24
-rw-r--r--src/com/vaadin/ui/Embedded.java7
-rw-r--r--src/com/vaadin/ui/Field.java1
-rw-r--r--src/com/vaadin/ui/Form.java21
-rw-r--r--src/com/vaadin/ui/GridLayout.java21
-rw-r--r--src/com/vaadin/ui/HelloWorldExtension.java38
-rw-r--r--src/com/vaadin/ui/JavaScript.java17
-rw-r--r--src/com/vaadin/ui/Label.java40
-rw-r--r--src/com/vaadin/ui/Layout.java4
-rw-r--r--src/com/vaadin/ui/Link.java2
-rw-r--r--src/com/vaadin/ui/LoginForm.java9
-rw-r--r--src/com/vaadin/ui/MenuBar.java2
-rw-r--r--src/com/vaadin/ui/Notification.java22
-rw-r--r--src/com/vaadin/ui/OptionGroup.java4
-rw-r--r--src/com/vaadin/ui/Panel.java24
-rw-r--r--src/com/vaadin/ui/PopupView.java10
-rw-r--r--src/com/vaadin/ui/ProgressIndicator.java2
-rw-r--r--src/com/vaadin/ui/RichTextArea.java2
-rw-r--r--src/com/vaadin/ui/Root.java47
-rw-r--r--src/com/vaadin/ui/Select.java6
-rw-r--r--src/com/vaadin/ui/Slider.java2
-rw-r--r--src/com/vaadin/ui/TabSheet.java29
-rw-r--r--src/com/vaadin/ui/Table.java68
-rw-r--r--src/com/vaadin/ui/TextArea.java2
-rw-r--r--src/com/vaadin/ui/Tree.java21
-rw-r--r--src/com/vaadin/ui/TreeTable.java30
-rw-r--r--src/com/vaadin/ui/Upload.java11
-rw-r--r--src/com/vaadin/ui/Video.java6
-rw-r--r--src/com/vaadin/ui/Window.java15
448 files changed, 5869 insertions, 2558 deletions
diff --git a/src/com/vaadin/Application.java b/src/com/vaadin/Application.java
index 84a8df5053..086caa5509 100644
--- a/src/com/vaadin/Application.java
+++ b/src/com/vaadin/Application.java
@@ -1066,6 +1066,7 @@ public class Application implements Terminal.ErrorListener, Serializable {
* @see com.vaadin.terminal.Terminal.ErrorListener#terminalError(com.vaadin.terminal.Terminal.ErrorEvent)
*/
+ @Override
public void terminalError(Terminal.ErrorEvent event) {
final Throwable t = event.getThrowable();
if (t instanceof SocketException) {
@@ -1810,6 +1811,7 @@ public class Application implements Terminal.ErrorListener, Serializable {
this.throwable = throwable;
}
+ @Override
public Throwable getThrowable() {
return throwable;
}
@@ -2373,4 +2375,18 @@ public class Application implements Terminal.ErrorListener, Serializable {
private static final Logger getLogger() {
return Logger.getLogger(Application.class.getName());
}
+
+ /**
+ * Returns a Root with the given id.
+ * <p>
+ * This is meant for framework internal use.
+ * </p>
+ *
+ * @param rootId
+ * The root id
+ * @return The root with the given id or null if not found
+ */
+ public Root getRootById(int rootId) {
+ return roots.get(rootId);
+ }
}
diff --git a/src/com/vaadin/Vaadin.gwt.xml b/src/com/vaadin/Vaadin.gwt.xml
new file mode 100644
index 0000000000..07d7c941e6
--- /dev/null
+++ b/src/com/vaadin/Vaadin.gwt.xml
@@ -0,0 +1,85 @@
+<module>
+ <!-- This GWT module inherits all Vaadin client side functionality modules.
+ This is the module you want to inherit in your client side project to be
+ able to use com.vaadin.* classes. -->
+
+ <!-- Hint for WidgetSetBuilder not to automatically update the file -->
+ <!-- WS Compiler: manually edited -->
+
+ <inherits name="com.google.gwt.user.User" />
+
+ <inherits name="com.google.gwt.http.HTTP" />
+
+ <inherits name="com.google.gwt.json.JSON" />
+
+ <inherits name="com.vaadin.terminal.gwt.VaadinBrowserSpecificOverrides" />
+
+ <source path="terminal/gwt/client" />
+ <source path="shared" />
+
+ <!-- Use own Scheduler implementation to be able to track if commands are
+ running -->
+ <replace-with class="com.vaadin.terminal.gwt.client.VSchedulerImpl">
+ <when-type-is class="com.google.gwt.core.client.impl.SchedulerImpl" />
+ </replace-with>
+
+ <!-- Generators for serializators for classes used in communication between
+ server and client -->
+ <generate-with
+ class="com.vaadin.terminal.gwt.widgetsetutils.SerializerMapGenerator">
+ <when-type-is
+ class="com.vaadin.terminal.gwt.client.communication.SerializerMap" />
+ </generate-with>
+
+ <replace-with class="com.vaadin.terminal.gwt.client.VDebugConsole">
+ <when-type-is class="com.vaadin.terminal.gwt.client.Console" />
+ </replace-with>
+
+ <generate-with
+ class="com.vaadin.terminal.gwt.widgetsetutils.EagerWidgetMapGenerator">
+ <when-type-is class="com.vaadin.terminal.gwt.client.WidgetMap" />
+ </generate-with>
+
+ <generate-with
+ class="com.vaadin.terminal.gwt.widgetsetutils.AcceptCriteriaFactoryGenerator">
+ <when-type-is
+ class="com.vaadin.terminal.gwt.client.ui.dd.VAcceptCriterionFactory" />
+ </generate-with>
+
+ <!-- Generate client side proxies for client to server RPC interfaces -->
+ <generate-with
+ class="com.vaadin.terminal.gwt.widgetsetutils.RpcProxyGenerator">
+ <when-type-assignable
+ class="com.vaadin.shared.communication.ServerRpc" />
+ </generate-with>
+
+ <!-- Generate client side proxies for client to server RPC interfaces -->
+ <generate-with
+ class="com.vaadin.terminal.gwt.widgetsetutils.RpcProxyCreatorGenerator">
+ <when-type-assignable
+ class="com.vaadin.terminal.gwt.client.communication.RpcProxy.RpcProxyCreator" />
+ </generate-with>
+
+ <!-- Generate client side RPC manager for server to client RPC -->
+ <generate-with
+ class="com.vaadin.terminal.gwt.widgetsetutils.GeneratedRpcMethodProviderGenerator">
+ <when-type-assignable
+ class="com.vaadin.terminal.gwt.client.communication.GeneratedRpcMethodProvider" />
+ </generate-with>
+
+ <generate-with
+ class="com.vaadin.terminal.gwt.widgetsetutils.ConnectorWidgetFactoryGenerator">
+ <when-type-assignable
+ class="com.vaadin.terminal.gwt.client.ui.ConnectorWidgetFactory" />
+ </generate-with>
+
+ <generate-with
+ class="com.vaadin.terminal.gwt.widgetsetutils.ConnectorStateFactoryGenerator">
+ <when-type-assignable
+ class="com.vaadin.terminal.gwt.client.ui.ConnectorStateFactory" />
+ </generate-with>
+
+ <!-- Use the new cross site linker to get a nocache.js without document.write -->
+ <add-linker name="xsiframe" />
+
+</module>
diff --git a/src/com/vaadin/annotations/JavaScript.java b/src/com/vaadin/annotations/JavaScript.java
new file mode 100644
index 0000000000..f97457c1cd
--- /dev/null
+++ b/src/com/vaadin/annotations/JavaScript.java
@@ -0,0 +1,42 @@
+/*
+@VaadinApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import com.vaadin.terminal.gwt.server.ClientConnector;
+
+/**
+ * If this annotation is present on a {@link ClientConnector} class, the
+ * framework ensures the referenced JavaScript files are loaded before the init
+ * method for the corresponding client-side connector is invoked.
+ * <p>
+ * Absolute URLs including protocol and host are used as is on the client-side.
+ * Relative urls are mapped to APP/CONNECTOR/[url] which are by default served
+ * from the classpath relative to the class where the annotation is defined.
+ * <p>
+ * Example: {@code @JavaScript( "http://host.com/file1.js", "file2.js"})} on
+ * the class com.example.MyConnector would load the file
+ * http://host.com/file1.js as is and file2.js from /com/example/file2.js on the
+ * server's classpath using the ClassLoader that was used to load
+ * com.example.MyConnector.
+ *
+ * @author Vaadin Ltd
+ * @version @VERSION@
+ * @since 7.0.0
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+public @interface JavaScript {
+ /**
+ * JavaScript files to load before initializing the client-side connector.
+ *
+ * @return an array of JavaScript file urls
+ */
+ public String[] value();
+}
diff --git a/src/com/vaadin/annotations/LoadScripts.java b/src/com/vaadin/annotations/LoadScripts.java
deleted file mode 100644
index 84ac2d2fb7..0000000000
--- a/src/com/vaadin/annotations/LoadScripts.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
-@VaadinApache2LicenseForJavaFiles@
- */
-package com.vaadin.annotations;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Temporary hack used for ensuring external javascript libraries are included.
- * To add a javascript, add this annotation to your Root class.
- *
- * @deprecated Will be removed in favor of a more robust solution before version
- * 7.0.0
- */
-@Retention(RetentionPolicy.RUNTIME)
-@Target(ElementType.TYPE)
-@Deprecated
-public @interface LoadScripts {
- public String[] value();
-
-}
diff --git a/src/com/vaadin/annotations/StyleSheet.java b/src/com/vaadin/annotations/StyleSheet.java
new file mode 100644
index 0000000000..d082cb8d30
--- /dev/null
+++ b/src/com/vaadin/annotations/StyleSheet.java
@@ -0,0 +1,38 @@
+/*
+@VaadinApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import com.vaadin.terminal.gwt.server.ClientConnector;
+
+/**
+ * If this annotation is present on a {@link ClientConnector} class, the
+ * framework ensures the referenced style sheets are loaded before the init
+ * method for the corresponding client-side connector is invoked.
+ * <p>
+ * Example: {@code @StyleSheet( "http://host.com/file1.css", "file2.css"})} on
+ * the class com.example.MyConnector would load the file
+ * http://host.com/file1.css as is and file2.css from /com/example/file2.css on
+ * the server's classpath using the ClassLoader that was used to load
+ * com.example.MyConnector.
+ *
+ * @author Vaadin Ltd
+ * @version @VERSION@
+ * @since 7.0.0
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+public @interface StyleSheet {
+ /**
+ * Style sheets to load before initializing the client-side connector.
+ *
+ * @return an array of style sheet urls
+ */
+ public String[] value();
+}
diff --git a/src/com/vaadin/data/Container.java b/src/com/vaadin/data/Container.java
index f722e07741..f4c0ed9794 100644
--- a/src/com/vaadin/data/Container.java
+++ b/src/com/vaadin/data/Container.java
@@ -697,6 +697,7 @@ public interface Container extends Serializable {
* @return <code>true</code> if the operation succeeded,
* <code>false</code> if not
*/
+ @Override
public boolean removeItem(Object itemId)
throws UnsupportedOperationException;
}
diff --git a/src/com/vaadin/data/fieldgroup/DefaultFieldGroupFieldFactory.java b/src/com/vaadin/data/fieldgroup/DefaultFieldGroupFieldFactory.java
index 569f643998..be0db328f2 100644
--- a/src/com/vaadin/data/fieldgroup/DefaultFieldGroupFieldFactory.java
+++ b/src/com/vaadin/data/fieldgroup/DefaultFieldGroupFieldFactory.java
@@ -23,6 +23,7 @@ public class DefaultFieldGroupFieldFactory implements FieldGroupFieldFactory {
public static final Object CAPTION_PROPERTY_ID = "Caption";
+ @Override
public <T extends Field> T createField(Class<?> type, Class<T> fieldType) {
if (Enum.class.isAssignableFrom(type)) {
return createEnumField(type, fieldType);
diff --git a/src/com/vaadin/data/util/AbstractBeanContainer.java b/src/com/vaadin/data/util/AbstractBeanContainer.java
index 300f92ea3a..2f428d2cb6 100644
--- a/src/com/vaadin/data/util/AbstractBeanContainer.java
+++ b/src/com/vaadin/data/util/AbstractBeanContainer.java
@@ -96,6 +96,7 @@ public abstract class AbstractBeanContainer<IDTYPE, BEANTYPE> extends
this.propertyId = propertyId;
}
+ @Override
@SuppressWarnings("unchecked")
public IDTYPE getIdForBean(BEANTYPE bean)
throws IllegalArgumentException {
@@ -163,6 +164,7 @@ public abstract class AbstractBeanContainer<IDTYPE, BEANTYPE> extends
*
* @see com.vaadin.data.Container#getType(java.lang.Object)
*/
+ @Override
public Class<?> getType(Object propertyId) {
return model.get(propertyId).getPropertyType();
}
@@ -195,6 +197,7 @@ public abstract class AbstractBeanContainer<IDTYPE, BEANTYPE> extends
*
* @see com.vaadin.data.Container#getContainerPropertyIds()
*/
+ @Override
public Collection<String> getContainerPropertyIds() {
return model.keySet();
}
@@ -258,6 +261,7 @@ public abstract class AbstractBeanContainer<IDTYPE, BEANTYPE> extends
* @see com.vaadin.data.Container#getContainerProperty(java.lang.Object,
* java.lang.Object)
*/
+ @Override
public Property<?> getContainerProperty(Object itemId, Object propertyId) {
Item item = getItem(itemId);
if (item == null) {
@@ -300,6 +304,7 @@ public abstract class AbstractBeanContainer<IDTYPE, BEANTYPE> extends
/**
* Re-filter the container when one of the monitored properties changes.
*/
+ @Override
public void valueChange(ValueChangeEvent event) {
// if a property that is used in a filter is changed, refresh filtering
filterAll();
@@ -312,6 +317,7 @@ public abstract class AbstractBeanContainer<IDTYPE, BEANTYPE> extends
* com.vaadin.data.Container.Filterable#addContainerFilter(java.lang.Object,
* java.lang.String, boolean, boolean)
*/
+ @Override
public void addContainerFilter(Object propertyId, String filterString,
boolean ignoreCase, boolean onlyMatchPrefix) {
try {
@@ -328,6 +334,7 @@ public abstract class AbstractBeanContainer<IDTYPE, BEANTYPE> extends
*
* @see com.vaadin.data.Container.Filterable#removeAllContainerFilters()
*/
+ @Override
public void removeAllContainerFilters() {
if (!getFilters().isEmpty()) {
for (Item item : itemIdToItem.values()) {
@@ -344,6 +351,7 @@ public abstract class AbstractBeanContainer<IDTYPE, BEANTYPE> extends
* com.vaadin.data.Container.Filterable#removeContainerFilters(java.lang
* .Object)
*/
+ @Override
public void removeContainerFilters(Object propertyId) {
Collection<Filter> removedFilters = super.removeFilters(propertyId);
if (!removedFilters.isEmpty()) {
@@ -354,11 +362,13 @@ public abstract class AbstractBeanContainer<IDTYPE, BEANTYPE> extends
}
}
+ @Override
public void addContainerFilter(Filter filter)
throws UnsupportedFilterException {
addFilter(filter);
}
+ @Override
public void removeContainerFilter(Filter filter) {
removeFilter(filter);
}
@@ -416,6 +426,7 @@ public abstract class AbstractBeanContainer<IDTYPE, BEANTYPE> extends
*
* @see com.vaadin.data.Container.Sortable#getSortableContainerPropertyIds()
*/
+ @Override
public Collection<?> getSortableContainerPropertyIds() {
return getSortablePropertyIds();
}
@@ -426,6 +437,7 @@ public abstract class AbstractBeanContainer<IDTYPE, BEANTYPE> extends
* @see com.vaadin.data.Container.Sortable#sort(java.lang.Object[],
* boolean[])
*/
+ @Override
public void sort(Object[] propertyId, boolean[] ascending) {
sortContainer(propertyId, ascending);
}
diff --git a/src/com/vaadin/data/util/AbstractContainer.java b/src/com/vaadin/data/util/AbstractContainer.java
index 58a3a8687a..7d96c2d757 100644
--- a/src/com/vaadin/data/util/AbstractContainer.java
+++ b/src/com/vaadin/data/util/AbstractContainer.java
@@ -52,6 +52,7 @@ public abstract class AbstractContainer implements Container {
super(source);
}
+ @Override
public Container getContainer() {
return (Container) getSource();
}
@@ -72,6 +73,7 @@ public abstract class AbstractContainer implements Container {
super(source);
}
+ @Override
public Container getContainer() {
return (Container) getSource();
}
diff --git a/src/com/vaadin/data/util/AbstractInMemoryContainer.java b/src/com/vaadin/data/util/AbstractInMemoryContainer.java
index 795aabb419..b7832756f2 100644
--- a/src/com/vaadin/data/util/AbstractInMemoryContainer.java
+++ b/src/com/vaadin/data/util/AbstractInMemoryContainer.java
@@ -125,6 +125,7 @@ public abstract class AbstractInMemoryContainer<ITEMIDTYPE, PROPERTYIDCLASS, ITE
// Container interface methods with more specific return class
// default implementation, can be overridden
+ @Override
public ITEMCLASS getItem(Object itemId) {
if (containsId(itemId)) {
return getUnfilteredItem(itemId);
@@ -152,10 +153,12 @@ public abstract class AbstractInMemoryContainer<ITEMIDTYPE, PROPERTYIDCLASS, ITE
// Container interface method implementations
+ @Override
public int size() {
return getVisibleItemIds().size();
}
+ @Override
public boolean containsId(Object itemId) {
// only look at visible items after filtering
if (itemId == null) {
@@ -165,12 +168,14 @@ public abstract class AbstractInMemoryContainer<ITEMIDTYPE, PROPERTYIDCLASS, ITE
}
}
+ @Override
public List<?> getItemIds() {
return Collections.unmodifiableList(getVisibleItemIds());
}
// Container.Ordered
+ @Override
public ITEMIDTYPE nextItemId(Object itemId) {
int index = indexOfId(itemId);
if (index >= 0 && index < size() - 1) {
@@ -181,6 +186,7 @@ public abstract class AbstractInMemoryContainer<ITEMIDTYPE, PROPERTYIDCLASS, ITE
}
}
+ @Override
public ITEMIDTYPE prevItemId(Object itemId) {
int index = indexOfId(itemId);
if (index > 0) {
@@ -191,6 +197,7 @@ public abstract class AbstractInMemoryContainer<ITEMIDTYPE, PROPERTYIDCLASS, ITE
}
}
+ @Override
public ITEMIDTYPE firstItemId() {
if (size() > 0) {
return getIdByIndex(0);
@@ -199,6 +206,7 @@ public abstract class AbstractInMemoryContainer<ITEMIDTYPE, PROPERTYIDCLASS, ITE
}
}
+ @Override
public ITEMIDTYPE lastItemId() {
if (size() > 0) {
return getIdByIndex(size() - 1);
@@ -207,6 +215,7 @@ public abstract class AbstractInMemoryContainer<ITEMIDTYPE, PROPERTYIDCLASS, ITE
}
}
+ @Override
public boolean isFirstId(Object itemId) {
if (itemId == null) {
return false;
@@ -214,6 +223,7 @@ public abstract class AbstractInMemoryContainer<ITEMIDTYPE, PROPERTYIDCLASS, ITE
return itemId.equals(firstItemId());
}
+ @Override
public boolean isLastId(Object itemId) {
if (itemId == null) {
return false;
@@ -223,66 +233,78 @@ public abstract class AbstractInMemoryContainer<ITEMIDTYPE, PROPERTYIDCLASS, ITE
// Container.Indexed
+ @Override
public ITEMIDTYPE getIdByIndex(int index) {
return getVisibleItemIds().get(index);
}
+ @Override
public int indexOfId(Object itemId) {
return getVisibleItemIds().indexOf(itemId);
}
// methods that are unsupported by default, override to support
+ @Override
public Object addItemAt(int index) throws UnsupportedOperationException {
throw new UnsupportedOperationException(
"Adding items not supported. Override the relevant addItem*() methods if required as specified in AbstractInMemoryContainer javadoc.");
}
+ @Override
public Item addItemAt(int index, Object newItemId)
throws UnsupportedOperationException {
throw new UnsupportedOperationException(
"Adding items not supported. Override the relevant addItem*() methods if required as specified in AbstractInMemoryContainer javadoc.");
}
+ @Override
public Object addItemAfter(Object previousItemId)
throws UnsupportedOperationException {
throw new UnsupportedOperationException(
"Adding items not supported. Override the relevant addItem*() methods if required as specified in AbstractInMemoryContainer javadoc.");
}
+ @Override
public Item addItemAfter(Object previousItemId, Object newItemId)
throws UnsupportedOperationException {
throw new UnsupportedOperationException(
"Adding items not supported. Override the relevant addItem*() methods if required as specified in AbstractInMemoryContainer javadoc.");
}
+ @Override
public Item addItem(Object itemId) throws UnsupportedOperationException {
throw new UnsupportedOperationException(
"Adding items not supported. Override the relevant addItem*() methods if required as specified in AbstractInMemoryContainer javadoc.");
}
+ @Override
public Object addItem() throws UnsupportedOperationException {
throw new UnsupportedOperationException(
"Adding items not supported. Override the relevant addItem*() methods if required as specified in AbstractInMemoryContainer javadoc.");
}
+ @Override
public boolean removeItem(Object itemId)
throws UnsupportedOperationException {
throw new UnsupportedOperationException(
"Removing items not supported. Override the removeItem() method if required as specified in AbstractInMemoryContainer javadoc.");
}
+ @Override
public boolean removeAllItems() throws UnsupportedOperationException {
throw new UnsupportedOperationException(
"Removing items not supported. Override the removeAllItems() method if required as specified in AbstractInMemoryContainer javadoc.");
}
+ @Override
public boolean addContainerProperty(Object propertyId, Class<?> type,
Object defaultValue) throws UnsupportedOperationException {
throw new UnsupportedOperationException(
"Adding container properties not supported. Override the addContainerProperty() method if required.");
}
+ @Override
public boolean removeContainerProperty(Object propertyId)
throws UnsupportedOperationException {
throw new UnsupportedOperationException(
diff --git a/src/com/vaadin/data/util/AbstractProperty.java b/src/com/vaadin/data/util/AbstractProperty.java
index 3b6db3807e..373a8dfd58 100644
--- a/src/com/vaadin/data/util/AbstractProperty.java
+++ b/src/com/vaadin/data/util/AbstractProperty.java
@@ -42,10 +42,12 @@ public abstract class AbstractProperty<T> implements Property<T>,
* Override for additional restrictions on what is considered a read-only
* property.
*/
+ @Override
public boolean isReadOnly() {
return readOnly;
}
+ @Override
public void setReadOnly(boolean newStatus) {
boolean oldStatus = isReadOnly();
readOnly = newStatus;
@@ -93,6 +95,7 @@ public abstract class AbstractProperty<T> implements Property<T>,
*
* @return source Property of the event.
*/
+ @Override
public Property getProperty() {
return (Property) getSource();
}
@@ -105,6 +108,7 @@ public abstract class AbstractProperty<T> implements Property<T>,
* @param listener
* the new Listener to be registered.
*/
+ @Override
public void addListener(Property.ReadOnlyStatusChangeListener listener) {
if (readOnlyStatusChangeListeners == null) {
readOnlyStatusChangeListeners = new LinkedList<ReadOnlyStatusChangeListener>();
@@ -118,6 +122,7 @@ public abstract class AbstractProperty<T> implements Property<T>,
* @param listener
* the listener to be removed.
*/
+ @Override
public void removeListener(Property.ReadOnlyStatusChangeListener listener) {
if (readOnlyStatusChangeListeners != null) {
readOnlyStatusChangeListeners.remove(listener);
@@ -161,12 +166,14 @@ public abstract class AbstractProperty<T> implements Property<T>,
*
* @return source Property of the event.
*/
+ @Override
public Property getProperty() {
return (Property) getSource();
}
}
+ @Override
public void addListener(ValueChangeListener listener) {
if (valueChangeListeners == null) {
valueChangeListeners = new LinkedList<ValueChangeListener>();
@@ -175,6 +182,7 @@ public abstract class AbstractProperty<T> implements Property<T>,
}
+ @Override
public void removeListener(ValueChangeListener listener) {
if (valueChangeListeners != null) {
valueChangeListeners.remove(listener);
diff --git a/src/com/vaadin/data/util/BeanItemContainer.java b/src/com/vaadin/data/util/BeanItemContainer.java
index 245a623d5d..dc4deaebdc 100644
--- a/src/com/vaadin/data/util/BeanItemContainer.java
+++ b/src/com/vaadin/data/util/BeanItemContainer.java
@@ -59,6 +59,7 @@ public class BeanItemContainer<BEANTYPE> extends
private static class IdentityBeanIdResolver<BT> implements
BeanIdResolver<BT, BT> {
+ @Override
public BT getIdForBean(BT bean) {
return bean;
}
diff --git a/src/com/vaadin/data/util/ContainerHierarchicalWrapper.java b/src/com/vaadin/data/util/ContainerHierarchicalWrapper.java
index 9159fa358b..717ce834cf 100644
--- a/src/com/vaadin/data/util/ContainerHierarchicalWrapper.java
+++ b/src/com/vaadin/data/util/ContainerHierarchicalWrapper.java
@@ -71,6 +71,7 @@ public class ContainerHierarchicalWrapper implements Container.Hierarchical,
this.itemIds = itemIds;
}
+ @Override
public int compare(Object o1, Object o2) {
if (o1.equals(o2)) {
return 0;
@@ -233,6 +234,7 @@ public class ContainerHierarchicalWrapper implements Container.Hierarchical,
* Can the specified Item have any children? Don't add a JavaDoc comment
* here, we use the default documentation from implemented interface.
*/
+ @Override
public boolean areChildrenAllowed(Object itemId) {
// If the wrapped container implements the method directly, use it
@@ -253,6 +255,7 @@ public class ContainerHierarchicalWrapper implements Container.Hierarchical,
* comment here, we use the default documentation from implemented
* interface.
*/
+ @Override
public Collection<?> getChildren(Object itemId) {
// If the wrapped container implements the method directly, use it
@@ -272,6 +275,7 @@ public class ContainerHierarchicalWrapper implements Container.Hierarchical,
* comment here, we use the default documentation from implemented
* interface.
*/
+ @Override
public Object getParent(Object itemId) {
// If the wrapped container implements the method directly, use it
@@ -287,6 +291,7 @@ public class ContainerHierarchicalWrapper implements Container.Hierarchical,
* JavaDoc comment here, we use the default documentation from implemented
* interface.
*/
+ @Override
public boolean hasChildren(Object itemId) {
// If the wrapped container implements the method directly, use it
@@ -303,6 +308,7 @@ public class ContainerHierarchicalWrapper implements Container.Hierarchical,
* JavaDoc comment here, we use the default documentation from implemented
* interface.
*/
+ @Override
public boolean isRoot(Object itemId) {
// If the wrapped container implements the method directly, use it
@@ -322,6 +328,7 @@ public class ContainerHierarchicalWrapper implements Container.Hierarchical,
* comment here, we use the default documentation from implemented
* interface.
*/
+ @Override
public Collection<?> rootItemIds() {
// If the wrapped container implements the method directly, use it
@@ -351,6 +358,7 @@ public class ContainerHierarchicalWrapper implements Container.Hierarchical,
* @return <code>true</code> if the operation succeeded, <code>false</code>
* if not
*/
+ @Override
public boolean setChildrenAllowed(Object itemId, boolean childrenAllowed) {
// If the wrapped container implements the method directly, use it
@@ -391,6 +399,7 @@ public class ContainerHierarchicalWrapper implements Container.Hierarchical,
* @return <code>true</code> if the operation succeeded, <code>false</code>
* if not
*/
+ @Override
public boolean setParent(Object itemId, Object newParentId) {
// If the wrapped container implements the method directly, use it
@@ -483,6 +492,7 @@ public class ContainerHierarchicalWrapper implements Container.Hierarchical,
* @throws UnsupportedOperationException
* if the addItem is not supported.
*/
+ @Override
public Object addItem() throws UnsupportedOperationException {
final Object id = container.addItem();
@@ -502,6 +512,7 @@ public class ContainerHierarchicalWrapper implements Container.Hierarchical,
* @throws UnsupportedOperationException
* if the addItem is not supported.
*/
+ @Override
public Item addItem(Object itemId) throws UnsupportedOperationException {
// Null ids are not accepted
@@ -524,6 +535,7 @@ public class ContainerHierarchicalWrapper implements Container.Hierarchical,
* @throws UnsupportedOperationException
* if the removeAllItems is not supported.
*/
+ @Override
public boolean removeAllItems() throws UnsupportedOperationException {
final boolean success = container.removeAllItems();
@@ -548,6 +560,7 @@ public class ContainerHierarchicalWrapper implements Container.Hierarchical,
* @throws UnsupportedOperationException
* if the removeItem is not supported.
*/
+ @Override
public boolean removeItem(Object itemId)
throws UnsupportedOperationException {
@@ -586,6 +599,7 @@ public class ContainerHierarchicalWrapper implements Container.Hierarchical,
* @throws UnsupportedOperationException
* if the addContainerProperty is not supported.
*/
+ @Override
public boolean addContainerProperty(Object propertyId, Class<?> type,
Object defaultValue) throws UnsupportedOperationException {
@@ -606,6 +620,7 @@ public class ContainerHierarchicalWrapper implements Container.Hierarchical,
* @throws UnsupportedOperationException
* if the removeContainerProperty is not supported.
*/
+ @Override
public boolean removeContainerProperty(Object propertyId)
throws UnsupportedOperationException {
return container.removeContainerProperty(propertyId);
@@ -616,6 +631,7 @@ public class ContainerHierarchicalWrapper implements Container.Hierarchical,
* comment here, we use the default documentation from implemented
* interface.
*/
+ @Override
public boolean containsId(Object itemId) {
return container.containsId(itemId);
}
@@ -624,6 +640,7 @@ public class ContainerHierarchicalWrapper implements Container.Hierarchical,
* Gets the specified Item from the container. Don't add a JavaDoc comment
* here, we use the default documentation from implemented interface.
*/
+ @Override
public Item getItem(Object itemId) {
return container.getItem(itemId);
}
@@ -633,6 +650,7 @@ public class ContainerHierarchicalWrapper implements Container.Hierarchical,
* comment here, we use the default documentation from implemented
* interface.
*/
+ @Override
public Collection<?> getItemIds() {
return container.getItemIds();
}
@@ -642,6 +660,7 @@ public class ContainerHierarchicalWrapper implements Container.Hierarchical,
* Container Don't add a JavaDoc comment here, we use the default
* documentation from implemented interface.
*/
+ @Override
public Property<?> getContainerProperty(Object itemId, Object propertyId) {
return container.getContainerProperty(itemId, propertyId);
}
@@ -651,6 +670,7 @@ public class ContainerHierarchicalWrapper implements Container.Hierarchical,
* JavaDoc comment here, we use the default documentation from implemented
* interface.
*/
+ @Override
public Collection<?> getContainerPropertyIds() {
return container.getContainerPropertyIds();
}
@@ -660,6 +680,7 @@ public class ContainerHierarchicalWrapper implements Container.Hierarchical,
* Don't add a JavaDoc comment here, we use the default documentation from
* implemented interface.
*/
+ @Override
public Class<?> getType(Object propertyId) {
return container.getType(propertyId);
}
@@ -668,6 +689,7 @@ public class ContainerHierarchicalWrapper implements Container.Hierarchical,
* Gets the number of Items in the Container. Don't add a JavaDoc comment
* here, we use the default documentation from implemented interface.
*/
+ @Override
public int size() {
return container.size();
}
@@ -677,6 +699,7 @@ public class ContainerHierarchicalWrapper implements Container.Hierarchical,
* JavaDoc comment here, we use the default documentation from implemented
* interface.
*/
+ @Override
public void addListener(Container.ItemSetChangeListener listener) {
if (container instanceof Container.ItemSetChangeNotifier) {
((Container.ItemSetChangeNotifier) container)
@@ -689,6 +712,7 @@ public class ContainerHierarchicalWrapper implements Container.Hierarchical,
* comment here, we use the default documentation from implemented
* interface.
*/
+ @Override
public void removeListener(Container.ItemSetChangeListener listener) {
if (container instanceof Container.ItemSetChangeNotifier) {
((Container.ItemSetChangeNotifier) container)
@@ -701,6 +725,7 @@ public class ContainerHierarchicalWrapper implements Container.Hierarchical,
* add a JavaDoc comment here, we use the default documentation from
* implemented interface.
*/
+ @Override
public void addListener(Container.PropertySetChangeListener listener) {
if (container instanceof Container.PropertySetChangeNotifier) {
((Container.PropertySetChangeNotifier) container)
@@ -713,6 +738,7 @@ public class ContainerHierarchicalWrapper implements Container.Hierarchical,
* JavaDoc comment here, we use the default documentation from implemented
* interface.
*/
+ @Override
public void removeListener(Container.PropertySetChangeListener listener) {
if (container instanceof Container.PropertySetChangeNotifier) {
((Container.PropertySetChangeNotifier) container)
@@ -736,6 +762,7 @@ public class ContainerHierarchicalWrapper implements Container.Hierarchical,
listener = realListener;
}
+ @Override
public void containerItemSetChange(ItemSetChangeEvent event) {
updateHierarchicalWrapper();
((Container.ItemSetChangeListener) listener)
@@ -743,6 +770,7 @@ public class ContainerHierarchicalWrapper implements Container.Hierarchical,
}
+ @Override
public void containerPropertySetChange(PropertySetChangeEvent event) {
updateHierarchicalWrapper();
((Container.PropertySetChangeListener) listener)
diff --git a/src/com/vaadin/data/util/ContainerOrderedWrapper.java b/src/com/vaadin/data/util/ContainerOrderedWrapper.java
index f333edecf4..d3d6f88d3e 100644
--- a/src/com/vaadin/data/util/ContainerOrderedWrapper.java
+++ b/src/com/vaadin/data/util/ContainerOrderedWrapper.java
@@ -221,6 +221,7 @@ public class ContainerOrderedWrapper implements Container.Ordered,
* comment here, we use the default documentation from implemented
* interface.
*/
+ @Override
public Object firstItemId() {
if (ordered) {
return ((Container.Ordered) container).firstItemId();
@@ -233,6 +234,7 @@ public class ContainerOrderedWrapper implements Container.Ordered,
* JavaDoc comment here, we use the default documentation from implemented
* interface.
*/
+ @Override
public boolean isFirstId(Object itemId) {
if (ordered) {
return ((Container.Ordered) container).isFirstId(itemId);
@@ -245,6 +247,7 @@ public class ContainerOrderedWrapper implements Container.Ordered,
* JavaDoc comment here, we use the default documentation from implemented
* interface.
*/
+ @Override
public boolean isLastId(Object itemId) {
if (ordered) {
return ((Container.Ordered) container).isLastId(itemId);
@@ -257,6 +260,7 @@ public class ContainerOrderedWrapper implements Container.Ordered,
* comment here, we use the default documentation from implemented
* interface.
*/
+ @Override
public Object lastItemId() {
if (ordered) {
return ((Container.Ordered) container).lastItemId();
@@ -269,6 +273,7 @@ public class ContainerOrderedWrapper implements Container.Ordered,
* comment here, we use the default documentation from implemented
* interface.
*/
+ @Override
public Object nextItemId(Object itemId) {
if (ordered) {
return ((Container.Ordered) container).nextItemId(itemId);
@@ -284,6 +289,7 @@ public class ContainerOrderedWrapper implements Container.Ordered,
* JavaDoc comment here, we use the default documentation from implemented
* interface.
*/
+ @Override
public Object prevItemId(Object itemId) {
if (ordered) {
return ((Container.Ordered) container).prevItemId(itemId);
@@ -306,6 +312,7 @@ public class ContainerOrderedWrapper implements Container.Ordered,
* @return <code>true</code> if the operation succeeded, <code>false</code>
* if not
*/
+ @Override
public boolean addContainerProperty(Object propertyId, Class<?> type,
Object defaultValue) throws UnsupportedOperationException {
@@ -321,6 +328,7 @@ public class ContainerOrderedWrapper implements Container.Ordered,
* @throws UnsupportedOperationException
* if the addItem is not supported.
*/
+ @Override
public Object addItem() throws UnsupportedOperationException {
final Object id = container.addItem();
@@ -340,6 +348,7 @@ public class ContainerOrderedWrapper implements Container.Ordered,
* @throws UnsupportedOperationException
* if the addItem is not supported.
*/
+ @Override
public Item addItem(Object itemId) throws UnsupportedOperationException {
final Item item = container.addItem(itemId);
if (!ordered && item != null) {
@@ -356,6 +365,7 @@ public class ContainerOrderedWrapper implements Container.Ordered,
* @throws UnsupportedOperationException
* if the removeAllItems is not supported.
*/
+ @Override
public boolean removeAllItems() throws UnsupportedOperationException {
final boolean success = container.removeAllItems();
if (!ordered && success) {
@@ -377,6 +387,7 @@ public class ContainerOrderedWrapper implements Container.Ordered,
* @throws UnsupportedOperationException
* if the removeItem is not supported.
*/
+ @Override
public boolean removeItem(Object itemId)
throws UnsupportedOperationException {
@@ -401,6 +412,7 @@ public class ContainerOrderedWrapper implements Container.Ordered,
* @throws UnsupportedOperationException
* if the removeContainerProperty is not supported.
*/
+ @Override
public boolean removeContainerProperty(Object propertyId)
throws UnsupportedOperationException {
return container.removeContainerProperty(propertyId);
@@ -411,6 +423,7 @@ public class ContainerOrderedWrapper implements Container.Ordered,
* comment here, we use the default documentation from implemented
* interface.
*/
+ @Override
public boolean containsId(Object itemId) {
return container.containsId(itemId);
}
@@ -419,6 +432,7 @@ public class ContainerOrderedWrapper implements Container.Ordered,
* Gets the specified Item from the container. Don't add a JavaDoc comment
* here, we use the default documentation from implemented interface.
*/
+ @Override
public Item getItem(Object itemId) {
return container.getItem(itemId);
}
@@ -428,6 +442,7 @@ public class ContainerOrderedWrapper implements Container.Ordered,
* comment here, we use the default documentation from implemented
* interface.
*/
+ @Override
public Collection<?> getItemIds() {
return container.getItemIds();
}
@@ -437,6 +452,7 @@ public class ContainerOrderedWrapper implements Container.Ordered,
* Container Don't add a JavaDoc comment here, we use the default
* documentation from implemented interface.
*/
+ @Override
public Property<?> getContainerProperty(Object itemId, Object propertyId) {
return container.getContainerProperty(itemId, propertyId);
}
@@ -446,6 +462,7 @@ public class ContainerOrderedWrapper implements Container.Ordered,
* JavaDoc comment here, we use the default documentation from implemented
* interface.
*/
+ @Override
public Collection<?> getContainerPropertyIds() {
return container.getContainerPropertyIds();
}
@@ -455,6 +472,7 @@ public class ContainerOrderedWrapper implements Container.Ordered,
* Don't add a JavaDoc comment here, we use the default documentation from
* implemented interface.
*/
+ @Override
public Class<?> getType(Object propertyId) {
return container.getType(propertyId);
}
@@ -463,6 +481,7 @@ public class ContainerOrderedWrapper implements Container.Ordered,
* Gets the number of Items in the Container. Don't add a JavaDoc comment
* here, we use the default documentation from implemented interface.
*/
+ @Override
public int size() {
int newSize = container.size();
if (lastKnownSize != -1 && newSize != lastKnownSize
@@ -480,6 +499,7 @@ public class ContainerOrderedWrapper implements Container.Ordered,
* JavaDoc comment here, we use the default documentation from implemented
* interface.
*/
+ @Override
public void addListener(Container.ItemSetChangeListener listener) {
if (container instanceof Container.ItemSetChangeNotifier) {
((Container.ItemSetChangeNotifier) container)
@@ -492,6 +512,7 @@ public class ContainerOrderedWrapper implements Container.Ordered,
* comment here, we use the default documentation from implemented
* interface.
*/
+ @Override
public void removeListener(Container.ItemSetChangeListener listener) {
if (container instanceof Container.ItemSetChangeNotifier) {
((Container.ItemSetChangeNotifier) container)
@@ -504,6 +525,7 @@ public class ContainerOrderedWrapper implements Container.Ordered,
* add a JavaDoc comment here, we use the default documentation from
* implemented interface.
*/
+ @Override
public void addListener(Container.PropertySetChangeListener listener) {
if (container instanceof Container.PropertySetChangeNotifier) {
((Container.PropertySetChangeNotifier) container)
@@ -516,6 +538,7 @@ public class ContainerOrderedWrapper implements Container.Ordered,
* JavaDoc comment here, we use the default documentation from implemented
* interface.
*/
+ @Override
public void removeListener(Container.PropertySetChangeListener listener) {
if (container instanceof Container.PropertySetChangeNotifier) {
((Container.PropertySetChangeNotifier) container)
@@ -529,6 +552,7 @@ public class ContainerOrderedWrapper implements Container.Ordered,
* @see com.vaadin.data.Container.Ordered#addItemAfter(java.lang.Object,
* java.lang.Object)
*/
+ @Override
public Item addItemAfter(Object previousItemId, Object newItemId)
throws UnsupportedOperationException {
@@ -553,6 +577,7 @@ public class ContainerOrderedWrapper implements Container.Ordered,
*
* @see com.vaadin.data.Container.Ordered#addItemAfter(java.lang.Object)
*/
+ @Override
public Object addItemAfter(Object previousItemId)
throws UnsupportedOperationException {
@@ -588,6 +613,7 @@ public class ContainerOrderedWrapper implements Container.Ordered,
listener = realListener;
}
+ @Override
public void containerItemSetChange(ItemSetChangeEvent event) {
updateOrderWrapper();
((Container.ItemSetChangeListener) listener)
@@ -595,6 +621,7 @@ public class ContainerOrderedWrapper implements Container.Ordered,
}
+ @Override
public void containerPropertySetChange(PropertySetChangeEvent event) {
updateOrderWrapper();
((Container.PropertySetChangeListener) listener)
diff --git a/src/com/vaadin/data/util/DefaultItemSorter.java b/src/com/vaadin/data/util/DefaultItemSorter.java
index 47db5d7507..81b15ebd4f 100644
--- a/src/com/vaadin/data/util/DefaultItemSorter.java
+++ b/src/com/vaadin/data/util/DefaultItemSorter.java
@@ -61,6 +61,7 @@ public class DefaultItemSorter implements ItemSorter {
* @see com.vaadin.data.util.ItemSorter#compare(java.lang.Object,
* java.lang.Object)
*/
+ @Override
public int compare(Object o1, Object o2) {
Item item1 = container.getItem(o1);
Item item2 = container.getItem(o2);
@@ -147,6 +148,7 @@ public class DefaultItemSorter implements ItemSorter {
* com.vaadin.data.util.ItemSorter#setSortProperties(com.vaadin.data.Container
* .Sortable, java.lang.Object[], boolean[])
*/
+ @Override
public void setSortProperties(Container.Sortable container,
Object[] propertyId, boolean[] ascending) {
this.container = container;
@@ -181,6 +183,7 @@ public class DefaultItemSorter implements ItemSorter {
public static class DefaultPropertyValueComparator implements
Comparator<Object>, Serializable {
+ @Override
@SuppressWarnings("unchecked")
public int compare(Object o1, Object o2) {
int r = 0;
diff --git a/src/com/vaadin/data/util/FilesystemContainer.java b/src/com/vaadin/data/util/FilesystemContainer.java
index 7100286712..cdfeb57e14 100644
--- a/src/com/vaadin/data/util/FilesystemContainer.java
+++ b/src/com/vaadin/data/util/FilesystemContainer.java
@@ -187,6 +187,7 @@ public class FilesystemContainer implements Container.Hierarchical {
* @return <code>true</code> if the specified Item is a directory,
* <code>false</code> otherwise.
*/
+ @Override
public boolean areChildrenAllowed(Object itemId) {
return itemId instanceof File && ((File) itemId).canRead()
&& ((File) itemId).isDirectory();
@@ -197,6 +198,7 @@ public class FilesystemContainer implements Container.Hierarchical {
* add a JavaDoc comment here, we use the default documentation from
* implemented interface.
*/
+ @Override
public Collection<File> getChildren(Object itemId) {
if (!(itemId instanceof File)) {
@@ -223,6 +225,7 @@ public class FilesystemContainer implements Container.Hierarchical {
* Gets the parent item of the specified Item. Don't add a JavaDoc comment
* here, we use the default documentation from implemented interface.
*/
+ @Override
public Object getParent(Object itemId) {
if (!(itemId instanceof File)) {
@@ -235,6 +238,7 @@ public class FilesystemContainer implements Container.Hierarchical {
* Tests if the specified Item has any children. Don't add a JavaDoc comment
* here, we use the default documentation from implemented interface.
*/
+ @Override
public boolean hasChildren(Object itemId) {
if (!(itemId instanceof File)) {
@@ -254,6 +258,7 @@ public class FilesystemContainer implements Container.Hierarchical {
* JavaDoc comment here, we use the default documentation from implemented
* interface.
*/
+ @Override
public boolean isRoot(Object itemId) {
if (!(itemId instanceof File)) {
@@ -272,6 +277,7 @@ public class FilesystemContainer implements Container.Hierarchical {
* comment here, we use the default documentation from implemented
* interface.
*/
+ @Override
public Collection<File> rootItemIds() {
File[] f;
@@ -311,6 +317,7 @@ public class FilesystemContainer implements Container.Hierarchical {
* @throws UnsupportedOperationException
* if the setChildrenAllowed is not supported.
*/
+ @Override
public boolean setChildrenAllowed(Object itemId, boolean areChildrenAllowed)
throws UnsupportedOperationException {
@@ -332,6 +339,7 @@ public class FilesystemContainer implements Container.Hierarchical {
* @throws UnsupportedOperationException
* if the setParent is not supported.
*/
+ @Override
public boolean setParent(Object itemId, Object newParentId)
throws UnsupportedOperationException {
@@ -343,6 +351,7 @@ public class FilesystemContainer implements Container.Hierarchical {
* comment here, we use the default documentation from implemented
* interface.
*/
+ @Override
public boolean containsId(Object itemId) {
if (!(itemId instanceof File)) {
@@ -371,6 +380,7 @@ public class FilesystemContainer implements Container.Hierarchical {
* Gets the specified Item from the filesystem. Don't add a JavaDoc comment
* here, we use the default documentation from implemented interface.
*/
+ @Override
public Item getItem(Object itemId) {
if (!(itemId instanceof File)) {
@@ -416,6 +426,7 @@ public class FilesystemContainer implements Container.Hierarchical {
* Gets the IDs of Items in the filesystem. Don't add a JavaDoc comment
* here, we use the default documentation from implemented interface.
*/
+ @Override
public Collection<File> getItemIds() {
if (recursive) {
@@ -459,6 +470,7 @@ public class FilesystemContainer implements Container.Hierarchical {
* the property's ID.
* @return the requested property's value, or <code>null</code>
*/
+ @Override
public Property<?> getContainerProperty(Object itemId, Object propertyId) {
if (!(itemId instanceof File)) {
@@ -493,6 +505,7 @@ public class FilesystemContainer implements Container.Hierarchical {
*
* @return Unmodifiable collection containing all available file properties.
*/
+ @Override
public Collection<String> getContainerPropertyIds() {
return FILE_PROPERTIES;
}
@@ -506,6 +519,7 @@ public class FilesystemContainer implements Container.Hierarchical {
* the ID of the property whose type is requested.
* @return data type of the requested property, or <code>null</code>
*/
+ @Override
public Class<?> getType(Object propertyId) {
if (propertyId.equals(PROPERTY_NAME)) {
@@ -556,6 +570,7 @@ public class FilesystemContainer implements Container.Hierarchical {
*
* @return Number of Items in the container.
*/
+ @Override
public int size() {
if (recursive) {
@@ -609,6 +624,7 @@ public class FilesystemContainer implements Container.Hierarchical {
* Gets the specified property of this file. Don't add a JavaDoc comment
* here, we use the default documentation from implemented interface.
*/
+ @Override
public Property<?> getItemProperty(Object id) {
return getContainerProperty(file, id);
}
@@ -618,6 +634,7 @@ public class FilesystemContainer implements Container.Hierarchical {
* JavaDoc comment here, we use the default documentation from
* implemented interface.
*/
+ @Override
public Collection<String> getItemPropertyIds() {
return getContainerPropertyIds();
}
@@ -716,6 +733,7 @@ public class FilesystemContainer implements Container.Hierarchical {
*
* @see com.vaadin.data.Item#addItemProperty(Object, Property)
*/
+ @Override
public boolean addItemProperty(Object id, Property property)
throws UnsupportedOperationException {
throw new UnsupportedOperationException("Filesystem container "
@@ -727,6 +745,7 @@ public class FilesystemContainer implements Container.Hierarchical {
*
* @see com.vaadin.data.Item#removeItemProperty(Object)
*/
+ @Override
public boolean removeItemProperty(Object id)
throws UnsupportedOperationException {
throw new UnsupportedOperationException(
@@ -763,6 +782,7 @@ public class FilesystemContainer implements Container.Hierarchical {
*
* @see java.io.FilenameFilter#accept(File, String)
*/
+ @Override
public boolean accept(File dir, String name) {
if (name.endsWith(filter)) {
return true;
@@ -832,6 +852,7 @@ public class FilesystemContainer implements Container.Hierarchical {
* @see com.vaadin.data.Container#addContainerProperty(java.lang.Object,
* java.lang.Class, java.lang.Object)
*/
+ @Override
public boolean addContainerProperty(Object propertyId, Class<?> type,
Object defaultValue) throws UnsupportedOperationException {
throw new UnsupportedOperationException(
@@ -843,6 +864,7 @@ public class FilesystemContainer implements Container.Hierarchical {
*
* @see com.vaadin.data.Container#addItem()
*/
+ @Override
public Object addItem() throws UnsupportedOperationException {
throw new UnsupportedOperationException(
"File system container does not support this operation");
@@ -853,6 +875,7 @@ public class FilesystemContainer implements Container.Hierarchical {
*
* @see com.vaadin.data.Container#addItem(java.lang.Object)
*/
+ @Override
public Item addItem(Object itemId) throws UnsupportedOperationException {
throw new UnsupportedOperationException(
"File system container does not support this operation");
@@ -863,6 +886,7 @@ public class FilesystemContainer implements Container.Hierarchical {
*
* @see com.vaadin.data.Container#removeAllItems()
*/
+ @Override
public boolean removeAllItems() throws UnsupportedOperationException {
throw new UnsupportedOperationException(
"File system container does not support this operation");
@@ -873,6 +897,7 @@ public class FilesystemContainer implements Container.Hierarchical {
*
* @see com.vaadin.data.Container#removeItem(java.lang.Object)
*/
+ @Override
public boolean removeItem(Object itemId)
throws UnsupportedOperationException {
throw new UnsupportedOperationException(
@@ -884,6 +909,7 @@ public class FilesystemContainer implements Container.Hierarchical {
*
* @see com.vaadin.data.Container#removeContainerProperty(java.lang.Object )
*/
+ @Override
public boolean removeContainerProperty(Object propertyId)
throws UnsupportedOperationException {
throw new UnsupportedOperationException(
diff --git a/src/com/vaadin/data/util/HierarchicalContainer.java b/src/com/vaadin/data/util/HierarchicalContainer.java
index 1291c8fcc4..06ab77c0e7 100644
--- a/src/com/vaadin/data/util/HierarchicalContainer.java
+++ b/src/com/vaadin/data/util/HierarchicalContainer.java
@@ -77,6 +77,7 @@ public class HierarchicalContainer extends IndexedContainer implements
* Can the specified Item have any children? Don't add a JavaDoc comment
* here, we use the default documentation from implemented interface.
*/
+ @Override
public boolean areChildrenAllowed(Object itemId) {
if (noChildrenAllowed.contains(itemId)) {
return false;
@@ -89,6 +90,7 @@ public class HierarchicalContainer extends IndexedContainer implements
* comment here, we use the default documentation from implemented
* interface.
*/
+ @Override
public Collection<?> getChildren(Object itemId) {
LinkedList<Object> c;
@@ -109,6 +111,7 @@ public class HierarchicalContainer extends IndexedContainer implements
* comment here, we use the default documentation from implemented
* interface.
*/
+ @Override
public Object getParent(Object itemId) {
if (filteredParent != null) {
return filteredParent.get(itemId);
@@ -121,6 +124,7 @@ public class HierarchicalContainer extends IndexedContainer implements
* JavaDoc comment here, we use the default documentation from implemented
* interface.
*/
+ @Override
public boolean hasChildren(Object itemId) {
if (filteredChildren != null) {
return filteredChildren.containsKey(itemId);
@@ -134,6 +138,7 @@ public class HierarchicalContainer extends IndexedContainer implements
* JavaDoc comment here, we use the default documentation from implemented
* interface.
*/
+ @Override
public boolean isRoot(Object itemId) {
// If the container is filtered the itemId must be among filteredRoots
// to be a root.
@@ -156,6 +161,7 @@ public class HierarchicalContainer extends IndexedContainer implements
* comment here, we use the default documentation from implemented
* interface.
*/
+ @Override
public Collection<?> rootItemIds() {
if (filteredRoots != null) {
return Collections.unmodifiableCollection(filteredRoots);
@@ -183,6 +189,7 @@ public class HierarchicalContainer extends IndexedContainer implements
* @return <code>true</code> if the operation succeeded, <code>false</code>
* if not
*/
+ @Override
public boolean setChildrenAllowed(Object itemId, boolean childrenAllowed) {
// Checks that the item is in the container
@@ -217,6 +224,7 @@ public class HierarchicalContainer extends IndexedContainer implements
* @return <code>true</code> if the operation succeeded, <code>false</code>
* if not
*/
+ @Override
public boolean setParent(Object itemId, Object newParentId) {
// Checks that the item is in the container
diff --git a/src/com/vaadin/data/util/HierarchicalContainerOrderedWrapper.java b/src/com/vaadin/data/util/HierarchicalContainerOrderedWrapper.java
index b7eac3e378..172dc0dd4f 100644
--- a/src/com/vaadin/data/util/HierarchicalContainerOrderedWrapper.java
+++ b/src/com/vaadin/data/util/HierarchicalContainerOrderedWrapper.java
@@ -25,35 +25,43 @@ public class HierarchicalContainerOrderedWrapper extends
hierarchical = toBeWrapped;
}
+ @Override
public boolean areChildrenAllowed(Object itemId) {
return hierarchical.areChildrenAllowed(itemId);
}
+ @Override
public Collection<?> getChildren(Object itemId) {
return hierarchical.getChildren(itemId);
}
+ @Override
public Object getParent(Object itemId) {
return hierarchical.getParent(itemId);
}
+ @Override
public boolean hasChildren(Object itemId) {
return hierarchical.hasChildren(itemId);
}
+ @Override
public boolean isRoot(Object itemId) {
return hierarchical.isRoot(itemId);
}
+ @Override
public Collection<?> rootItemIds() {
return hierarchical.rootItemIds();
}
+ @Override
public boolean setChildrenAllowed(Object itemId, boolean areChildrenAllowed)
throws UnsupportedOperationException {
return hierarchical.setChildrenAllowed(itemId, areChildrenAllowed);
}
+ @Override
public boolean setParent(Object itemId, Object newParentId)
throws UnsupportedOperationException {
return hierarchical.setParent(itemId, newParentId);
diff --git a/src/com/vaadin/data/util/IndexedContainer.java b/src/com/vaadin/data/util/IndexedContainer.java
index bcaa5eda42..b95b2c4de8 100644
--- a/src/com/vaadin/data/util/IndexedContainer.java
+++ b/src/com/vaadin/data/util/IndexedContainer.java
@@ -128,6 +128,7 @@ public class IndexedContainer extends
*
* @see com.vaadin.data.Container#getContainerPropertyIds()
*/
+ @Override
public Collection<?> getContainerPropertyIds() {
return Collections.unmodifiableCollection(propertyIds);
}
@@ -139,6 +140,7 @@ public class IndexedContainer extends
* the ID of the Property.
* @return Type of the requested Property
*/
+ @Override
public Class<?> getType(Object propertyId) {
return types.get(propertyId);
}
@@ -149,6 +151,7 @@ public class IndexedContainer extends
* @see com.vaadin.data.Container#getContainerProperty(java.lang.Object,
* java.lang.Object)
*/
+ @Override
public Property<?> getContainerProperty(Object itemId, Object propertyId) {
if (!containsId(itemId)) {
return null;
@@ -466,6 +469,7 @@ public class IndexedContainer extends
*
* @see com.vaadin.data.Property.ValueChangeEvent#getProperty()
*/
+ @Override
public Property getProperty() {
return (Property) getSource();
}
@@ -488,6 +492,7 @@ public class IndexedContainer extends
* @see com.vaadin.data.Property.ValueChangeNotifier#addListener(com.
* vaadin.data.Property.ValueChangeListener)
*/
+ @Override
public void addListener(Property.ValueChangeListener listener) {
if (propertyValueChangeListeners == null) {
propertyValueChangeListeners = new LinkedList<Property.ValueChangeListener>();
@@ -501,6 +506,7 @@ public class IndexedContainer extends
* @see com.vaadin.data.Property.ValueChangeNotifier#removeListener(com
* .vaadin.data.Property.ValueChangeListener)
*/
+ @Override
public void removeListener(Property.ValueChangeListener listener) {
if (propertyValueChangeListeners != null) {
propertyValueChangeListeners.remove(listener);
@@ -679,10 +685,12 @@ public class IndexedContainer extends
*
* @see com.vaadin.data.Item#getItemProperty(java.lang.Object)
*/
+ @Override
public Property<?> getItemProperty(Object id) {
return new IndexedContainerProperty(itemId, id);
}
+ @Override
public Collection<?> getItemPropertyIds() {
return Collections.unmodifiableCollection(propertyIds);
}
@@ -753,6 +761,7 @@ public class IndexedContainer extends
*
* @see com.vaadin.data.Item#addProperty(Object, Property)
*/
+ @Override
public boolean addItemProperty(Object id, Property property)
throws UnsupportedOperationException {
throw new UnsupportedOperationException("Indexed container item "
@@ -766,6 +775,7 @@ public class IndexedContainer extends
*
* @see com.vaadin.data.Item#removeProperty(Object)
*/
+ @Override
public boolean removeItemProperty(Object id)
throws UnsupportedOperationException {
throw new UnsupportedOperationException(
@@ -824,6 +834,7 @@ public class IndexedContainer extends
*
* @see com.vaadin.data.Property#getType()
*/
+ @Override
public Class<?> getType() {
return types.get(propertyId);
}
@@ -833,6 +844,7 @@ public class IndexedContainer extends
*
* @see com.vaadin.data.Property#getValue()
*/
+ @Override
public Object getValue() {
return items.get(itemId).get(propertyId);
}
@@ -842,6 +854,7 @@ public class IndexedContainer extends
*
* @see com.vaadin.data.Property#isReadOnly()
*/
+ @Override
public boolean isReadOnly() {
return readOnlyProperties.contains(this);
}
@@ -851,6 +864,7 @@ public class IndexedContainer extends
*
* @see com.vaadin.data.Property#setReadOnly(boolean)
*/
+ @Override
public void setReadOnly(boolean newStatus) {
if (newStatus) {
readOnlyProperties.add(this);
@@ -864,6 +878,7 @@ public class IndexedContainer extends
*
* @see com.vaadin.data.Property#setValue(java.lang.Object)
*/
+ @Override
public void setValue(Object newValue) throws Property.ReadOnlyException {
// Gets the Property set
final Map<Object, Object> propertySet = items.get(itemId);
@@ -946,6 +961,7 @@ public class IndexedContainer extends
* @see com.vaadin.data.Property.ValueChangeNotifier#addListener(
* com.vaadin.data.Property.ValueChangeListener)
*/
+ @Override
public void addListener(Property.ValueChangeListener listener) {
addSinglePropertyChangeListener(propertyId, itemId, listener);
}
@@ -956,6 +972,7 @@ public class IndexedContainer extends
* @see com.vaadin.data.Property.ValueChangeNotifier#removeListener
* (com.vaadin.data.Property.ValueChangeListener)
*/
+ @Override
public void removeListener(Property.ValueChangeListener listener) {
removeSinglePropertyChangeListener(propertyId, itemId, listener);
}
@@ -972,6 +989,7 @@ public class IndexedContainer extends
* @see com.vaadin.data.Container.Sortable#sort(java.lang.Object[],
* boolean[])
*/
+ @Override
public void sort(Object[] propertyId, boolean[] ascending) {
sortContainer(propertyId, ascending);
}
@@ -982,6 +1000,7 @@ public class IndexedContainer extends
* @see com.vaadin.data.Container.Sortable#getSortableContainerPropertyIds
* ()
*/
+ @Override
public Collection<?> getSortableContainerPropertyIds() {
return getSortablePropertyIds();
}
@@ -1054,6 +1073,7 @@ public class IndexedContainer extends
return nc;
}
+ @Override
public void addContainerFilter(Object propertyId, String filterString,
boolean ignoreCase, boolean onlyMatchPrefix) {
try {
@@ -1065,19 +1085,23 @@ public class IndexedContainer extends
}
}
+ @Override
public void removeAllContainerFilters() {
removeAllFilters();
}
+ @Override
public void removeContainerFilters(Object propertyId) {
removeFilters(propertyId);
}
+ @Override
public void addContainerFilter(Filter filter)
throws UnsupportedFilterException {
addFilter(filter);
}
+ @Override
public void removeContainerFilter(Filter filter) {
removeFilter(filter);
}
diff --git a/src/com/vaadin/data/util/ItemSorter.java b/src/com/vaadin/data/util/ItemSorter.java
index 7f9e3a3f13..4399dbe292 100644
--- a/src/com/vaadin/data/util/ItemSorter.java
+++ b/src/com/vaadin/data/util/ItemSorter.java
@@ -51,6 +51,7 @@ public interface ItemSorter extends Comparator<Object>, Cloneable, Serializable
*
* @see Comparator#compare(Object, Object)
*/
+ @Override
int compare(Object itemId1, Object itemId2);
}
diff --git a/src/com/vaadin/data/util/MethodProperty.java b/src/com/vaadin/data/util/MethodProperty.java
index 7df45e04ab..0c64d90481 100644
--- a/src/com/vaadin/data/util/MethodProperty.java
+++ b/src/com/vaadin/data/util/MethodProperty.java
@@ -568,6 +568,7 @@ public class MethodProperty<T> extends AbstractProperty<T> {
*
* @return type of the Property
*/
+ @Override
public final Class<? extends T> getType() {
return type;
}
@@ -591,6 +592,7 @@ public class MethodProperty<T> extends AbstractProperty<T> {
*
* @return the value of the Property
*/
+ @Override
public T getValue() {
try {
return (T) getMethod.invoke(instance, getArgs);
@@ -638,6 +640,7 @@ public class MethodProperty<T> extends AbstractProperty<T> {
* read-only mode.
* @see #invokeSetMethod(Object)
*/
+ @Override
@SuppressWarnings("unchecked")
public void setValue(Object newValue) throws Property.ReadOnlyException {
diff --git a/src/com/vaadin/data/util/MethodPropertyDescriptor.java b/src/com/vaadin/data/util/MethodPropertyDescriptor.java
index 5fdb982b9e..a2a76ec6cf 100644
--- a/src/com/vaadin/data/util/MethodPropertyDescriptor.java
+++ b/src/com/vaadin/data/util/MethodPropertyDescriptor.java
@@ -112,14 +112,17 @@ public class MethodPropertyDescriptor<BT> implements
}
};
+ @Override
public String getName() {
return name;
}
+ @Override
public Class<?> getPropertyType() {
return propertyType;
}
+ @Override
public Property<?> createProperty(Object bean) {
return new MethodProperty<Object>(propertyType, bean, readMethod,
writeMethod);
diff --git a/src/com/vaadin/data/util/NestedMethodProperty.java b/src/com/vaadin/data/util/NestedMethodProperty.java
index d7b0f44912..9bff38456d 100644
--- a/src/com/vaadin/data/util/NestedMethodProperty.java
+++ b/src/com/vaadin/data/util/NestedMethodProperty.java
@@ -165,6 +165,7 @@ public class NestedMethodProperty<T> extends AbstractProperty<T> {
this.setMethod = setMethod;
}
+ @Override
public Class<? extends T> getType() {
return type;
}
@@ -180,6 +181,7 @@ public class NestedMethodProperty<T> extends AbstractProperty<T> {
*
* @return the value of the Property
*/
+ @Override
public T getValue() {
try {
Object object = instance;
@@ -202,6 +204,7 @@ public class NestedMethodProperty<T> extends AbstractProperty<T> {
* read-only mode.
* @see #invokeSetMethod(Object)
*/
+ @Override
public void setValue(Object newValue) throws ReadOnlyException {
// Checks the mode
if (isReadOnly()) {
diff --git a/src/com/vaadin/data/util/NestedPropertyDescriptor.java b/src/com/vaadin/data/util/NestedPropertyDescriptor.java
index 6404f6361d..b67b425d1d 100644
--- a/src/com/vaadin/data/util/NestedPropertyDescriptor.java
+++ b/src/com/vaadin/data/util/NestedPropertyDescriptor.java
@@ -42,14 +42,17 @@ public class NestedPropertyDescriptor<BT> implements
this.propertyType = property.getType();
}
+ @Override
public String getName() {
return name;
}
+ @Override
public Class<?> getPropertyType() {
return propertyType;
}
+ @Override
public Property<?> createProperty(BT bean) {
return new NestedMethodProperty<Object>(bean, name);
}
diff --git a/src/com/vaadin/data/util/ObjectProperty.java b/src/com/vaadin/data/util/ObjectProperty.java
index 9c60b9146e..cb85b44c2a 100644
--- a/src/com/vaadin/data/util/ObjectProperty.java
+++ b/src/com/vaadin/data/util/ObjectProperty.java
@@ -91,6 +91,7 @@ public class ObjectProperty<T> extends AbstractProperty<T> {
*
* @return type of the Property
*/
+ @Override
public final Class<T> getType() {
return type;
}
@@ -100,6 +101,7 @@ public class ObjectProperty<T> extends AbstractProperty<T> {
*
* @return the value stored in the Property
*/
+ @Override
public T getValue() {
return value;
}
@@ -115,6 +117,7 @@ public class ObjectProperty<T> extends AbstractProperty<T> {
* @throws <code>Property.ReadOnlyException</code> if the object is in
* read-only mode
*/
+ @Override
@SuppressWarnings("unchecked")
public void setValue(Object newValue) throws Property.ReadOnlyException {
diff --git a/src/com/vaadin/data/util/PropertyFormatter.java b/src/com/vaadin/data/util/PropertyFormatter.java
index a63973535b..3d65726309 100644
--- a/src/com/vaadin/data/util/PropertyFormatter.java
+++ b/src/com/vaadin/data/util/PropertyFormatter.java
@@ -75,6 +75,7 @@ public abstract class PropertyFormatter<T> extends AbstractProperty<String>
* @return the current data source as a Property, or <code>null</code> if
* none defined.
*/
+ @Override
public Property<T> getPropertyDataSource() {
return dataSource;
}
@@ -91,6 +92,7 @@ public abstract class PropertyFormatter<T> extends AbstractProperty<String>
* @param newDataSource
* the new data source Property.
*/
+ @Override
public void setPropertyDataSource(Property newDataSource) {
boolean readOnly = false;
@@ -132,6 +134,7 @@ public abstract class PropertyFormatter<T> extends AbstractProperty<String>
}
/* Documented in the interface */
+ @Override
public Class<String> getType() {
return String.class;
}
@@ -142,6 +145,7 @@ public abstract class PropertyFormatter<T> extends AbstractProperty<String>
* @return If the datasource returns null, this is null. Otherwise this is
* String given by format().
*/
+ @Override
public String getValue() {
T value = dataSource == null ? null : dataSource.getValue();
if (value == null) {
@@ -195,6 +199,7 @@ public abstract class PropertyFormatter<T> extends AbstractProperty<String>
}
}
+ @Override
public void setValue(Object newValue) throws ReadOnlyException {
if (dataSource == null) {
return;
@@ -221,6 +226,7 @@ public abstract class PropertyFormatter<T> extends AbstractProperty<String>
*
* This should not be called directly.
*/
+ @Override
public void valueChange(com.vaadin.data.Property.ValueChangeEvent event) {
fireValueChange();
}
@@ -230,6 +236,7 @@ public abstract class PropertyFormatter<T> extends AbstractProperty<String>
*
* This should not be called directly.
*/
+ @Override
public void readOnlyStatusChange(
com.vaadin.data.Property.ReadOnlyStatusChangeEvent event) {
fireReadOnlyStatusChange();
diff --git a/src/com/vaadin/data/util/PropertysetItem.java b/src/com/vaadin/data/util/PropertysetItem.java
index 3270fa31f9..22f2da75b2 100644
--- a/src/com/vaadin/data/util/PropertysetItem.java
+++ b/src/com/vaadin/data/util/PropertysetItem.java
@@ -57,6 +57,7 @@ public class PropertysetItem implements Item, Item.PropertySetChangeNotifier,
* the identifier of the Property to get.
* @return the Property with the given ID or <code>null</code>
*/
+ @Override
public Property<?> getItemProperty(Object id) {
return map.get(id);
}
@@ -67,6 +68,7 @@ public class PropertysetItem implements Item, Item.PropertySetChangeNotifier,
* @return unmodifiable collection containing IDs of the Properties stored
* the Item
*/
+ @Override
public Collection<?> getItemPropertyIds() {
return Collections.unmodifiableCollection(list);
}
@@ -83,6 +85,7 @@ public class PropertysetItem implements Item, Item.PropertySetChangeNotifier,
* @return <code>true</code> if the operation succeeded <code>false</code>
* if not
*/
+ @Override
public boolean removeItemProperty(Object id) {
// Cant remove missing properties
@@ -107,6 +110,7 @@ public class PropertysetItem implements Item, Item.PropertySetChangeNotifier,
* @return <code>true</code> if the operation succeeded, <code>false</code>
* if not
*/
+ @Override
public boolean addItemProperty(Object id, Property property) {
// Null ids are not accepted
@@ -175,6 +179,7 @@ public class PropertysetItem implements Item, Item.PropertySetChangeNotifier,
*
* @return source object of the event as an <code>Item</code>
*/
+ @Override
public Item getItem() {
return (Item) getSource();
}
@@ -186,6 +191,7 @@ public class PropertysetItem implements Item, Item.PropertySetChangeNotifier,
* @param listener
* the new Listener to be registered.
*/
+ @Override
public void addListener(Item.PropertySetChangeListener listener) {
if (propertySetChangeListeners == null) {
propertySetChangeListeners = new LinkedList<PropertySetChangeListener>();
@@ -199,6 +205,7 @@ public class PropertysetItem implements Item, Item.PropertySetChangeNotifier,
* @param listener
* the Listener to be removed.
*/
+ @Override
public void removeListener(Item.PropertySetChangeListener listener) {
if (propertySetChangeListeners != null) {
propertySetChangeListeners.remove(listener);
diff --git a/src/com/vaadin/data/util/QueryContainer.java b/src/com/vaadin/data/util/QueryContainer.java
index 7fef63e7f1..dc7c883a7e 100644
--- a/src/com/vaadin/data/util/QueryContainer.java
+++ b/src/com/vaadin/data/util/QueryContainer.java
@@ -188,6 +188,7 @@ public class QueryContainer implements Container, Container.Ordered,
* @return Item Id.
*/
+ @Override
public Item getItem(Object id) {
return new Row(id);
}
@@ -198,6 +199,7 @@ public class QueryContainer implements Container, Container.Ordered,
* @return Collection of Property ID.
*/
+ @Override
public Collection<String> getContainerPropertyIds() {
return propertyIds;
}
@@ -207,6 +209,7 @@ public class QueryContainer implements Container, Container.Ordered,
*
* @return collection of Item IDs
*/
+ @Override
public Collection<?> getItemIds() {
final Collection<Integer> c = new ArrayList<Integer>(size);
for (int i = 1; i <= size; i++) {
@@ -229,6 +232,7 @@ public class QueryContainer implements Container, Container.Ordered,
* otherwise.
*/
+ @Override
public synchronized Property<?> getContainerProperty(Object itemId,
Object propertyId) {
if (!(itemId instanceof Integer && propertyId instanceof String)) {
@@ -256,6 +260,7 @@ public class QueryContainer implements Container, Container.Ordered,
* @return data type of the Properties
*/
+ @Override
public Class<?> getType(Object id) {
return propertyTypes.get(id);
}
@@ -265,6 +270,7 @@ public class QueryContainer implements Container, Container.Ordered,
*
* @return the number of items in the container.
*/
+ @Override
public int size() {
return size;
}
@@ -277,6 +283,7 @@ public class QueryContainer implements Container, Container.Ordered,
* @return <code>true</code> if given id is in the container;
* <code>false</code> otherwise.
*/
+ @Override
public boolean containsId(Object id) {
if (!(id instanceof Integer)) {
return false;
@@ -302,6 +309,7 @@ public class QueryContainer implements Container, Container.Ordered,
* @throws UnsupportedOperationException
* if the addItem method is not supported.
*/
+ @Override
public Item addItem(Object itemId) throws UnsupportedOperationException {
throw new UnsupportedOperationException();
}
@@ -313,6 +321,7 @@ public class QueryContainer implements Container, Container.Ordered,
* @throws UnsupportedOperationException
* if the addItem method is not supported.
*/
+ @Override
public Object addItem() throws UnsupportedOperationException {
throw new UnsupportedOperationException();
}
@@ -327,6 +336,7 @@ public class QueryContainer implements Container, Container.Ordered,
* @throws UnsupportedOperationException
* if the removeItem method is not supported.
*/
+ @Override
public boolean removeItem(Object itemId)
throws UnsupportedOperationException {
throw new UnsupportedOperationException();
@@ -346,6 +356,7 @@ public class QueryContainer implements Container, Container.Ordered,
* @throws UnsupportedOperationException
* if the addContainerProperty method is not supported.
*/
+ @Override
public boolean addContainerProperty(Object propertyId, Class<?> type,
Object defaultValue) throws UnsupportedOperationException {
throw new UnsupportedOperationException();
@@ -361,6 +372,7 @@ public class QueryContainer implements Container, Container.Ordered,
* @throws UnsupportedOperationException
* if the removeContainerProperty method is not supported.
*/
+ @Override
public boolean removeContainerProperty(Object propertyId)
throws UnsupportedOperationException {
throw new UnsupportedOperationException();
@@ -374,6 +386,7 @@ public class QueryContainer implements Container, Container.Ordered,
* @throws UnsupportedOperationException
* if the removeAllItems method is not supported.
*/
+ @Override
public boolean removeAllItems() throws UnsupportedOperationException {
throw new UnsupportedOperationException();
}
@@ -389,6 +402,7 @@ public class QueryContainer implements Container, Container.Ordered,
* @throws UnsupportedOperationException
* if the addItemAfter method is not supported.
*/
+ @Override
public Item addItemAfter(Object previousItemId, Object newItemId)
throws UnsupportedOperationException {
throw new UnsupportedOperationException();
@@ -404,6 +418,7 @@ public class QueryContainer implements Container, Container.Ordered,
* @throws UnsupportedOperationException
* if the addItemAfter method is not supported.
*/
+ @Override
public Object addItemAfter(Object previousItemId)
throws UnsupportedOperationException {
throw new UnsupportedOperationException();
@@ -414,6 +429,7 @@ public class QueryContainer implements Container, Container.Ordered,
*
* @return ID of the first Item in the list.
*/
+ @Override
public Object firstItemId() {
if (size < 1) {
return null;
@@ -427,6 +443,7 @@ public class QueryContainer implements Container, Container.Ordered,
* @param id
* ID of an Item in the Container.
*/
+ @Override
public boolean isFirstId(Object id) {
return size > 0 && (id instanceof Integer)
&& ((Integer) id).intValue() == 1;
@@ -439,6 +456,7 @@ public class QueryContainer implements Container, Container.Ordered,
* ID of an Item in the Container
*
*/
+ @Override
public boolean isLastId(Object id) {
return size > 0 && (id instanceof Integer)
&& ((Integer) id).intValue() == size;
@@ -449,6 +467,7 @@ public class QueryContainer implements Container, Container.Ordered,
*
* @return ID of the last Item.
*/
+ @Override
public Object lastItemId() {
if (size < 1) {
return null;
@@ -463,6 +482,7 @@ public class QueryContainer implements Container, Container.Ordered,
* ID of an Item in the Container.
* @return ID of the next Item or null.
*/
+ @Override
public Object nextItemId(Object id) {
if (size < 1 || !(id instanceof Integer)) {
return null;
@@ -481,6 +501,7 @@ public class QueryContainer implements Container, Container.Ordered,
* ID of an Item in the Container.
* @return ID of the previous Item or null.
*/
+ @Override
public Object prevItemId(Object id) {
if (size < 1 || !(id instanceof Integer)) {
return null;
@@ -519,6 +540,7 @@ public class QueryContainer implements Container, Container.Ordered,
* @throws UnsupportedOperationException
* if the addItemProperty method is not supported.
*/
+ @Override
public boolean addItemProperty(Object id, Property property)
throws UnsupportedOperationException {
throw new UnsupportedOperationException();
@@ -532,6 +554,7 @@ public class QueryContainer implements Container, Container.Ordered,
* identifier of the Property to get
* @return the Property with the given ID or <code>null</code>
*/
+ @Override
public Property<?> getItemProperty(Object propertyId) {
return getContainerProperty(id, propertyId);
}
@@ -542,6 +565,7 @@ public class QueryContainer implements Container, Container.Ordered,
* @return unmodifiable collection containing IDs of the Properties
* stored the Item.
*/
+ @Override
public Collection<String> getItemPropertyIds() {
return propertyIds;
}
@@ -556,6 +580,7 @@ public class QueryContainer implements Container, Container.Ordered,
* @throws UnsupportedOperationException
* if the removeItemProperty is not supported.
*/
+ @Override
public boolean removeItemProperty(Object id)
throws UnsupportedOperationException {
throw new UnsupportedOperationException();
@@ -588,6 +613,7 @@ public class QueryContainer implements Container, Container.Ordered,
* @throws UnsupportedOperationException
* if the addItemAt is not supported.
*/
+ @Override
public Item addItemAt(int index, Object newItemId)
throws UnsupportedOperationException {
throw new UnsupportedOperationException();
@@ -605,6 +631,7 @@ public class QueryContainer implements Container, Container.Ordered,
* if the addItemAt is not supported.
*/
+ @Override
public Object addItemAt(int index) throws UnsupportedOperationException {
throw new UnsupportedOperationException();
}
@@ -616,6 +643,7 @@ public class QueryContainer implements Container, Container.Ordered,
* Index Id.
* @return ID in the given index.
*/
+ @Override
public Object getIdByIndex(int index) {
if (size < 1 || index < 0 || index >= size) {
return null;
@@ -632,6 +660,7 @@ public class QueryContainer implements Container, Container.Ordered,
* Item
*/
+ @Override
public int indexOfId(Object id) {
if (size < 1 || !(id instanceof Integer)) {
return -1;
diff --git a/src/com/vaadin/data/util/TextFileProperty.java b/src/com/vaadin/data/util/TextFileProperty.java
index 5ebba98062..598b721a9c 100644
--- a/src/com/vaadin/data/util/TextFileProperty.java
+++ b/src/com/vaadin/data/util/TextFileProperty.java
@@ -64,6 +64,7 @@ public class TextFileProperty extends AbstractProperty<String> {
*
* @see com.vaadin.data.Property#getType()
*/
+ @Override
public Class<String> getType() {
return String.class;
}
@@ -73,6 +74,7 @@ public class TextFileProperty extends AbstractProperty<String> {
*
* @see com.vaadin.data.Property#getValue()
*/
+ @Override
public String getValue() {
if (file == null) {
return null;
@@ -114,6 +116,7 @@ public class TextFileProperty extends AbstractProperty<String> {
*
* @see com.vaadin.data.Property#setValue(java.lang.Object)
*/
+ @Override
public void setValue(Object newValue) throws ReadOnlyException {
if (isReadOnly()) {
throw new ReadOnlyException();
diff --git a/src/com/vaadin/data/util/TransactionalPropertyWrapper.java b/src/com/vaadin/data/util/TransactionalPropertyWrapper.java
index 06ec0935c3..d042bfaac2 100644
--- a/src/com/vaadin/data/util/TransactionalPropertyWrapper.java
+++ b/src/com/vaadin/data/util/TransactionalPropertyWrapper.java
@@ -44,6 +44,7 @@ public class TransactionalPropertyWrapper<T> extends AbstractProperty<T>
((ValueChangeNotifier) wrappedProperty)
.addListener(new ValueChangeListener() {
+ @Override
public void valueChange(ValueChangeEvent event) {
fireValueChange();
}
@@ -51,29 +52,35 @@ public class TransactionalPropertyWrapper<T> extends AbstractProperty<T>
}
}
+ @Override
public Class getType() {
return wrappedProperty.getType();
}
+ @Override
public T getValue() {
return wrappedProperty.getValue();
}
+ @Override
public void setValue(Object newValue) throws ReadOnlyException {
// Causes a value change to be sent to this listener which in turn fires
// a new value change event for this property
wrappedProperty.setValue(newValue);
}
+ @Override
public void startTransaction() {
inTransaction = true;
valueBeforeTransaction = getValue();
}
+ @Override
public void commit() {
endTransaction();
}
+ @Override
public void rollback() {
try {
wrappedProperty.setValue(valueBeforeTransaction);
diff --git a/src/com/vaadin/data/util/converter/DateToLongConverter.java b/src/com/vaadin/data/util/converter/DateToLongConverter.java
index 537800f617..aeba38aa1f 100644
--- a/src/com/vaadin/data/util/converter/DateToLongConverter.java
+++ b/src/com/vaadin/data/util/converter/DateToLongConverter.java
@@ -24,6 +24,7 @@ public class DateToLongConverter implements Converter<Date, Long> {
* com.vaadin.data.util.converter.Converter#convertToModel(java.lang.Object,
* java.util.Locale)
*/
+ @Override
public Long convertToModel(Date value, Locale locale) {
if (value == null) {
return null;
@@ -39,6 +40,7 @@ public class DateToLongConverter implements Converter<Date, Long> {
* com.vaadin.data.util.converter.Converter#convertToPresentation(java.lang
* .Object, java.util.Locale)
*/
+ @Override
public Date convertToPresentation(Long value, Locale locale) {
if (value == null) {
return null;
@@ -52,6 +54,7 @@ public class DateToLongConverter implements Converter<Date, Long> {
*
* @see com.vaadin.data.util.converter.Converter#getModelType()
*/
+ @Override
public Class<Long> getModelType() {
return Long.class;
}
@@ -61,6 +64,7 @@ public class DateToLongConverter implements Converter<Date, Long> {
*
* @see com.vaadin.data.util.converter.Converter#getPresentationType()
*/
+ @Override
public Class<Date> getPresentationType() {
return Date.class;
}
diff --git a/src/com/vaadin/data/util/converter/DefaultConverterFactory.java b/src/com/vaadin/data/util/converter/DefaultConverterFactory.java
index 3ad7b6a85b..afb95d81ed 100644
--- a/src/com/vaadin/data/util/converter/DefaultConverterFactory.java
+++ b/src/com/vaadin/data/util/converter/DefaultConverterFactory.java
@@ -27,6 +27,7 @@ public class DefaultConverterFactory implements ConverterFactory {
private final static Logger log = Logger
.getLogger(DefaultConverterFactory.class.getName());
+ @Override
public <PRESENTATION, MODEL> Converter<PRESENTATION, MODEL> createConverter(
Class<PRESENTATION> presentationType, Class<MODEL> modelType) {
Converter<PRESENTATION, MODEL> converter = findConverter(
diff --git a/src/com/vaadin/data/util/converter/ReverseConverter.java b/src/com/vaadin/data/util/converter/ReverseConverter.java
index 1c561f29e8..fa1bb5daf1 100644
--- a/src/com/vaadin/data/util/converter/ReverseConverter.java
+++ b/src/com/vaadin/data/util/converter/ReverseConverter.java
@@ -42,6 +42,7 @@ public class ReverseConverter<PRESENTATION, MODEL> implements
* @see com.vaadin.data.util.converter.Converter#convertToModel(java
* .lang.Object, java.util.Locale)
*/
+ @Override
public MODEL convertToModel(PRESENTATION value, Locale locale)
throws com.vaadin.data.util.converter.Converter.ConversionException {
return realConverter.convertToPresentation(value, locale);
@@ -54,6 +55,7 @@ public class ReverseConverter<PRESENTATION, MODEL> implements
* com.vaadin.data.util.converter.Converter#convertToPresentation(java.lang
* .Object, java.util.Locale)
*/
+ @Override
public PRESENTATION convertToPresentation(MODEL value, Locale locale)
throws com.vaadin.data.util.converter.Converter.ConversionException {
return realConverter.convertToModel(value, locale);
@@ -64,6 +66,7 @@ public class ReverseConverter<PRESENTATION, MODEL> implements
*
* @see com.vaadin.data.util.converter.Converter#getSourceType()
*/
+ @Override
public Class<MODEL> getModelType() {
return realConverter.getPresentationType();
}
@@ -73,6 +76,7 @@ public class ReverseConverter<PRESENTATION, MODEL> implements
*
* @see com.vaadin.data.util.converter.Converter#getTargetType()
*/
+ @Override
public Class<PRESENTATION> getPresentationType() {
return realConverter.getModelType();
}
diff --git a/src/com/vaadin/data/util/converter/StringToBooleanConverter.java b/src/com/vaadin/data/util/converter/StringToBooleanConverter.java
index 96a3a3d071..999f575dc4 100644
--- a/src/com/vaadin/data/util/converter/StringToBooleanConverter.java
+++ b/src/com/vaadin/data/util/converter/StringToBooleanConverter.java
@@ -27,6 +27,7 @@ public class StringToBooleanConverter implements Converter<String, Boolean> {
* com.vaadin.data.util.converter.Converter#convertToModel(java.lang.Object,
* java.util.Locale)
*/
+ @Override
public Boolean convertToModel(String value, Locale locale)
throws ConversionException {
if (value == null) {
@@ -71,6 +72,7 @@ public class StringToBooleanConverter implements Converter<String, Boolean> {
* com.vaadin.data.util.converter.Converter#convertToPresentation(java.lang
* .Object, java.util.Locale)
*/
+ @Override
public String convertToPresentation(Boolean value, Locale locale)
throws ConversionException {
if (value == null) {
@@ -88,6 +90,7 @@ public class StringToBooleanConverter implements Converter<String, Boolean> {
*
* @see com.vaadin.data.util.converter.Converter#getModelType()
*/
+ @Override
public Class<Boolean> getModelType() {
return Boolean.class;
}
@@ -97,6 +100,7 @@ public class StringToBooleanConverter implements Converter<String, Boolean> {
*
* @see com.vaadin.data.util.converter.Converter#getPresentationType()
*/
+ @Override
public Class<String> getPresentationType() {
return String.class;
}
diff --git a/src/com/vaadin/data/util/converter/StringToDateConverter.java b/src/com/vaadin/data/util/converter/StringToDateConverter.java
index 6f3c2e47f6..487b02b2aa 100644
--- a/src/com/vaadin/data/util/converter/StringToDateConverter.java
+++ b/src/com/vaadin/data/util/converter/StringToDateConverter.java
@@ -52,6 +52,7 @@ public class StringToDateConverter implements Converter<String, Date> {
* com.vaadin.data.util.converter.Converter#convertToModel(java.lang.Object,
* java.util.Locale)
*/
+ @Override
public Date convertToModel(String value, Locale locale)
throws com.vaadin.data.util.converter.Converter.ConversionException {
if (value == null) {
@@ -78,6 +79,7 @@ public class StringToDateConverter implements Converter<String, Date> {
* com.vaadin.data.util.converter.Converter#convertToPresentation(java.lang
* .Object, java.util.Locale)
*/
+ @Override
public String convertToPresentation(Date value, Locale locale)
throws com.vaadin.data.util.converter.Converter.ConversionException {
if (value == null) {
@@ -92,6 +94,7 @@ public class StringToDateConverter implements Converter<String, Date> {
*
* @see com.vaadin.data.util.converter.Converter#getModelType()
*/
+ @Override
public Class<Date> getModelType() {
return Date.class;
}
@@ -101,6 +104,7 @@ public class StringToDateConverter implements Converter<String, Date> {
*
* @see com.vaadin.data.util.converter.Converter#getPresentationType()
*/
+ @Override
public Class<String> getPresentationType() {
return String.class;
}
diff --git a/src/com/vaadin/data/util/converter/StringToDoubleConverter.java b/src/com/vaadin/data/util/converter/StringToDoubleConverter.java
index 60a38f4127..251f91855b 100644
--- a/src/com/vaadin/data/util/converter/StringToDoubleConverter.java
+++ b/src/com/vaadin/data/util/converter/StringToDoubleConverter.java
@@ -49,6 +49,7 @@ public class StringToDoubleConverter implements Converter<String, Double> {
* com.vaadin.data.util.converter.Converter#convertToModel(java.lang.Object,
* java.util.Locale)
*/
+ @Override
public Double convertToModel(String value, Locale locale)
throws ConversionException {
if (value == null) {
@@ -74,6 +75,7 @@ public class StringToDoubleConverter implements Converter<String, Double> {
* com.vaadin.data.util.converter.Converter#convertToPresentation(java.lang
* .Object, java.util.Locale)
*/
+ @Override
public String convertToPresentation(Double value, Locale locale)
throws ConversionException {
if (value == null) {
@@ -88,6 +90,7 @@ public class StringToDoubleConverter implements Converter<String, Double> {
*
* @see com.vaadin.data.util.converter.Converter#getModelType()
*/
+ @Override
public Class<Double> getModelType() {
return Double.class;
}
@@ -97,6 +100,7 @@ public class StringToDoubleConverter implements Converter<String, Double> {
*
* @see com.vaadin.data.util.converter.Converter#getPresentationType()
*/
+ @Override
public Class<String> getPresentationType() {
return String.class;
}
diff --git a/src/com/vaadin/data/util/converter/StringToIntegerConverter.java b/src/com/vaadin/data/util/converter/StringToIntegerConverter.java
index e55feec3b6..950f01c6ab 100644
--- a/src/com/vaadin/data/util/converter/StringToIntegerConverter.java
+++ b/src/com/vaadin/data/util/converter/StringToIntegerConverter.java
@@ -39,6 +39,7 @@ public class StringToIntegerConverter implements Converter<String, Integer> {
return NumberFormat.getIntegerInstance(locale);
}
+ @Override
public Integer convertToModel(String value, Locale locale)
throws ConversionException {
if (value == null) {
@@ -64,6 +65,7 @@ public class StringToIntegerConverter implements Converter<String, Integer> {
return parsedValue.intValue();
}
+ @Override
public String convertToPresentation(Integer value, Locale locale)
throws ConversionException {
if (value == null) {
@@ -73,10 +75,12 @@ public class StringToIntegerConverter implements Converter<String, Integer> {
return getFormat(locale).format(value);
}
+ @Override
public Class<Integer> getModelType() {
return Integer.class;
}
+ @Override
public Class<String> getPresentationType() {
return String.class;
}
diff --git a/src/com/vaadin/data/util/converter/StringToNumberConverter.java b/src/com/vaadin/data/util/converter/StringToNumberConverter.java
index d1816007e7..42699a326a 100644
--- a/src/com/vaadin/data/util/converter/StringToNumberConverter.java
+++ b/src/com/vaadin/data/util/converter/StringToNumberConverter.java
@@ -45,6 +45,7 @@ public class StringToNumberConverter implements Converter<String, Number> {
* com.vaadin.data.util.converter.Converter#convertToModel(java.lang.Object,
* java.util.Locale)
*/
+ @Override
public Number convertToModel(String value, Locale locale)
throws ConversionException {
if (value == null) {
@@ -77,6 +78,7 @@ public class StringToNumberConverter implements Converter<String, Number> {
* com.vaadin.data.util.converter.Converter#convertToPresentation(java.lang
* .Object, java.util.Locale)
*/
+ @Override
public String convertToPresentation(Number value, Locale locale)
throws ConversionException {
if (value == null) {
@@ -91,6 +93,7 @@ public class StringToNumberConverter implements Converter<String, Number> {
*
* @see com.vaadin.data.util.converter.Converter#getModelType()
*/
+ @Override
public Class<Number> getModelType() {
return Number.class;
}
@@ -100,6 +103,7 @@ public class StringToNumberConverter implements Converter<String, Number> {
*
* @see com.vaadin.data.util.converter.Converter#getPresentationType()
*/
+ @Override
public Class<String> getPresentationType() {
return String.class;
}
diff --git a/src/com/vaadin/data/util/filter/AbstractJunctionFilter.java b/src/com/vaadin/data/util/filter/AbstractJunctionFilter.java
index 0f20e28586..482b10120c 100644
--- a/src/com/vaadin/data/util/filter/AbstractJunctionFilter.java
+++ b/src/com/vaadin/data/util/filter/AbstractJunctionFilter.java
@@ -45,6 +45,7 @@ public abstract class AbstractJunctionFilter implements Filter {
* If there are no sub-filters, false is returned - override in subclasses
* to change this behavior.
*/
+ @Override
public boolean appliesToProperty(Object propertyId) {
for (Filter filter : getFilters()) {
if (filter.appliesToProperty(propertyId)) {
diff --git a/src/com/vaadin/data/util/filter/And.java b/src/com/vaadin/data/util/filter/And.java
index 08182794a8..ca6c35aba7 100644
--- a/src/com/vaadin/data/util/filter/And.java
+++ b/src/com/vaadin/data/util/filter/And.java
@@ -30,6 +30,7 @@ public final class And extends AbstractJunctionFilter {
super(filters);
}
+ @Override
public boolean passesFilter(Object itemId, Item item)
throws UnsupportedFilterException {
for (Filter filter : getFilters()) {
diff --git a/src/com/vaadin/data/util/filter/Between.java b/src/com/vaadin/data/util/filter/Between.java
index dd47d36c7f..b00a74d13d 100644
--- a/src/com/vaadin/data/util/filter/Between.java
+++ b/src/com/vaadin/data/util/filter/Between.java
@@ -30,6 +30,7 @@ public class Between implements Filter {
return endValue;
}
+ @Override
public boolean passesFilter(Object itemId, Item item)
throws UnsupportedOperationException {
Object value = item.getItemProperty(getPropertyId()).getValue();
@@ -41,6 +42,7 @@ public class Between implements Filter {
return false;
}
+ @Override
public boolean appliesToProperty(Object propertyId) {
return getPropertyId() != null && getPropertyId().equals(propertyId);
}
diff --git a/src/com/vaadin/data/util/filter/Compare.java b/src/com/vaadin/data/util/filter/Compare.java
index 111d95f055..4091f5b922 100644
--- a/src/com/vaadin/data/util/filter/Compare.java
+++ b/src/com/vaadin/data/util/filter/Compare.java
@@ -227,6 +227,7 @@ public abstract class Compare implements Filter {
this.operation = operation;
}
+ @Override
public boolean passesFilter(Object itemId, Item item) {
final Property<?> p = item.getItemProperty(getPropertyId());
if (null == p) {
@@ -264,6 +265,7 @@ public abstract class Compare implements Filter {
+ value1 + ", " + getValue());
}
+ @Override
public boolean appliesToProperty(Object propertyId) {
return getPropertyId().equals(propertyId);
}
diff --git a/src/com/vaadin/data/util/filter/IsNull.java b/src/com/vaadin/data/util/filter/IsNull.java
index aad71a7c80..3faf4153ee 100644
--- a/src/com/vaadin/data/util/filter/IsNull.java
+++ b/src/com/vaadin/data/util/filter/IsNull.java
@@ -33,6 +33,7 @@ public final class IsNull implements Filter {
this.propertyId = propertyId;
}
+ @Override
public boolean passesFilter(Object itemId, Item item)
throws UnsupportedOperationException {
final Property<?> p = item.getItemProperty(getPropertyId());
@@ -42,6 +43,7 @@ public final class IsNull implements Filter {
return null == p.getValue();
}
+ @Override
public boolean appliesToProperty(Object propertyId) {
return getPropertyId().equals(propertyId);
}
diff --git a/src/com/vaadin/data/util/filter/Like.java b/src/com/vaadin/data/util/filter/Like.java
index 723623bb69..3dcc48e809 100644
--- a/src/com/vaadin/data/util/filter/Like.java
+++ b/src/com/vaadin/data/util/filter/Like.java
@@ -37,6 +37,7 @@ public class Like implements Filter {
return caseSensitive;
}
+ @Override
public boolean passesFilter(Object itemId, Item item)
throws UnsupportedOperationException {
if (!item.getItemProperty(getPropertyId()).getType()
@@ -54,6 +55,7 @@ public class Like implements Filter {
return colValue.toUpperCase().matches(pattern.toUpperCase());
}
+ @Override
public boolean appliesToProperty(Object propertyId) {
return getPropertyId() != null && getPropertyId().equals(propertyId);
}
diff --git a/src/com/vaadin/data/util/filter/Not.java b/src/com/vaadin/data/util/filter/Not.java
index 1731dcc2b5..bbfc9ca86a 100644
--- a/src/com/vaadin/data/util/filter/Not.java
+++ b/src/com/vaadin/data/util/filter/Not.java
@@ -36,6 +36,7 @@ public final class Not implements Filter {
return filter;
}
+ @Override
public boolean passesFilter(Object itemId, Item item)
throws UnsupportedOperationException {
return !filter.passesFilter(itemId, item);
@@ -48,6 +49,7 @@ public final class Not implements Filter {
*
* @return boolean
*/
+ @Override
public boolean appliesToProperty(Object propertyId) {
return filter.appliesToProperty(propertyId);
}
diff --git a/src/com/vaadin/data/util/filter/Or.java b/src/com/vaadin/data/util/filter/Or.java
index 194afbc7da..b60074f7e3 100644
--- a/src/com/vaadin/data/util/filter/Or.java
+++ b/src/com/vaadin/data/util/filter/Or.java
@@ -30,6 +30,7 @@ public final class Or extends AbstractJunctionFilter {
super(filters);
}
+ @Override
public boolean passesFilter(Object itemId, Item item)
throws UnsupportedFilterException {
for (Filter filter : getFilters()) {
diff --git a/src/com/vaadin/data/util/filter/SimpleStringFilter.java b/src/com/vaadin/data/util/filter/SimpleStringFilter.java
index 6203251045..f98b2c02b4 100644
--- a/src/com/vaadin/data/util/filter/SimpleStringFilter.java
+++ b/src/com/vaadin/data/util/filter/SimpleStringFilter.java
@@ -39,6 +39,7 @@ public final class SimpleStringFilter implements Filter {
this.onlyMatchPrefix = onlyMatchPrefix;
}
+ @Override
public boolean passesFilter(Object itemId, Item item) {
final Property<?> p = item.getItemProperty(propertyId);
if (p == null) {
@@ -62,6 +63,7 @@ public final class SimpleStringFilter implements Filter {
return true;
}
+ @Override
public boolean appliesToProperty(Object propertyId) {
return this.propertyId.equals(propertyId);
}
diff --git a/src/com/vaadin/data/util/sqlcontainer/ColumnProperty.java b/src/com/vaadin/data/util/sqlcontainer/ColumnProperty.java
index d84a164bfa..168bce1880 100644
--- a/src/com/vaadin/data/util/sqlcontainer/ColumnProperty.java
+++ b/src/com/vaadin/data/util/sqlcontainer/ColumnProperty.java
@@ -61,6 +61,7 @@ final public class ColumnProperty implements Property {
this.readOnly = readOnly;
}
+ @Override
public Object getValue() {
if (isModified()) {
return changedValue;
@@ -68,6 +69,7 @@ final public class ColumnProperty implements Property {
return value;
}
+ @Override
public void setValue(Object newValue) throws ReadOnlyException {
if (newValue == null && !nullable) {
throw new NotNullableException(
@@ -134,10 +136,12 @@ final public class ColumnProperty implements Property {
|| newValue.equals(referenceValue);
}
+ @Override
public Class<?> getType() {
return type;
}
+ @Override
public boolean isReadOnly() {
return readOnly;
}
@@ -146,6 +150,7 @@ final public class ColumnProperty implements Property {
return allowReadOnlyChange;
}
+ @Override
public void setReadOnly(boolean newStatus) {
if (allowReadOnlyChange) {
readOnly = newStatus;
diff --git a/src/com/vaadin/data/util/sqlcontainer/RowItem.java b/src/com/vaadin/data/util/sqlcontainer/RowItem.java
index adededb65c..d613a06b63 100644
--- a/src/com/vaadin/data/util/sqlcontainer/RowItem.java
+++ b/src/com/vaadin/data/util/sqlcontainer/RowItem.java
@@ -48,6 +48,7 @@ public final class RowItem implements Item {
this.id = id;
}
+ @Override
public Property<?> getItemProperty(Object id) {
if (id instanceof String && id != null) {
for (ColumnProperty cp : properties) {
@@ -59,6 +60,7 @@ public final class RowItem implements Item {
return null;
}
+ @Override
public Collection<?> getItemPropertyIds() {
Collection<String> ids = new ArrayList<String>(properties.size());
for (ColumnProperty cp : properties) {
@@ -71,6 +73,7 @@ public final class RowItem implements Item {
* Adding properties is not supported. Properties are generated by
* SQLContainer.
*/
+ @Override
public boolean addItemProperty(Object id, Property property)
throws UnsupportedOperationException {
throw new UnsupportedOperationException();
@@ -80,6 +83,7 @@ public final class RowItem implements Item {
* Removing properties is not supported. Properties are generated by
* SQLContainer.
*/
+ @Override
public boolean removeItemProperty(Object id)
throws UnsupportedOperationException {
throw new UnsupportedOperationException();
diff --git a/src/com/vaadin/data/util/sqlcontainer/SQLContainer.java b/src/com/vaadin/data/util/sqlcontainer/SQLContainer.java
index e9b5b4fea3..5827390723 100644
--- a/src/com/vaadin/data/util/sqlcontainer/SQLContainer.java
+++ b/src/com/vaadin/data/util/sqlcontainer/SQLContainer.java
@@ -130,6 +130,7 @@ public class SQLContainer implements Container, Container.Filterable,
* {@inheritDoc}
*/
+ @Override
public Object addItem() throws UnsupportedOperationException {
Object emptyKey[] = new Object[delegate.getPrimaryKeyColumns().size()];
RowId itemId = new TemporaryRowId(emptyKey);
@@ -186,6 +187,7 @@ public class SQLContainer implements Container, Container.Filterable,
* @see com.vaadin.data.Container#containsId(java.lang.Object)
*/
+ @Override
public boolean containsId(Object itemId) {
if (itemId == null) {
return false;
@@ -227,6 +229,7 @@ public class SQLContainer implements Container, Container.Filterable,
* java.lang.Object)
*/
+ @Override
public Property<?> getContainerProperty(Object itemId, Object propertyId) {
Item item = getItem(itemId);
if (item == null) {
@@ -241,6 +244,7 @@ public class SQLContainer implements Container, Container.Filterable,
* @see com.vaadin.data.Container#getContainerPropertyIds()
*/
+ @Override
public Collection<?> getContainerPropertyIds() {
return Collections.unmodifiableCollection(propertyIds);
}
@@ -251,6 +255,7 @@ public class SQLContainer implements Container, Container.Filterable,
* @see com.vaadin.data.Container#getItem(java.lang.Object)
*/
+ @Override
public Item getItem(Object itemId) {
if (!cachedItems.containsKey(itemId)) {
int index = indexOfId(itemId);
@@ -298,6 +303,7 @@ public class SQLContainer implements Container, Container.Filterable,
* {@inheritDoc}
*/
+ @Override
public Collection<?> getItemIds() {
updateCount();
ArrayList<RowId> ids = new ArrayList<RowId>();
@@ -355,6 +361,7 @@ public class SQLContainer implements Container, Container.Filterable,
* @see com.vaadin.data.Container#getType(java.lang.Object)
*/
+ @Override
public Class<?> getType(Object propertyId) {
if (!propertyIds.contains(propertyId)) {
return null;
@@ -368,6 +375,7 @@ public class SQLContainer implements Container, Container.Filterable,
* @see com.vaadin.data.Container#size()
*/
+ @Override
public int size() {
updateCount();
return size + sizeOfAddedItems() - removedItems.size();
@@ -379,6 +387,7 @@ public class SQLContainer implements Container, Container.Filterable,
* @see com.vaadin.data.Container#removeItem(java.lang.Object)
*/
+ @Override
public boolean removeItem(Object itemId)
throws UnsupportedOperationException {
if (!containsId(itemId)) {
@@ -447,6 +456,7 @@ public class SQLContainer implements Container, Container.Filterable,
* @see com.vaadin.data.Container#removeAllItems()
*/
+ @Override
public boolean removeAllItems() throws UnsupportedOperationException {
if (autoCommit) {
/* Remove and commit instantly. */
@@ -508,6 +518,7 @@ public class SQLContainer implements Container, Container.Filterable,
* {@inheritDoc}
*/
+ @Override
public void addContainerFilter(Filter filter)
throws UnsupportedFilterException {
// filter.setCaseSensitive(!ignoreCase);
@@ -520,8 +531,10 @@ public class SQLContainer implements Container, Container.Filterable,
* {@inheritDoc}
*/
+ @Override
public void removeContainerFilter(Filter filter) {
filters.remove(filter);
+ refresh();
}
/**
@@ -560,6 +573,7 @@ public class SQLContainer implements Container, Container.Filterable,
* {@inheritDoc}
*/
+ @Override
public void removeAllContainerFilters() {
filters.clear();
refresh();
@@ -575,6 +589,7 @@ public class SQLContainer implements Container, Container.Filterable,
* @see com.vaadin.data.Container.Indexed#indexOfId(java.lang.Object)
*/
+ @Override
public int indexOfId(Object itemId) {
// First check if the id is in the added items
for (int ix = 0; ix < addedItems.size(); ix++) {
@@ -622,6 +637,7 @@ public class SQLContainer implements Container, Container.Filterable,
* @see com.vaadin.data.Container.Indexed#getIdByIndex(int)
*/
+ @Override
public Object getIdByIndex(int index) {
if (index < 0 || index > size() - 1) {
return null;
@@ -649,6 +665,7 @@ public class SQLContainer implements Container, Container.Filterable,
* @see com.vaadin.data.Container.Ordered#nextItemId(java.lang.Object)
*/
+ @Override
public Object nextItemId(Object itemId) {
return getIdByIndex(indexOfId(itemId) + 1);
}
@@ -659,6 +676,7 @@ public class SQLContainer implements Container, Container.Filterable,
* @see com.vaadin.data.Container.Ordered#prevItemId(java.lang.Object)
*/
+ @Override
public Object prevItemId(Object itemId) {
return getIdByIndex(indexOfId(itemId) - 1);
}
@@ -669,6 +687,7 @@ public class SQLContainer implements Container, Container.Filterable,
* @see com.vaadin.data.Container.Ordered#firstItemId()
*/
+ @Override
public Object firstItemId() {
updateCount();
if (size == 0) {
@@ -697,6 +716,7 @@ public class SQLContainer implements Container, Container.Filterable,
* @see com.vaadin.data.Container.Ordered#lastItemId()
*/
+ @Override
public Object lastItemId() {
if (addedItems.isEmpty()) {
int lastIx = size() - 1;
@@ -723,6 +743,7 @@ public class SQLContainer implements Container, Container.Filterable,
* @see com.vaadin.data.Container.Ordered#isFirstId(java.lang.Object)
*/
+ @Override
public boolean isFirstId(Object itemId) {
return firstItemId().equals(itemId);
}
@@ -733,6 +754,7 @@ public class SQLContainer implements Container, Container.Filterable,
* @see com.vaadin.data.Container.Ordered#isLastId(java.lang.Object)
*/
+ @Override
public boolean isLastId(Object itemId) {
return lastItemId().equals(itemId);
}
@@ -748,6 +770,7 @@ public class SQLContainer implements Container, Container.Filterable,
* boolean[])
*/
+ @Override
public void sort(Object[] propertyId, boolean[] ascending) {
sorters.clear();
if (propertyId == null || propertyId.length == 0) {
@@ -777,6 +800,7 @@ public class SQLContainer implements Container, Container.Filterable,
* @see com.vaadin.data.Container.Sortable#getSortableContainerPropertyIds()
*/
+ @Override
public Collection<?> getSortableContainerPropertyIds() {
return getContainerPropertyIds();
}
@@ -1351,6 +1375,7 @@ public class SQLContainer implements Container, Container.Filterable,
* java.lang.Class, java.lang.Object)
*/
+ @Override
public boolean addContainerProperty(Object propertyId, Class<?> type,
Object defaultValue) throws UnsupportedOperationException {
throw new UnsupportedOperationException();
@@ -1362,6 +1387,7 @@ public class SQLContainer implements Container, Container.Filterable,
* @see com.vaadin.data.Container#removeContainerProperty(java.lang.Object)
*/
+ @Override
public boolean removeContainerProperty(Object propertyId)
throws UnsupportedOperationException {
throw new UnsupportedOperationException();
@@ -1373,6 +1399,7 @@ public class SQLContainer implements Container, Container.Filterable,
* @see com.vaadin.data.Container#addItem(java.lang.Object)
*/
+ @Override
public Item addItem(Object itemId) throws UnsupportedOperationException {
throw new UnsupportedOperationException();
}
@@ -1384,6 +1411,7 @@ public class SQLContainer implements Container, Container.Filterable,
* java.lang.Object)
*/
+ @Override
public Item addItemAfter(Object previousItemId, Object newItemId)
throws UnsupportedOperationException {
throw new UnsupportedOperationException();
@@ -1395,6 +1423,7 @@ public class SQLContainer implements Container, Container.Filterable,
* @see com.vaadin.data.Container.Indexed#addItemAt(int, java.lang.Object)
*/
+ @Override
public Item addItemAt(int index, Object newItemId)
throws UnsupportedOperationException {
throw new UnsupportedOperationException();
@@ -1406,6 +1435,7 @@ public class SQLContainer implements Container, Container.Filterable,
* @see com.vaadin.data.Container.Indexed#addItemAt(int)
*/
+ @Override
public Object addItemAt(int index) throws UnsupportedOperationException {
throw new UnsupportedOperationException();
}
@@ -1416,6 +1446,7 @@ public class SQLContainer implements Container, Container.Filterable,
* @see com.vaadin.data.Container.Ordered#addItemAfter(java.lang.Object)
*/
+ @Override
public Object addItemAfter(Object previousItemId)
throws UnsupportedOperationException {
throw new UnsupportedOperationException();
@@ -1433,6 +1464,7 @@ public class SQLContainer implements Container, Container.Filterable,
* .data.Container.ItemSetChangeListener)
*/
+ @Override
public void addListener(Container.ItemSetChangeListener listener) {
if (itemSetChangeListeners == null) {
itemSetChangeListeners = new LinkedList<Container.ItemSetChangeListener>();
@@ -1448,6 +1480,7 @@ public class SQLContainer implements Container, Container.Filterable,
* .data.Container.ItemSetChangeListener)
*/
+ @Override
public void removeListener(Container.ItemSetChangeListener listener) {
if (itemSetChangeListeners != null) {
itemSetChangeListeners.remove(listener);
@@ -1477,6 +1510,7 @@ public class SQLContainer implements Container, Container.Filterable,
super(source);
}
+ @Override
public Container getContainer() {
return (Container) getSource();
}
diff --git a/src/com/vaadin/data/util/sqlcontainer/connection/J2EEConnectionPool.java b/src/com/vaadin/data/util/sqlcontainer/connection/J2EEConnectionPool.java
index 40d0d0426f..9aa4f7c4be 100644
--- a/src/com/vaadin/data/util/sqlcontainer/connection/J2EEConnectionPool.java
+++ b/src/com/vaadin/data/util/sqlcontainer/connection/J2EEConnectionPool.java
@@ -26,6 +26,7 @@ public class J2EEConnectionPool implements JDBCConnectionPool {
this.dataSourceJndiName = dataSourceJndiName;
}
+ @Override
public Connection reserveConnection() throws SQLException {
Connection conn = getDataSource().getConnection();
conn.setAutoCommit(false);
@@ -51,6 +52,7 @@ public class J2EEConnectionPool implements JDBCConnectionPool {
}
}
+ @Override
public void releaseConnection(Connection conn) {
if (conn != null) {
try {
@@ -62,6 +64,7 @@ public class J2EEConnectionPool implements JDBCConnectionPool {
}
}
+ @Override
public void destroy() {
dataSource = null;
}
diff --git a/src/com/vaadin/data/util/sqlcontainer/connection/SimpleJDBCConnectionPool.java b/src/com/vaadin/data/util/sqlcontainer/connection/SimpleJDBCConnectionPool.java
index 2a1068e786..21760014b9 100644
--- a/src/com/vaadin/data/util/sqlcontainer/connection/SimpleJDBCConnectionPool.java
+++ b/src/com/vaadin/data/util/sqlcontainer/connection/SimpleJDBCConnectionPool.java
@@ -81,6 +81,7 @@ public class SimpleJDBCConnectionPool implements JDBCConnectionPool {
initialized = true;
}
+ @Override
public synchronized Connection reserveConnection() throws SQLException {
if (!initialized) {
initializeConnections();
@@ -100,6 +101,7 @@ public class SimpleJDBCConnectionPool implements JDBCConnectionPool {
return c;
}
+ @Override
public synchronized void releaseConnection(Connection conn) {
if (conn == null || !initialized) {
return;
@@ -139,6 +141,7 @@ public class SimpleJDBCConnectionPool implements JDBCConnectionPool {
return c;
}
+ @Override
public void destroy() {
for (Connection c : availableConnections) {
try {
diff --git a/src/com/vaadin/data/util/sqlcontainer/query/FreeformQuery.java b/src/com/vaadin/data/util/sqlcontainer/query/FreeformQuery.java
index 56a8455a16..ec986fab95 100644
--- a/src/com/vaadin/data/util/sqlcontainer/query/FreeformQuery.java
+++ b/src/com/vaadin/data/util/sqlcontainer/query/FreeformQuery.java
@@ -99,6 +99,7 @@ public class FreeformQuery implements QueryDelegate {
*
* {@inheritDoc}
*/
+ @Override
public int getCount() throws SQLException {
// First try the delegate
int count = countByDelegate();
@@ -187,6 +188,7 @@ public class FreeformQuery implements QueryDelegate {
*
* @see FreeformQueryDelegate#getQueryString(int, int)
*/
+ @Override
@SuppressWarnings("deprecation")
public ResultSet getResults(int offset, int pagelength) throws SQLException {
if (activeConnection == null) {
@@ -218,6 +220,7 @@ public class FreeformQuery implements QueryDelegate {
return rs;
}
+ @Override
@SuppressWarnings("deprecation")
public boolean implementationRespectsPagingLimits() {
if (delegate == null) {
@@ -251,6 +254,7 @@ public class FreeformQuery implements QueryDelegate {
* com.vaadin.data.util.sqlcontainer.query.QueryDelegate#setFilters(java
* .util.List)
*/
+ @Override
public void setFilters(List<Filter> filters)
throws UnsupportedOperationException {
if (delegate != null) {
@@ -268,6 +272,7 @@ public class FreeformQuery implements QueryDelegate {
* com.vaadin.data.util.sqlcontainer.query.QueryDelegate#setOrderBy(java
* .util.List)
*/
+ @Override
public void setOrderBy(List<OrderBy> orderBys)
throws UnsupportedOperationException {
if (delegate != null) {
@@ -285,6 +290,7 @@ public class FreeformQuery implements QueryDelegate {
* com.vaadin.data.util.sqlcontainer.query.QueryDelegate#storeRow(com.vaadin
* .data.util.sqlcontainer.RowItem)
*/
+ @Override
public int storeRow(RowItem row) throws SQLException {
if (activeConnection == null) {
throw new IllegalStateException("No transaction is active!");
@@ -307,6 +313,7 @@ public class FreeformQuery implements QueryDelegate {
* com.vaadin.data.util.sqlcontainer.query.QueryDelegate#removeRow(com.vaadin
* .data.util.sqlcontainer.RowItem)
*/
+ @Override
public boolean removeRow(RowItem row) throws SQLException {
if (activeConnection == null) {
throw new IllegalStateException("No transaction is active!");
@@ -328,6 +335,7 @@ public class FreeformQuery implements QueryDelegate {
* @see
* com.vaadin.data.util.sqlcontainer.query.QueryDelegate#beginTransaction()
*/
+ @Override
public synchronized void beginTransaction()
throws UnsupportedOperationException, SQLException {
if (activeConnection != null) {
@@ -342,6 +350,7 @@ public class FreeformQuery implements QueryDelegate {
*
* @see com.vaadin.data.util.sqlcontainer.query.QueryDelegate#commit()
*/
+ @Override
public synchronized void commit() throws UnsupportedOperationException,
SQLException {
if (activeConnection == null) {
@@ -359,6 +368,7 @@ public class FreeformQuery implements QueryDelegate {
*
* @see com.vaadin.data.util.sqlcontainer.query.QueryDelegate#rollback()
*/
+ @Override
public synchronized void rollback() throws UnsupportedOperationException,
SQLException {
if (activeConnection == null) {
@@ -376,6 +386,7 @@ public class FreeformQuery implements QueryDelegate {
* com.vaadin.data.util.sqlcontainer.query.QueryDelegate#getPrimaryKeyColumns
* ()
*/
+ @Override
public List<String> getPrimaryKeyColumns() {
return primaryKeyColumns;
}
@@ -403,6 +414,7 @@ public class FreeformQuery implements QueryDelegate {
* @see FreeformQueryDelegate#getContainsRowQueryString(Object...)
*
*/
+ @Override
@SuppressWarnings("deprecation")
public boolean containsRowWithKey(Object... keys) throws SQLException {
String query = null;
diff --git a/src/com/vaadin/data/util/sqlcontainer/query/TableQuery.java b/src/com/vaadin/data/util/sqlcontainer/query/TableQuery.java
index 22ca30cc32..d0606704f7 100644
--- a/src/com/vaadin/data/util/sqlcontainer/query/TableQuery.java
+++ b/src/com/vaadin/data/util/sqlcontainer/query/TableQuery.java
@@ -111,6 +111,7 @@ public class TableQuery implements QueryDelegate,
*
* @see com.vaadin.addon.sqlcontainer.query.QueryDelegate#getCount()
*/
+ @Override
public int getCount() throws SQLException {
getLogger().log(Level.FINE, "Fetching count...");
StatementHelper sh = sqlGenerator.generateSelectQuery(tableName,
@@ -137,6 +138,7 @@ public class TableQuery implements QueryDelegate,
* @see com.vaadin.addon.sqlcontainer.query.QueryDelegate#getResults(int,
* int)
*/
+ @Override
public ResultSet getResults(int offset, int pagelength) throws SQLException {
StatementHelper sh;
/*
@@ -161,6 +163,7 @@ public class TableQuery implements QueryDelegate,
* @see com.vaadin.addon.sqlcontainer.query.QueryDelegate#
* implementationRespectsPagingLimits()
*/
+ @Override
public boolean implementationRespectsPagingLimits() {
return true;
}
@@ -172,6 +175,7 @@ public class TableQuery implements QueryDelegate,
* com.vaadin.addon.sqlcontainer.query.QueryDelegate#storeRow(com.vaadin
* .addon.sqlcontainer.RowItem)
*/
+ @Override
public int storeRow(RowItem row) throws UnsupportedOperationException,
SQLException {
if (row == null) {
@@ -254,6 +258,7 @@ public class TableQuery implements QueryDelegate,
* com.vaadin.addon.sqlcontainer.query.QueryDelegate#setFilters(java.util
* .List)
*/
+ @Override
public void setFilters(List<Filter> filters)
throws UnsupportedOperationException {
if (filters == null) {
@@ -270,6 +275,7 @@ public class TableQuery implements QueryDelegate,
* com.vaadin.addon.sqlcontainer.query.QueryDelegate#setOrderBy(java.util
* .List)
*/
+ @Override
public void setOrderBy(List<OrderBy> orderBys)
throws UnsupportedOperationException {
if (orderBys == null) {
@@ -284,6 +290,7 @@ public class TableQuery implements QueryDelegate,
*
* @see com.vaadin.addon.sqlcontainer.query.QueryDelegate#beginTransaction()
*/
+ @Override
public void beginTransaction() throws UnsupportedOperationException,
SQLException {
if (transactionOpen && activeConnection != null) {
@@ -301,6 +308,7 @@ public class TableQuery implements QueryDelegate,
*
* @see com.vaadin.addon.sqlcontainer.query.QueryDelegate#commit()
*/
+ @Override
public void commit() throws UnsupportedOperationException, SQLException {
if (transactionOpen && activeConnection != null) {
getLogger().log(Level.FINE, "DB -> commit");
@@ -329,6 +337,7 @@ public class TableQuery implements QueryDelegate,
*
* @see com.vaadin.addon.sqlcontainer.query.QueryDelegate#rollback()
*/
+ @Override
public void rollback() throws UnsupportedOperationException, SQLException {
if (transactionOpen && activeConnection != null) {
getLogger().log(Level.FINE, "DB -> rollback");
@@ -346,6 +355,7 @@ public class TableQuery implements QueryDelegate,
* @see
* com.vaadin.addon.sqlcontainer.query.QueryDelegate#getPrimaryKeyColumns()
*/
+ @Override
public List<String> getPrimaryKeyColumns() {
return Collections.unmodifiableList(primaryKeyColumns);
}
@@ -581,6 +591,7 @@ public class TableQuery implements QueryDelegate,
* com.vaadin.addon.sqlcontainer.query.QueryDelegate#removeRow(com.vaadin
* .addon.sqlcontainer.RowItem)
*/
+ @Override
public boolean removeRow(RowItem row) throws UnsupportedOperationException,
SQLException {
getLogger().log(Level.FINE,
@@ -604,6 +615,7 @@ public class TableQuery implements QueryDelegate,
* com.vaadin.addon.sqlcontainer.query.QueryDelegate#containsRowWithKey(
* java.lang.Object[])
*/
+ @Override
public boolean containsRowWithKey(Object... keys) throws SQLException {
ArrayList<Filter> filtersAndKeys = new ArrayList<Filter>();
if (filters != null) {
@@ -665,10 +677,12 @@ public class TableQuery implements QueryDelegate,
this.newId = newId;
}
+ @Override
public RowId getNewRowId() {
return newId;
}
+ @Override
public RowId getOldRowId() {
return oldId;
}
@@ -677,6 +691,7 @@ public class TableQuery implements QueryDelegate,
/**
* Adds RowIdChangeListener to this query
*/
+ @Override
public void addListener(RowIdChangeListener listener) {
if (rowIdChangeListeners == null) {
rowIdChangeListeners = new LinkedList<QueryDelegate.RowIdChangeListener>();
@@ -687,6 +702,7 @@ public class TableQuery implements QueryDelegate,
/**
* Removes the given RowIdChangeListener from this query
*/
+ @Override
public void removeListener(RowIdChangeListener listener) {
if (rowIdChangeListeners != null) {
rowIdChangeListeners.remove(listener);
diff --git a/src/com/vaadin/data/util/sqlcontainer/query/generator/DefaultSQLGenerator.java b/src/com/vaadin/data/util/sqlcontainer/query/generator/DefaultSQLGenerator.java
index 24d283c9ab..6485330541 100644
--- a/src/com/vaadin/data/util/sqlcontainer/query/generator/DefaultSQLGenerator.java
+++ b/src/com/vaadin/data/util/sqlcontainer/query/generator/DefaultSQLGenerator.java
@@ -24,11 +24,25 @@ import com.vaadin.data.util.sqlcontainer.query.generator.filter.StringDecorator;
@SuppressWarnings("serial")
public class DefaultSQLGenerator implements SQLGenerator {
+ private Class<? extends StatementHelper> statementHelperClass = null;
+
public DefaultSQLGenerator() {
}
/**
+ * Create a new DefaultSqlGenerator instance that uses the given
+ * implementation of {@link StatementHelper}
+ *
+ * @param statementHelper
+ */
+ public DefaultSQLGenerator(
+ Class<? extends StatementHelper> statementHelperClazz) {
+ this();
+ statementHelperClass = statementHelperClazz;
+ }
+
+ /**
* Construct a DefaultSQLGenerator with the specified identifiers for start
* and end of quoted strings. The identifiers may be different depending on
* the database engine and it's settings.
@@ -44,6 +58,20 @@ public class DefaultSQLGenerator implements SQLGenerator {
quoteEnd));
}
+ /**
+ * Same as {@link #DefaultSQLGenerator(String, String)} but with support for
+ * custom {@link StatementHelper} implementation.
+ *
+ * @param quoteStart
+ * @param quoteEnd
+ * @param statementHelperClazz
+ */
+ public DefaultSQLGenerator(String quoteStart, String quoteEnd,
+ Class<? extends StatementHelper> statementHelperClazz) {
+ this(quoteStart, quoteEnd);
+ statementHelperClass = statementHelperClazz;
+ }
+
/*
* (non-Javadoc)
*
@@ -51,6 +79,7 @@ public class DefaultSQLGenerator implements SQLGenerator {
* generateSelectQuery(java.lang.String, java.util.List, java.util.List,
* int, int, java.lang.String)
*/
+ @Override
public StatementHelper generateSelectQuery(String tableName,
List<Filter> filters, List<OrderBy> orderBys, int offset,
int pagelength, String toSelect) {
@@ -58,7 +87,7 @@ public class DefaultSQLGenerator implements SQLGenerator {
throw new IllegalArgumentException("Table name must be given.");
}
toSelect = toSelect == null ? "*" : toSelect;
- StatementHelper sh = new StatementHelper();
+ StatementHelper sh = getStatementHelper();
StringBuffer query = new StringBuffer();
query.append("SELECT " + toSelect + " FROM ").append(
SQLUtil.escapeSQL(tableName));
@@ -84,6 +113,7 @@ public class DefaultSQLGenerator implements SQLGenerator {
* generateUpdateQuery(java.lang.String,
* com.vaadin.addon.sqlcontainer.RowItem)
*/
+ @Override
public StatementHelper generateUpdateQuery(String tableName, RowItem item) {
if (tableName == null || tableName.trim().equals("")) {
throw new IllegalArgumentException("Table name must be given.");
@@ -91,7 +121,7 @@ public class DefaultSQLGenerator implements SQLGenerator {
if (item == null) {
throw new IllegalArgumentException("Updated item must be given.");
}
- StatementHelper sh = new StatementHelper();
+ StatementHelper sh = getStatementHelper();
StringBuffer query = new StringBuffer();
query.append("UPDATE ").append(tableName).append(" SET");
@@ -133,6 +163,7 @@ public class DefaultSQLGenerator implements SQLGenerator {
* generateInsertQuery(java.lang.String,
* com.vaadin.addon.sqlcontainer.RowItem)
*/
+ @Override
public StatementHelper generateInsertQuery(String tableName, RowItem item) {
if (tableName == null || tableName.trim().equals("")) {
throw new IllegalArgumentException("Table name must be given.");
@@ -144,7 +175,7 @@ public class DefaultSQLGenerator implements SQLGenerator {
throw new IllegalArgumentException(
"Cannot generate an insert query for item already in database.");
}
- StatementHelper sh = new StatementHelper();
+ StatementHelper sh = getStatementHelper();
StringBuffer query = new StringBuffer();
query.append("INSERT INTO ").append(tableName).append(" (");
@@ -184,6 +215,7 @@ public class DefaultSQLGenerator implements SQLGenerator {
* generateDeleteQuery(java.lang.String,
* com.vaadin.addon.sqlcontainer.RowItem)
*/
+ @Override
public StatementHelper generateDeleteQuery(String tableName,
List<String> primaryKeyColumns, String versionColumn, RowItem item) {
if (tableName == null || tableName.trim().equals("")) {
@@ -197,7 +229,7 @@ public class DefaultSQLGenerator implements SQLGenerator {
throw new IllegalArgumentException(
"Valid keyColumnNames must be provided.");
}
- StatementHelper sh = new StatementHelper();
+ StatementHelper sh = getStatementHelper();
StringBuffer query = new StringBuffer();
query.append("DELETE FROM ").append(tableName).append(" WHERE ");
int count = 1;
@@ -308,4 +340,28 @@ public class DefaultSQLGenerator implements SQLGenerator {
}
return rowIdentifiers;
}
-} \ No newline at end of file
+
+ /**
+ * Returns the statement helper for the generator. Override this to handle
+ * platform specific data types.
+ *
+ * @see http://dev.vaadin.com/ticket/9148
+ * @return a new instance of the statement helper
+ */
+ protected StatementHelper getStatementHelper() {
+ if (statementHelperClass == null) {
+ return new StatementHelper();
+ }
+
+ try {
+ return statementHelperClass.newInstance();
+ } catch (InstantiationException e) {
+ throw new RuntimeException(
+ "Unable to instantiate custom StatementHelper", e);
+ } catch (IllegalAccessException e) {
+ throw new RuntimeException(
+ "Unable to instantiate custom StatementHelper", e);
+ }
+ }
+
+}
diff --git a/src/com/vaadin/data/util/sqlcontainer/query/generator/MSSQLGenerator.java b/src/com/vaadin/data/util/sqlcontainer/query/generator/MSSQLGenerator.java
index 52c13feecb..13ef1d0090 100644
--- a/src/com/vaadin/data/util/sqlcontainer/query/generator/MSSQLGenerator.java
+++ b/src/com/vaadin/data/util/sqlcontainer/query/generator/MSSQLGenerator.java
@@ -50,7 +50,7 @@ public class MSSQLGenerator extends DefaultSQLGenerator {
offset = pagelength > 1 ? ++offset : offset;
pagelength = pagelength > 1 ? --pagelength : pagelength;
toSelect = toSelect == null ? "*" : toSelect;
- StatementHelper sh = new StatementHelper();
+ StatementHelper sh = getStatementHelper();
StringBuffer query = new StringBuffer();
/* Row count request is handled here */
diff --git a/src/com/vaadin/data/util/sqlcontainer/query/generator/OracleGenerator.java b/src/com/vaadin/data/util/sqlcontainer/query/generator/OracleGenerator.java
index 8e33211154..43a562d3a8 100644
--- a/src/com/vaadin/data/util/sqlcontainer/query/generator/OracleGenerator.java
+++ b/src/com/vaadin/data/util/sqlcontainer/query/generator/OracleGenerator.java
@@ -16,6 +16,10 @@ public class OracleGenerator extends DefaultSQLGenerator {
}
+ public OracleGenerator(Class<? extends StatementHelper> statementHelperClazz) {
+ super(statementHelperClazz);
+ }
+
/**
* Construct an OracleSQLGenerator with the specified identifiers for start
* and end of quoted strings. The identifiers may be different depending on
@@ -31,6 +35,11 @@ public class OracleGenerator extends DefaultSQLGenerator {
super(quoteStart, quoteEnd);
}
+ public OracleGenerator(String quoteStart, String quoteEnd,
+ Class<? extends StatementHelper> statementHelperClazz) {
+ super(quoteStart, quoteEnd, statementHelperClazz);
+ }
+
/*
* (non-Javadoc)
*
@@ -50,7 +59,7 @@ public class OracleGenerator extends DefaultSQLGenerator {
offset = pagelength > 1 ? ++offset : offset;
pagelength = pagelength > 1 ? --pagelength : pagelength;
toSelect = toSelect == null ? "*" : toSelect;
- StatementHelper sh = new StatementHelper();
+ StatementHelper sh = getStatementHelper();
StringBuffer query = new StringBuffer();
/* Row count request is handled here */
@@ -99,4 +108,5 @@ public class OracleGenerator extends DefaultSQLGenerator {
sh.setQueryString(query.toString());
return sh;
}
+
} \ No newline at end of file
diff --git a/src/com/vaadin/data/util/sqlcontainer/query/generator/StatementHelper.java b/src/com/vaadin/data/util/sqlcontainer/query/generator/StatementHelper.java
index 3fd92e920d..f9458609c3 100644
--- a/src/com/vaadin/data/util/sqlcontainer/query/generator/StatementHelper.java
+++ b/src/com/vaadin/data/util/sqlcontainer/query/generator/StatementHelper.java
@@ -128,8 +128,32 @@ public class StatementHelper implements Serializable {
} else if (Timestamp.class.equals(dataTypes.get(i))) {
pstmt.setTimestamp(i + 1, null);
} else {
+
+ if (handleUnrecognizedTypeNullValue(i, pstmt, dataTypes)) {
+ return;
+ }
+
throw new SQLException("Data type not supported by SQLContainer: "
+ parameters.get(i).getClass().toString());
}
}
+
+ /**
+ * Handle unrecognized null values. Override this to handle null values for
+ * platform specific data types that are not handled by the default
+ * implementation of the {@link StatementHelper}.
+ *
+ * @param i
+ * @param pstmt
+ * @param dataTypes2
+ *
+ * @return true if handled, false otherwise
+ *
+ * @see {@link http://dev.vaadin.com/ticket/9148}
+ */
+ protected boolean handleUnrecognizedTypeNullValue(int i,
+ PreparedStatement pstmt, Map<Integer, Class<?>> dataTypes)
+ throws SQLException {
+ return false;
+ }
}
diff --git a/src/com/vaadin/data/util/sqlcontainer/query/generator/filter/AndTranslator.java b/src/com/vaadin/data/util/sqlcontainer/query/generator/filter/AndTranslator.java
index 02d6671b60..251a543a8a 100644
--- a/src/com/vaadin/data/util/sqlcontainer/query/generator/filter/AndTranslator.java
+++ b/src/com/vaadin/data/util/sqlcontainer/query/generator/filter/AndTranslator.java
@@ -9,10 +9,12 @@ import com.vaadin.data.util.sqlcontainer.query.generator.StatementHelper;
public class AndTranslator implements FilterTranslator {
+ @Override
public boolean translatesFilter(Filter filter) {
return filter instanceof And;
}
+ @Override
public String getWhereStringForFilter(Filter filter, StatementHelper sh) {
return QueryBuilder.group(QueryBuilder.getJoinedFilterString(
((And) filter).getFilters(), "AND", sh));
diff --git a/src/com/vaadin/data/util/sqlcontainer/query/generator/filter/BetweenTranslator.java b/src/com/vaadin/data/util/sqlcontainer/query/generator/filter/BetweenTranslator.java
index e8a87a82d8..4fcaf759ea 100644
--- a/src/com/vaadin/data/util/sqlcontainer/query/generator/filter/BetweenTranslator.java
+++ b/src/com/vaadin/data/util/sqlcontainer/query/generator/filter/BetweenTranslator.java
@@ -9,10 +9,12 @@ import com.vaadin.data.util.sqlcontainer.query.generator.StatementHelper;
public class BetweenTranslator implements FilterTranslator {
+ @Override
public boolean translatesFilter(Filter filter) {
return filter instanceof Between;
}
+ @Override
public String getWhereStringForFilter(Filter filter, StatementHelper sh) {
Between between = (Between) filter;
sh.addParameterValue(between.getStartValue());
diff --git a/src/com/vaadin/data/util/sqlcontainer/query/generator/filter/CompareTranslator.java b/src/com/vaadin/data/util/sqlcontainer/query/generator/filter/CompareTranslator.java
index 72d72dd069..4293e1d630 100644
--- a/src/com/vaadin/data/util/sqlcontainer/query/generator/filter/CompareTranslator.java
+++ b/src/com/vaadin/data/util/sqlcontainer/query/generator/filter/CompareTranslator.java
@@ -9,10 +9,12 @@ import com.vaadin.data.util.sqlcontainer.query.generator.StatementHelper;
public class CompareTranslator implements FilterTranslator {
+ @Override
public boolean translatesFilter(Filter filter) {
return filter instanceof Compare;
}
+ @Override
public String getWhereStringForFilter(Filter filter, StatementHelper sh) {
Compare compare = (Compare) filter;
sh.addParameterValue(compare.getValue());
diff --git a/src/com/vaadin/data/util/sqlcontainer/query/generator/filter/IsNullTranslator.java b/src/com/vaadin/data/util/sqlcontainer/query/generator/filter/IsNullTranslator.java
index 2593bbae57..a2a6cd2c09 100644
--- a/src/com/vaadin/data/util/sqlcontainer/query/generator/filter/IsNullTranslator.java
+++ b/src/com/vaadin/data/util/sqlcontainer/query/generator/filter/IsNullTranslator.java
@@ -9,10 +9,12 @@ import com.vaadin.data.util.sqlcontainer.query.generator.StatementHelper;
public class IsNullTranslator implements FilterTranslator {
+ @Override
public boolean translatesFilter(Filter filter) {
return filter instanceof IsNull;
}
+ @Override
public String getWhereStringForFilter(Filter filter, StatementHelper sh) {
IsNull in = (IsNull) filter;
return QueryBuilder.quote(in.getPropertyId()) + " IS NULL";
diff --git a/src/com/vaadin/data/util/sqlcontainer/query/generator/filter/LikeTranslator.java b/src/com/vaadin/data/util/sqlcontainer/query/generator/filter/LikeTranslator.java
index b1c779ae73..25a85caec0 100644
--- a/src/com/vaadin/data/util/sqlcontainer/query/generator/filter/LikeTranslator.java
+++ b/src/com/vaadin/data/util/sqlcontainer/query/generator/filter/LikeTranslator.java
@@ -9,10 +9,12 @@ import com.vaadin.data.util.sqlcontainer.query.generator.StatementHelper;
public class LikeTranslator implements FilterTranslator {
+ @Override
public boolean translatesFilter(Filter filter) {
return filter instanceof Like;
}
+ @Override
public String getWhereStringForFilter(Filter filter, StatementHelper sh) {
Like like = (Like) filter;
if (like.isCaseSensitive()) {
diff --git a/src/com/vaadin/data/util/sqlcontainer/query/generator/filter/NotTranslator.java b/src/com/vaadin/data/util/sqlcontainer/query/generator/filter/NotTranslator.java
index 7c1bba2bb5..5dfbe240e7 100644
--- a/src/com/vaadin/data/util/sqlcontainer/query/generator/filter/NotTranslator.java
+++ b/src/com/vaadin/data/util/sqlcontainer/query/generator/filter/NotTranslator.java
@@ -10,10 +10,12 @@ import com.vaadin.data.util.sqlcontainer.query.generator.StatementHelper;
public class NotTranslator implements FilterTranslator {
+ @Override
public boolean translatesFilter(Filter filter) {
return filter instanceof Not;
}
+ @Override
public String getWhereStringForFilter(Filter filter, StatementHelper sh) {
Not not = (Not) filter;
if (not.getFilter() instanceof IsNull) {
diff --git a/src/com/vaadin/data/util/sqlcontainer/query/generator/filter/OrTranslator.java b/src/com/vaadin/data/util/sqlcontainer/query/generator/filter/OrTranslator.java
index 9724ee7944..2f0ed814e0 100644
--- a/src/com/vaadin/data/util/sqlcontainer/query/generator/filter/OrTranslator.java
+++ b/src/com/vaadin/data/util/sqlcontainer/query/generator/filter/OrTranslator.java
@@ -9,10 +9,12 @@ import com.vaadin.data.util.sqlcontainer.query.generator.StatementHelper;
public class OrTranslator implements FilterTranslator {
+ @Override
public boolean translatesFilter(Filter filter) {
return filter instanceof Or;
}
+ @Override
public String getWhereStringForFilter(Filter filter, StatementHelper sh) {
return QueryBuilder.group(QueryBuilder.getJoinedFilterString(
((Or) filter).getFilters(), "OR", sh));
diff --git a/src/com/vaadin/data/util/sqlcontainer/query/generator/filter/SimpleStringTranslator.java b/src/com/vaadin/data/util/sqlcontainer/query/generator/filter/SimpleStringTranslator.java
index 1aae68abc0..f108003535 100644
--- a/src/com/vaadin/data/util/sqlcontainer/query/generator/filter/SimpleStringTranslator.java
+++ b/src/com/vaadin/data/util/sqlcontainer/query/generator/filter/SimpleStringTranslator.java
@@ -10,10 +10,12 @@ import com.vaadin.data.util.sqlcontainer.query.generator.StatementHelper;
public class SimpleStringTranslator implements FilterTranslator {
+ @Override
public boolean translatesFilter(Filter filter) {
return filter instanceof SimpleStringFilter;
}
+ @Override
public String getWhereStringForFilter(Filter filter, StatementHelper sh) {
SimpleStringFilter ssf = (SimpleStringFilter) filter;
// Create a Like filter based on the SimpleStringFilter and execute the
diff --git a/src/com/vaadin/data/validator/AbstractValidator.java b/src/com/vaadin/data/validator/AbstractValidator.java
index 27eaaca485..8febe5338a 100644
--- a/src/com/vaadin/data/validator/AbstractValidator.java
+++ b/src/com/vaadin/data/validator/AbstractValidator.java
@@ -84,6 +84,7 @@ public abstract class AbstractValidator<T> implements Validator {
*/
protected abstract boolean isValidValue(T value);
+ @Override
public void validate(Object value) throws InvalidValueException {
// isValidType ensures that value can safely be cast to TYPE
if (!isValidType(value) || !isValidValue((T) value)) {
diff --git a/src/com/vaadin/data/validator/BeanValidator.java b/src/com/vaadin/data/validator/BeanValidator.java
index 817df85248..816ff79b83 100644
--- a/src/com/vaadin/data/validator/BeanValidator.java
+++ b/src/com/vaadin/data/validator/BeanValidator.java
@@ -67,10 +67,12 @@ public class BeanValidator implements Validator {
this.descriptor = descriptor;
}
+ @Override
public ConstraintDescriptor<?> getConstraintDescriptor() {
return descriptor;
}
+ @Override
public Object getValidatedValue() {
return value;
}
@@ -96,6 +98,7 @@ public class BeanValidator implements Validator {
*
* @see com.vaadin.data.Validator#validate(java.lang.Object)
*/
+ @Override
public void validate(final Object value) throws InvalidValueException {
Set<?> violations = getJavaxBeanValidator().validateValue(beanClass,
propertyName, value);
diff --git a/src/com/vaadin/data/validator/CompositeValidator.java b/src/com/vaadin/data/validator/CompositeValidator.java
index 956d773032..cad31c9d4d 100644
--- a/src/com/vaadin/data/validator/CompositeValidator.java
+++ b/src/com/vaadin/data/validator/CompositeValidator.java
@@ -101,6 +101,7 @@ public class CompositeValidator implements Validator {
* @throws Validator.InvalidValueException
* if the value is not valid.
*/
+ @Override
public void validate(Object value) throws Validator.InvalidValueException {
switch (mode) {
case AND:
diff --git a/src/com/vaadin/data/validator/NullValidator.java b/src/com/vaadin/data/validator/NullValidator.java
index 62b2580d48..551d88c776 100644
--- a/src/com/vaadin/data/validator/NullValidator.java
+++ b/src/com/vaadin/data/validator/NullValidator.java
@@ -43,6 +43,7 @@ public class NullValidator implements Validator {
* @throws Validator.InvalidValueException
* if the value was invalid.
*/
+ @Override
public void validate(Object value) throws Validator.InvalidValueException {
if ((onlyNullAllowed && value != null)
|| (!onlyNullAllowed && value == null)) {
diff --git a/src/com/vaadin/event/ActionManager.java b/src/com/vaadin/event/ActionManager.java
index 08e9c85043..64fdeea69b 100644
--- a/src/com/vaadin/event/ActionManager.java
+++ b/src/com/vaadin/event/ActionManager.java
@@ -75,6 +75,7 @@ public class ActionManager implements Action.Container, Action.Handler,
requestRepaint(); // this goes to the new viewer
}
+ @Override
public <T extends Action & Action.Listener> void addAction(T action) {
if (ownActions == null) {
ownActions = new HashSet<Action>();
@@ -84,6 +85,7 @@ public class ActionManager implements Action.Container, Action.Handler,
}
}
+ @Override
public <T extends Action & Action.Listener> void removeAction(T action) {
if (ownActions != null) {
if (ownActions.remove(action)) {
@@ -92,6 +94,7 @@ public class ActionManager implements Action.Container, Action.Handler,
}
}
+ @Override
public void addActionHandler(Handler actionHandler) {
if (actionHandler == this) {
// don't add the actionHandler to itself
@@ -109,6 +112,7 @@ public class ActionManager implements Action.Container, Action.Handler,
}
}
+ @Override
public void removeActionHandler(Action.Handler actionHandler) {
if (actionHandlers != null && actionHandlers.contains(actionHandler)) {
@@ -206,6 +210,7 @@ public class ActionManager implements Action.Container, Action.Handler,
}
}
+ @Override
public Action[] getActions(Object target, Object sender) {
HashSet<Action> actions = new HashSet<Action>();
if (ownActions != null) {
@@ -226,6 +231,7 @@ public class ActionManager implements Action.Container, Action.Handler,
return actions.toArray(new Action[actions.size()]);
}
+ @Override
public void handleAction(Action action, Object sender, Object target) {
if (actionHandlers != null) {
Handler[] array = actionHandlers.toArray(new Handler[actionHandlers
diff --git a/src/com/vaadin/event/EventRouter.java b/src/com/vaadin/event/EventRouter.java
index 49b29de9bb..90c080b860 100644
--- a/src/com/vaadin/event/EventRouter.java
+++ b/src/com/vaadin/event/EventRouter.java
@@ -35,6 +35,7 @@ public class EventRouter implements MethodEventSource {
* events generated by this component. Don't add a JavaDoc comment here, we
* use the default documentation from implemented interface.
*/
+ @Override
public void addListener(Class<?> eventType, Object object, Method method) {
if (listenerList == null) {
listenerList = new LinkedHashSet<ListenerMethod>();
@@ -47,6 +48,7 @@ public class EventRouter implements MethodEventSource {
* listen events generated by this component. Don't add a JavaDoc comment
* here, we use the default documentation from implemented interface.
*/
+ @Override
public void addListener(Class<?> eventType, Object object, String methodName) {
if (listenerList == null) {
listenerList = new LinkedHashSet<ListenerMethod>();
@@ -59,6 +61,7 @@ public class EventRouter implements MethodEventSource {
* a JavaDoc comment here, we use the default documentation from implemented
* interface.
*/
+ @Override
public void removeListener(Class<?> eventType, Object target) {
if (listenerList != null) {
final Iterator<ListenerMethod> i = listenerList.iterator();
@@ -77,6 +80,7 @@ public class EventRouter implements MethodEventSource {
* Don't add a JavaDoc comment here, we use the default documentation from
* implemented interface.
*/
+ @Override
public void removeListener(Class<?> eventType, Object target, Method method) {
if (listenerList != null) {
final Iterator<ListenerMethod> i = listenerList.iterator();
@@ -95,6 +99,7 @@ public class EventRouter implements MethodEventSource {
* Don't add a JavaDoc comment here, we use the default documentation from
* implemented interface.
*/
+ @Override
public void removeListener(Class<?> eventType, Object target,
String methodName) {
diff --git a/src/com/vaadin/event/FieldEvents.java b/src/com/vaadin/event/FieldEvents.java
index 20e9fabb36..8f101c1913 100644
--- a/src/com/vaadin/event/FieldEvents.java
+++ b/src/com/vaadin/event/FieldEvents.java
@@ -7,8 +7,8 @@ package com.vaadin.event;
import java.io.Serializable;
import java.lang.reflect.Method;
-import com.vaadin.terminal.gwt.client.EventId;
-import com.vaadin.terminal.gwt.client.communication.FieldRpc.FocusAndBlurServerRpc;
+import com.vaadin.shared.EventId;
+import com.vaadin.shared.communication.FieldRpc.FocusAndBlurServerRpc;
import com.vaadin.tools.ReflectTools;
import com.vaadin.ui.Component;
import com.vaadin.ui.Component.Event;
@@ -261,10 +261,12 @@ public interface FieldEvents {
protected abstract void fireEvent(Event event);
+ @Override
public void blur() {
fireEvent(new BlurEvent(component));
}
+ @Override
public void focus() {
fireEvent(new FocusEvent(component));
}
diff --git a/src/com/vaadin/event/ItemClickEvent.java b/src/com/vaadin/event/ItemClickEvent.java
index bb41398e8d..0aa0e106c5 100644
--- a/src/com/vaadin/event/ItemClickEvent.java
+++ b/src/com/vaadin/event/ItemClickEvent.java
@@ -9,7 +9,7 @@ import java.lang.reflect.Method;
import com.vaadin.data.Item;
import com.vaadin.data.Property;
import com.vaadin.event.MouseEvents.ClickEvent;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
+import com.vaadin.shared.MouseEventDetails;
import com.vaadin.ui.Component;
/**
diff --git a/src/com/vaadin/event/LayoutEvents.java b/src/com/vaadin/event/LayoutEvents.java
index 960fff00c0..602440ea07 100644
--- a/src/com/vaadin/event/LayoutEvents.java
+++ b/src/com/vaadin/event/LayoutEvents.java
@@ -7,8 +7,8 @@ import java.io.Serializable;
import java.lang.reflect.Method;
import com.vaadin.event.MouseEvents.ClickEvent;
-import com.vaadin.terminal.gwt.client.Connector;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
+import com.vaadin.shared.Connector;
+import com.vaadin.shared.MouseEventDetails;
import com.vaadin.tools.ReflectTools;
import com.vaadin.ui.Component;
import com.vaadin.ui.ComponentContainer;
diff --git a/src/com/vaadin/event/MouseEvents.java b/src/com/vaadin/event/MouseEvents.java
index 2327b78f64..fafd44be89 100644
--- a/src/com/vaadin/event/MouseEvents.java
+++ b/src/com/vaadin/event/MouseEvents.java
@@ -6,7 +6,7 @@ package com.vaadin.event;
import java.lang.reflect.Method;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
+import com.vaadin.shared.MouseEventDetails;
import com.vaadin.tools.ReflectTools;
import com.vaadin.ui.Component;
diff --git a/src/com/vaadin/event/ShortcutListener.java b/src/com/vaadin/event/ShortcutListener.java
index 0656ed0e1f..b760cfabe6 100644
--- a/src/com/vaadin/event/ShortcutListener.java
+++ b/src/com/vaadin/event/ShortcutListener.java
@@ -28,5 +28,6 @@ public abstract class ShortcutListener extends ShortcutAction implements
super(shorthandCaption);
}
+ @Override
abstract public void handleAction(Object sender, Object target);
}
diff --git a/src/com/vaadin/event/TransferableImpl.java b/src/com/vaadin/event/TransferableImpl.java
index 621ea95bc1..4c973571f7 100644
--- a/src/com/vaadin/event/TransferableImpl.java
+++ b/src/com/vaadin/event/TransferableImpl.java
@@ -24,18 +24,22 @@ public class TransferableImpl implements Transferable {
this.rawVariables = rawVariables;
}
+ @Override
public Component getSourceComponent() {
return sourceComponent;
}
+ @Override
public Object getData(String dataFlavor) {
return rawVariables.get(dataFlavor);
}
+ @Override
public void setData(String dataFlavor, Object value) {
rawVariables.put(dataFlavor, value);
}
+ @Override
public Collection<String> getDataFlavors() {
return rawVariables.keySet();
}
diff --git a/src/com/vaadin/event/dd/TargetDetailsImpl.java b/src/com/vaadin/event/dd/TargetDetailsImpl.java
index 27afc32680..4a459777ed 100644
--- a/src/com/vaadin/event/dd/TargetDetailsImpl.java
+++ b/src/com/vaadin/event/dd/TargetDetailsImpl.java
@@ -29,6 +29,7 @@ public class TargetDetailsImpl implements TargetDetails {
this.dropTarget = dropTarget;
}
+ @Override
public Object getData(String key) {
return data.get(key);
}
@@ -37,6 +38,7 @@ public class TargetDetailsImpl implements TargetDetails {
return data.put(key, value);
}
+ @Override
public DropTarget getTarget() {
return dropTarget;
}
diff --git a/src/com/vaadin/event/dd/acceptcriteria/AcceptAll.java b/src/com/vaadin/event/dd/acceptcriteria/AcceptAll.java
index 52ffab9263..1457ea9df3 100644
--- a/src/com/vaadin/event/dd/acceptcriteria/AcceptAll.java
+++ b/src/com/vaadin/event/dd/acceptcriteria/AcceptAll.java
@@ -29,6 +29,7 @@ public final class AcceptAll extends ClientSideCriterion {
return singleton;
}
+ @Override
public boolean accept(DragAndDropEvent dragEvent) {
return true;
}
diff --git a/src/com/vaadin/event/dd/acceptcriteria/And.java b/src/com/vaadin/event/dd/acceptcriteria/And.java
index a0340a9cdb..4122d67160 100644
--- a/src/com/vaadin/event/dd/acceptcriteria/And.java
+++ b/src/com/vaadin/event/dd/acceptcriteria/And.java
@@ -41,6 +41,7 @@ public class And extends ClientSideCriterion {
}
}
+ @Override
public boolean accept(DragAndDropEvent dragEvent) {
for (ClientSideCriterion crit : criteria) {
if (!crit.accept(dragEvent)) {
diff --git a/src/com/vaadin/event/dd/acceptcriteria/ClientSideCriterion.java b/src/com/vaadin/event/dd/acceptcriteria/ClientSideCriterion.java
index 0f4ae2990c..7d2c42ecb0 100644
--- a/src/com/vaadin/event/dd/acceptcriteria/ClientSideCriterion.java
+++ b/src/com/vaadin/event/dd/acceptcriteria/ClientSideCriterion.java
@@ -33,10 +33,12 @@ public abstract class ClientSideCriterion implements Serializable,
* com.vaadin.event.dd.acceptCriteria.AcceptCriterion#isClientSideVerifiable
* ()
*/
+ @Override
public final boolean isClientSideVerifiable() {
return true;
}
+ @Override
public void paint(PaintTarget target) throws PaintException {
target.startTag("-ac");
target.addAttribute("name", getIdentifier());
@@ -51,6 +53,7 @@ public abstract class ClientSideCriterion implements Serializable,
return getClass().getCanonicalName();
}
+ @Override
public final void paintResponse(PaintTarget target) throws PaintException {
// NOP, nothing to do as this is client side verified criterion
}
diff --git a/src/com/vaadin/event/dd/acceptcriteria/ContainsDataFlavor.java b/src/com/vaadin/event/dd/acceptcriteria/ContainsDataFlavor.java
index 7eb04d9647..4c52698a4a 100644
--- a/src/com/vaadin/event/dd/acceptcriteria/ContainsDataFlavor.java
+++ b/src/com/vaadin/event/dd/acceptcriteria/ContainsDataFlavor.java
@@ -39,6 +39,7 @@ public class ContainsDataFlavor extends ClientSideCriterion {
target.addAttribute("p", dataFlavorId);
}
+ @Override
public boolean accept(DragAndDropEvent dragEvent) {
return dragEvent.getTransferable().getDataFlavors()
.contains(dataFlavorId);
diff --git a/src/com/vaadin/event/dd/acceptcriteria/Not.java b/src/com/vaadin/event/dd/acceptcriteria/Not.java
index 85ff7e9bc9..1ed40a324d 100644
--- a/src/com/vaadin/event/dd/acceptcriteria/Not.java
+++ b/src/com/vaadin/event/dd/acceptcriteria/Not.java
@@ -31,6 +31,7 @@ public class Not extends ClientSideCriterion {
acceptCriterion.paint(target);
}
+ @Override
public boolean accept(DragAndDropEvent dragEvent) {
return !acceptCriterion.accept(dragEvent);
}
diff --git a/src/com/vaadin/event/dd/acceptcriteria/Or.java b/src/com/vaadin/event/dd/acceptcriteria/Or.java
index 077e9114d8..6ad45c54af 100644
--- a/src/com/vaadin/event/dd/acceptcriteria/Or.java
+++ b/src/com/vaadin/event/dd/acceptcriteria/Or.java
@@ -39,6 +39,7 @@ public class Or extends ClientSideCriterion {
}
}
+ @Override
public boolean accept(DragAndDropEvent dragEvent) {
for (AcceptCriterion crit : criteria) {
if (crit.accept(dragEvent)) {
diff --git a/src/com/vaadin/event/dd/acceptcriteria/ServerSideCriterion.java b/src/com/vaadin/event/dd/acceptcriteria/ServerSideCriterion.java
index 77840bc94f..47f06d434c 100644
--- a/src/com/vaadin/event/dd/acceptcriteria/ServerSideCriterion.java
+++ b/src/com/vaadin/event/dd/acceptcriteria/ServerSideCriterion.java
@@ -31,10 +31,12 @@ public abstract class ServerSideCriterion implements Serializable,
private static final long serialVersionUID = 2128510128911628902L;
+ @Override
public final boolean isClientSideVerifiable() {
return false;
}
+ @Override
public void paint(PaintTarget target) throws PaintException {
target.startTag("-ac");
target.addAttribute("name", getIdentifier());
@@ -45,6 +47,7 @@ public abstract class ServerSideCriterion implements Serializable,
public void paintContent(PaintTarget target) {
}
+ @Override
public void paintResponse(PaintTarget target) throws PaintException {
}
diff --git a/src/com/vaadin/event/dd/acceptcriteria/SourceIs.java b/src/com/vaadin/event/dd/acceptcriteria/SourceIs.java
index d7c47dc915..d4fd20c952 100644
--- a/src/com/vaadin/event/dd/acceptcriteria/SourceIs.java
+++ b/src/com/vaadin/event/dd/acceptcriteria/SourceIs.java
@@ -49,6 +49,7 @@ public class SourceIs extends ClientSideCriterion {
target.addAttribute("c", paintedComponents);
}
+ @Override
public boolean accept(DragAndDropEvent dragEvent) {
if (dragEvent.getTransferable() instanceof TransferableImpl) {
Component sourceComponent = ((TransferableImpl) dragEvent
diff --git a/src/com/vaadin/event/dd/acceptcriteria/SourceIsTarget.java b/src/com/vaadin/event/dd/acceptcriteria/SourceIsTarget.java
index 454159b3da..a644b858e2 100644
--- a/src/com/vaadin/event/dd/acceptcriteria/SourceIsTarget.java
+++ b/src/com/vaadin/event/dd/acceptcriteria/SourceIsTarget.java
@@ -33,6 +33,7 @@ public class SourceIsTarget extends ClientSideCriterion {
private SourceIsTarget() {
}
+ @Override
public boolean accept(DragAndDropEvent dragEvent) {
if (dragEvent.getTransferable() instanceof TransferableImpl) {
Component sourceComponent = ((TransferableImpl) dragEvent
diff --git a/src/com/vaadin/event/dd/acceptcriteria/TargetDetailIs.java b/src/com/vaadin/event/dd/acceptcriteria/TargetDetailIs.java
index 641fddc3ea..5df8f3f618 100644
--- a/src/com/vaadin/event/dd/acceptcriteria/TargetDetailIs.java
+++ b/src/com/vaadin/event/dd/acceptcriteria/TargetDetailIs.java
@@ -58,6 +58,7 @@ public class TargetDetailIs extends ClientSideCriterion {
}
}
+ @Override
public boolean accept(DragAndDropEvent dragEvent) {
Object data = dragEvent.getTargetDetails().getData(propertyName);
return value.equals(data);
diff --git a/src/com/vaadin/external/json/JSONException.java b/src/com/vaadin/external/json/JSONException.java
index fecc38974e..895ffcb457 100644
--- a/src/com/vaadin/external/json/JSONException.java
+++ b/src/com/vaadin/external/json/JSONException.java
@@ -25,6 +25,7 @@ public class JSONException extends Exception {
this.cause = cause;
}
+ @Override
public Throwable getCause() {
return this.cause;
}
diff --git a/src/com/vaadin/external/json/JSONStringer.java b/src/com/vaadin/external/json/JSONStringer.java
index e4ccc8e195..ae905cb15f 100644
--- a/src/com/vaadin/external/json/JSONStringer.java
+++ b/src/com/vaadin/external/json/JSONStringer.java
@@ -77,6 +77,7 @@ public class JSONStringer extends JSONWriter {
*
* @return The JSON text.
*/
+ @Override
public String toString() {
return this.mode == 'd' ? this.writer.toString() : null;
}
diff --git a/src/com/vaadin/navigator/Navigator.java b/src/com/vaadin/navigator/Navigator.java
index 3ff727b504..1813301fe6 100644
--- a/src/com/vaadin/navigator/Navigator.java
+++ b/src/com/vaadin/navigator/Navigator.java
@@ -14,6 +14,7 @@ import com.vaadin.terminal.Page;
import com.vaadin.terminal.Page.FragmentChangedEvent;
import com.vaadin.terminal.Page.FragmentChangedListener;
import com.vaadin.ui.Component;
+import com.vaadin.ui.ComponentContainer;
import com.vaadin.ui.CssLayout;
import com.vaadin.ui.CustomComponent;
@@ -53,6 +54,7 @@ public class Navigator implements Serializable {
setHeight("0px");
}
+ @Override
public void navigateTo(String fragmentParameters) {
// nothing to do
}
@@ -87,14 +89,17 @@ public class Navigator implements Serializable {
page.addListener(this);
}
+ @Override
public String getFragment() {
return page.getFragment();
}
+ @Override
public void setFragment(String fragment) {
page.setFragment(fragment, false);
}
+ @Override
public void fragmentChanged(FragmentChangedEvent event) {
UriFragmentManager.this.navigator.navigateTo(getFragment());
}
@@ -121,6 +126,7 @@ public class Navigator implements Serializable {
setSizeFull();
}
+ @Override
public void showView(View view) {
if (view instanceof Component) {
setCompositionRoot((Component) view);
@@ -132,6 +138,41 @@ public class Navigator implements Serializable {
}
/**
+ * View display that replaces the contents of a {@link ComponentContainer}
+ * with the active {@link View}.
+ *
+ * All components of the container are removed before adding the new view to
+ * it.
+ *
+ * This display only supports views that are {@link Component}s themselves.
+ * Attempting to display a view that is not a component causes an exception
+ * to be thrown.
+ */
+ public static class ComponentContainerViewDisplay implements ViewDisplay {
+
+ private final ComponentContainer container;
+
+ /**
+ * Create new {@link ViewDisplay} that updates a
+ * {@link ComponentContainer} to show the view.
+ */
+ public ComponentContainerViewDisplay(ComponentContainer container) {
+ this.container = container;
+ }
+
+ @Override
+ public void showView(View view) {
+ if (view instanceof Component) {
+ container.removeAllComponents();
+ container.addComponent((Component) view);
+ } else {
+ throw new IllegalArgumentException("View is not a component: "
+ + view);
+ }
+ }
+ }
+
+ /**
* View provider which supports mapping a single view name to a single
* pre-initialized view instance.
*
@@ -155,6 +196,7 @@ public class Navigator implements Serializable {
this.view = view;
}
+ @Override
public String getViewName(String viewAndParameters) {
if (null == viewAndParameters) {
return null;
@@ -165,6 +207,7 @@ public class Navigator implements Serializable {
return null;
}
+ @Override
public View getView(String viewName) {
if (this.viewName.equals(viewName)) {
return view;
@@ -215,6 +258,7 @@ public class Navigator implements Serializable {
this.viewClass = viewClass;
}
+ @Override
public String getViewName(String viewAndParameters) {
if (null == viewAndParameters) {
return null;
@@ -226,6 +270,7 @@ public class Navigator implements Serializable {
return null;
}
+ @Override
public View getView(String viewName) {
if (this.viewName.equals(viewName)) {
try {
@@ -268,31 +313,56 @@ public class Navigator implements Serializable {
private List<ViewProvider> providers = new LinkedList<ViewProvider>();
/**
- * Create a navigator that is tracking the active view using URI fragments.
- *
- * @param page
- * whose URI fragments are used
- * @param display
- * where to display the views
+ * Create a navigator that is tracking the active view using URI fragments
+ * of the current {@link Page} and replacing the contents of a
+ * {@link ComponentContainer} with the active view.
+ *
+ * In case the container is not on the current page, use another
+ * {@link Navigator#Navigator(Page, ViewDisplay)} with an explicitly created
+ * {@link ComponentContainerViewDisplay}.
+ *
+ * All components of the container are removed each time before adding the
+ * active {@link View}. Views must implement {@link Component} when using
+ * this constructor.
+ *
+ * <p>
+ * After all {@link View}s and {@link ViewProvider}s have been registered,
+ * the application should trigger navigation to the current fragment using
+ * e.g.
+ *
+ * <pre>
+ * navigator.navigateTo(Page.getCurrent().getFragment());
+ * </pre>
+ *
+ * @param container
+ * ComponentContainer whose contents should be replaced with the
+ * active view on view change
*/
- public Navigator(Page page, ViewDisplay display) {
- this.display = display;
- fragmentManager = new UriFragmentManager(page, this);
- navigateTo(page.getFragment());
+ public Navigator(ComponentContainer container) {
+ display = new ComponentContainerViewDisplay(container);
+ fragmentManager = new UriFragmentManager(Page.getCurrent(), this);
}
/**
* Create a navigator that is tracking the active view using URI fragments.
- * By default, a {@link SimpleViewDisplay} is used and can be obtained using
- * {@link #getDisplay()}.
+ *
+ * <p>
+ * After all {@link View}s and {@link ViewProvider}s have been registered,
+ * the application should trigger navigation to the current fragment using
+ * e.g.
+ *
+ * <pre>
+ * navigator.navigateTo(Page.getCurrent().getFragment());
+ * </pre>
*
* @param page
* whose URI fragments are used
+ * @param display
+ * where to display the views
*/
- public Navigator(Page page) {
- display = new SimpleViewDisplay();
+ public Navigator(Page page, ViewDisplay display) {
+ this.display = display;
fragmentManager = new UriFragmentManager(page, this);
- navigateTo(page.getFragment());
}
/**
diff --git a/src/com/vaadin/terminal/gwt/client/AbstractFieldState.java b/src/com/vaadin/shared/AbstractFieldState.java
index 3a66a01f23..33fc0ff92c 100644
--- a/src/com/vaadin/terminal/gwt/client/AbstractFieldState.java
+++ b/src/com/vaadin/shared/AbstractFieldState.java
@@ -1,9 +1,9 @@
/*
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client;
+package com.vaadin.shared;
-import com.vaadin.terminal.gwt.client.ui.TabIndexState;
+import com.vaadin.shared.ui.TabIndexState;
import com.vaadin.ui.AbstractField;
/**
@@ -121,6 +121,7 @@ public class AbstractFieldState extends ComponentState implements TabIndexState
*
* @see com.vaadin.terminal.gwt.client.ComponentState#getTabIndex()
*/
+ @Override
public int getTabIndex() {
return tabIndex;
}
@@ -130,6 +131,7 @@ public class AbstractFieldState extends ComponentState implements TabIndexState
*
* @see com.vaadin.terminal.gwt.client.ui.TabIndexState#setTabIndex(int)
*/
+ @Override
public void setTabIndex(int tabIndex) {
this.tabIndex = tabIndex;
}
diff --git a/src/com/vaadin/terminal/gwt/client/ComponentState.java b/src/com/vaadin/shared/ComponentState.java
index a603368f44..c4269de676 100644
--- a/src/com/vaadin/terminal/gwt/client/ComponentState.java
+++ b/src/com/vaadin/shared/ComponentState.java
@@ -2,14 +2,14 @@
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client;
+package com.vaadin.shared;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
-import com.vaadin.terminal.gwt.client.communication.SharedState;
-import com.vaadin.terminal.gwt.client.communication.URLReference;
+import com.vaadin.shared.communication.SharedState;
+import com.vaadin.shared.communication.URLReference;
import com.vaadin.ui.Component;
/**
diff --git a/src/com/vaadin/terminal/gwt/client/Connector.java b/src/com/vaadin/shared/Connector.java
index 9b2fcf61f1..e09d4d51b7 100644
--- a/src/com/vaadin/terminal/gwt/client/Connector.java
+++ b/src/com/vaadin/shared/Connector.java
@@ -1,11 +1,12 @@
/*
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client;
+package com.vaadin.shared;
import java.io.Serializable;
-import com.vaadin.terminal.gwt.client.communication.SharedState;
+import com.vaadin.shared.communication.SharedState;
+import com.vaadin.terminal.gwt.client.ServerConnector;
import com.vaadin.terminal.gwt.server.ClientConnector;
/**
diff --git a/src/com/vaadin/terminal/gwt/client/EventId.java b/src/com/vaadin/shared/EventId.java
index d3ef2e4e7e..616d37dcd0 100644
--- a/src/com/vaadin/terminal/gwt/client/EventId.java
+++ b/src/com/vaadin/shared/EventId.java
@@ -1,7 +1,7 @@
/*
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client;
+package com.vaadin.shared;
public interface EventId {
public static final String BLUR = "blur";
diff --git a/src/com/vaadin/shared/JavaScriptConnectorState.java b/src/com/vaadin/shared/JavaScriptConnectorState.java
new file mode 100644
index 0000000000..8371623e68
--- /dev/null
+++ b/src/com/vaadin/shared/JavaScriptConnectorState.java
@@ -0,0 +1,14 @@
+/*
+@VaadinApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.shared;
+
+import java.util.Map;
+import java.util.Set;
+
+public interface JavaScriptConnectorState {
+ public Set<String> getCallbackNames();
+
+ public Map<String, Set<String>> getRpcInterfaces();
+} \ No newline at end of file
diff --git a/src/com/vaadin/terminal/gwt/client/JavaScriptExtensionState.java b/src/com/vaadin/shared/JavaScriptExtensionState.java
index e7bfbc4bb2..35a7213239 100644
--- a/src/com/vaadin/terminal/gwt/client/JavaScriptExtensionState.java
+++ b/src/com/vaadin/shared/JavaScriptExtensionState.java
@@ -2,15 +2,14 @@
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client;
+package com.vaadin.shared;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
-import com.vaadin.terminal.gwt.client.JavaScriptConnectorHelper.JavaScriptConnectorState;
-import com.vaadin.terminal.gwt.client.communication.SharedState;
+import com.vaadin.shared.communication.SharedState;
public class JavaScriptExtensionState extends SharedState implements
JavaScriptConnectorState {
@@ -18,6 +17,7 @@ public class JavaScriptExtensionState extends SharedState implements
private Set<String> callbackNames = new HashSet<String>();
private Map<String, Set<String>> rpcInterfaces = new HashMap<String, Set<String>>();
+ @Override
public Set<String> getCallbackNames() {
return callbackNames;
}
@@ -26,6 +26,7 @@ public class JavaScriptExtensionState extends SharedState implements
this.callbackNames = callbackNames;
}
+ @Override
public Map<String, Set<String>> getRpcInterfaces() {
return rpcInterfaces;
}
diff --git a/src/com/vaadin/terminal/gwt/client/MouseEventDetails.java b/src/com/vaadin/shared/MouseEventDetails.java
index f5ff707eed..bc7ede4c60 100644
--- a/src/com/vaadin/terminal/gwt/client/MouseEventDetails.java
+++ b/src/com/vaadin/shared/MouseEventDetails.java
@@ -1,7 +1,7 @@
/*
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client;
+package com.vaadin.shared;
import java.io.Serializable;
diff --git a/src/com/vaadin/terminal/gwt/client/VBrowserDetails.java b/src/com/vaadin/shared/VBrowserDetails.java
index 6e0417149c..0cd9fe6436 100644
--- a/src/com/vaadin/terminal/gwt/client/VBrowserDetails.java
+++ b/src/com/vaadin/shared/VBrowserDetails.java
@@ -1,10 +1,11 @@
/*
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client;
+package com.vaadin.shared;
import java.io.Serializable;
+import com.vaadin.terminal.gwt.client.BrowserInfo;
import com.vaadin.terminal.gwt.server.WebBrowser;
/**
diff --git a/src/com/vaadin/terminal/gwt/client/communication/ClientRpc.java b/src/com/vaadin/shared/communication/ClientRpc.java
index 45dbe69454..d49bc05260 100644
--- a/src/com/vaadin/terminal/gwt/client/communication/ClientRpc.java
+++ b/src/com/vaadin/shared/communication/ClientRpc.java
@@ -2,7 +2,7 @@
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client.communication;
+package com.vaadin.shared.communication;
import java.io.Serializable;
diff --git a/src/com/vaadin/terminal/gwt/client/communication/FieldRpc.java b/src/com/vaadin/shared/communication/FieldRpc.java
index de464f1fb9..33e6f01028 100644
--- a/src/com/vaadin/terminal/gwt/client/communication/FieldRpc.java
+++ b/src/com/vaadin/shared/communication/FieldRpc.java
@@ -1,7 +1,7 @@
/*
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client.communication;
+package com.vaadin.shared.communication;
public class FieldRpc {
public interface FocusServerRpc extends ServerRpc {
diff --git a/src/com/vaadin/terminal/gwt/client/communication/MethodInvocation.java b/src/com/vaadin/shared/communication/MethodInvocation.java
index e61775a640..589c7b5d9b 100644
--- a/src/com/vaadin/terminal/gwt/client/communication/MethodInvocation.java
+++ b/src/com/vaadin/shared/communication/MethodInvocation.java
@@ -2,7 +2,7 @@
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client.communication;
+package com.vaadin.shared.communication;
import java.io.Serializable;
import java.util.Arrays;
diff --git a/src/com/vaadin/terminal/gwt/client/communication/ServerRpc.java b/src/com/vaadin/shared/communication/ServerRpc.java
index 664c4a391c..5ee42a4bef 100644
--- a/src/com/vaadin/terminal/gwt/client/communication/ServerRpc.java
+++ b/src/com/vaadin/shared/communication/ServerRpc.java
@@ -2,7 +2,7 @@
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client.communication;
+package com.vaadin.shared.communication;
import java.io.Serializable;
diff --git a/src/com/vaadin/terminal/gwt/client/communication/SharedState.java b/src/com/vaadin/shared/communication/SharedState.java
index b087907f9e..2882b1ed07 100644
--- a/src/com/vaadin/terminal/gwt/client/communication/SharedState.java
+++ b/src/com/vaadin/shared/communication/SharedState.java
@@ -2,11 +2,11 @@
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client.communication;
+package com.vaadin.shared.communication;
import java.io.Serializable;
-import com.vaadin.terminal.gwt.client.Connector;
+import com.vaadin.shared.Connector;
import com.vaadin.terminal.gwt.client.ServerConnector;
import com.vaadin.terminal.gwt.client.ui.AbstractComponentConnector;
diff --git a/src/com/vaadin/terminal/gwt/client/communication/URLReference.java b/src/com/vaadin/shared/communication/URLReference.java
index 569c4eff47..a4868cdb57 100644
--- a/src/com/vaadin/terminal/gwt/client/communication/URLReference.java
+++ b/src/com/vaadin/shared/communication/URLReference.java
@@ -1,7 +1,7 @@
/*
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client.communication;
+package com.vaadin.shared.communication;
import java.io.Serializable;
diff --git a/src/com/vaadin/terminal/gwt/client/communication/UidlValue.java b/src/com/vaadin/shared/communication/UidlValue.java
index 2a21074037..0314488ef3 100644
--- a/src/com/vaadin/terminal/gwt/client/communication/UidlValue.java
+++ b/src/com/vaadin/shared/communication/UidlValue.java
@@ -2,7 +2,7 @@
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client.communication;
+package com.vaadin.shared.communication;
import java.io.Serializable;
diff --git a/src/com/vaadin/terminal/gwt/client/extensions/javascriptmanager/ExecuteJavaScriptRpc.java b/src/com/vaadin/shared/extension/javascriptmanager/ExecuteJavaScriptRpc.java
index f1185586d5..097913c37f 100644
--- a/src/com/vaadin/terminal/gwt/client/extensions/javascriptmanager/ExecuteJavaScriptRpc.java
+++ b/src/com/vaadin/shared/extension/javascriptmanager/ExecuteJavaScriptRpc.java
@@ -2,9 +2,9 @@
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client.extensions.javascriptmanager;
+package com.vaadin.shared.extension.javascriptmanager;
-import com.vaadin.terminal.gwt.client.communication.ClientRpc;
+import com.vaadin.shared.communication.ClientRpc;
public interface ExecuteJavaScriptRpc extends ClientRpc {
public void executeJavaScript(String script);
diff --git a/src/com/vaadin/terminal/gwt/client/extensions/javascriptmanager/JavaScriptManagerState.java b/src/com/vaadin/shared/extension/javascriptmanager/JavaScriptManagerState.java
index fc246aff04..85647d0abd 100644
--- a/src/com/vaadin/terminal/gwt/client/extensions/javascriptmanager/JavaScriptManagerState.java
+++ b/src/com/vaadin/shared/extension/javascriptmanager/JavaScriptManagerState.java
@@ -2,12 +2,12 @@
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client.extensions.javascriptmanager;
+package com.vaadin.shared.extension.javascriptmanager;
import java.util.HashSet;
import java.util.Set;
-import com.vaadin.terminal.gwt.client.communication.SharedState;
+import com.vaadin.shared.communication.SharedState;
public class JavaScriptManagerState extends SharedState {
private Set<String> names = new HashSet<String>();
diff --git a/src/com/vaadin/terminal/gwt/client/ui/AbstractLayoutState.java b/src/com/vaadin/shared/ui/AbstractLayoutState.java
index fee5ea746a..9eaa11a9c6 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/AbstractLayoutState.java
+++ b/src/com/vaadin/shared/ui/AbstractLayoutState.java
@@ -1,9 +1,9 @@
/*
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client.ui;
+package com.vaadin.shared.ui;
-import com.vaadin.terminal.gwt.client.ComponentState;
+import com.vaadin.shared.ComponentState;
public class AbstractLayoutState extends ComponentState {
private int marginsBitmask;
diff --git a/src/com/vaadin/terminal/gwt/client/ui/AbstractMediaState.java b/src/com/vaadin/shared/ui/AbstractMediaState.java
index 0ab3851671..8cee16575d 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/AbstractMediaState.java
+++ b/src/com/vaadin/shared/ui/AbstractMediaState.java
@@ -1,13 +1,13 @@
/*
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client.ui;
+package com.vaadin.shared.ui;
import java.util.ArrayList;
import java.util.List;
-import com.vaadin.terminal.gwt.client.ComponentState;
-import com.vaadin.terminal.gwt.client.communication.URLReference;
+import com.vaadin.shared.ComponentState;
+import com.vaadin.shared.communication.URLReference;
public class AbstractMediaState extends ComponentState {
private boolean showControls;
diff --git a/src/com/vaadin/terminal/gwt/client/ui/AlignmentInfo.java b/src/com/vaadin/shared/ui/AlignmentInfo.java
index 041ab6c1ad..ff800de646 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/AlignmentInfo.java
+++ b/src/com/vaadin/shared/ui/AlignmentInfo.java
@@ -2,7 +2,7 @@
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client.ui;
+package com.vaadin.shared.ui;
public final class AlignmentInfo {
/** Bitmask values for client server communication */
diff --git a/src/com/vaadin/terminal/gwt/client/ui/ClickRpc.java b/src/com/vaadin/shared/ui/ClickRpc.java
index 37d6443f55..61bde1a5e9 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/ClickRpc.java
+++ b/src/com/vaadin/shared/ui/ClickRpc.java
@@ -1,10 +1,10 @@
/*
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client.ui;
+package com.vaadin.shared.ui;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
-import com.vaadin.terminal.gwt.client.communication.ServerRpc;
+import com.vaadin.shared.MouseEventDetails;
+import com.vaadin.shared.communication.ServerRpc;
public interface ClickRpc extends ServerRpc {
/**
diff --git a/src/com/vaadin/terminal/gwt/client/ui/Connect.java b/src/com/vaadin/shared/ui/Connect.java
index 0581bdb99c..aa60096eb9 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/Connect.java
+++ b/src/com/vaadin/shared/ui/Connect.java
@@ -1,14 +1,14 @@
/*
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client.ui;
+package com.vaadin.shared.ui;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
-import com.vaadin.terminal.gwt.client.Connector;
+import com.vaadin.shared.Connector;
import com.vaadin.terminal.gwt.server.ClientConnector;
import com.vaadin.terminal.gwt.widgetsetutils.CustomWidgetMapGenerator;
import com.vaadin.terminal.gwt.widgetsetutils.EagerWidgetMapGenerator;
diff --git a/src/com/vaadin/terminal/gwt/client/ui/JavaScriptComponentState.java b/src/com/vaadin/shared/ui/JavaScriptComponentState.java
index 6728f85ec9..d20b4701c2 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/JavaScriptComponentState.java
+++ b/src/com/vaadin/shared/ui/JavaScriptComponentState.java
@@ -2,15 +2,15 @@
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client.ui;
+package com.vaadin.shared.ui;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
-import com.vaadin.terminal.gwt.client.ComponentState;
-import com.vaadin.terminal.gwt.client.JavaScriptConnectorHelper.JavaScriptConnectorState;
+import com.vaadin.shared.ComponentState;
+import com.vaadin.shared.JavaScriptConnectorState;
public class JavaScriptComponentState extends ComponentState implements
JavaScriptConnectorState {
@@ -18,6 +18,7 @@ public class JavaScriptComponentState extends ComponentState implements
private Set<String> callbackNames = new HashSet<String>();
private Map<String, Set<String>> rpcInterfaces = new HashMap<String, Set<String>>();
+ @Override
public Set<String> getCallbackNames() {
return callbackNames;
}
@@ -26,6 +27,7 @@ public class JavaScriptComponentState extends ComponentState implements
this.callbackNames = callbackNames;
}
+ @Override
public Map<String, Set<String>> getRpcInterfaces() {
return rpcInterfaces;
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/LayoutClickRpc.java b/src/com/vaadin/shared/ui/LayoutClickRpc.java
index 5b76f398a9..48e62083b1 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/LayoutClickRpc.java
+++ b/src/com/vaadin/shared/ui/LayoutClickRpc.java
@@ -1,11 +1,11 @@
/*
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client.ui;
+package com.vaadin.shared.ui;
-import com.vaadin.terminal.gwt.client.Connector;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
-import com.vaadin.terminal.gwt.client.communication.ServerRpc;
+import com.vaadin.shared.Connector;
+import com.vaadin.shared.MouseEventDetails;
+import com.vaadin.shared.communication.ServerRpc;
public interface LayoutClickRpc extends ServerRpc {
/**
diff --git a/src/com/vaadin/shared/ui/MediaControl.java b/src/com/vaadin/shared/ui/MediaControl.java
new file mode 100644
index 0000000000..0a608a1685
--- /dev/null
+++ b/src/com/vaadin/shared/ui/MediaControl.java
@@ -0,0 +1,24 @@
+/*
+@VaadinApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.shared.ui;
+
+import com.vaadin.shared.communication.ClientRpc;
+
+/**
+ * Server to client RPC interface for controlling playback of the media.
+ *
+ * @since 7.0
+ */
+public interface MediaControl extends ClientRpc {
+ /**
+ * Start playing the media.
+ */
+ public void play();
+
+ /**
+ * Pause playback of the media.
+ */
+ public void pause();
+} \ No newline at end of file
diff --git a/src/com/vaadin/terminal/gwt/client/ui/TabIndexState.java b/src/com/vaadin/shared/ui/TabIndexState.java
index 7ffb328add..774c9b33a0 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/TabIndexState.java
+++ b/src/com/vaadin/shared/ui/TabIndexState.java
@@ -1,7 +1,7 @@
/*
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client.ui;
+package com.vaadin.shared.ui;
/**
* Interface implemented by state classes that support tab indexes.
diff --git a/src/com/vaadin/terminal/gwt/client/ui/VMarginInfo.java b/src/com/vaadin/shared/ui/VMarginInfo.java
index 7ba1f4708c..b17a03626f 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/VMarginInfo.java
+++ b/src/com/vaadin/shared/ui/VMarginInfo.java
@@ -2,7 +2,7 @@
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client.ui;
+package com.vaadin.shared.ui;
import java.io.Serializable;
diff --git a/src/com/vaadin/shared/ui/absolutelayout/AbsoluteLayoutServerRpc.java b/src/com/vaadin/shared/ui/absolutelayout/AbsoluteLayoutServerRpc.java
new file mode 100644
index 0000000000..7d1f75f833
--- /dev/null
+++ b/src/com/vaadin/shared/ui/absolutelayout/AbsoluteLayoutServerRpc.java
@@ -0,0 +1,11 @@
+/*
+@VaadinApache2LicenseForJavaFiles@
+ */
+package com.vaadin.shared.ui.absolutelayout;
+
+import com.vaadin.shared.communication.ServerRpc;
+import com.vaadin.shared.ui.LayoutClickRpc;
+
+public interface AbsoluteLayoutServerRpc extends LayoutClickRpc, ServerRpc {
+
+} \ No newline at end of file
diff --git a/src/com/vaadin/terminal/gwt/client/ui/absolutelayout/AbsoluteLayoutState.java b/src/com/vaadin/shared/ui/absolutelayout/AbsoluteLayoutState.java
index 4e1a43dd8b..f57b2c0d67 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/absolutelayout/AbsoluteLayoutState.java
+++ b/src/com/vaadin/shared/ui/absolutelayout/AbsoluteLayoutState.java
@@ -1,13 +1,13 @@
/*
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client.ui.absolutelayout;
+package com.vaadin.shared.ui.absolutelayout;
import java.util.HashMap;
import java.util.Map;
-import com.vaadin.terminal.gwt.client.Connector;
-import com.vaadin.terminal.gwt.client.ui.AbstractLayoutState;
+import com.vaadin.shared.Connector;
+import com.vaadin.shared.ui.AbstractLayoutState;
public class AbsoluteLayoutState extends AbstractLayoutState {
// Maps each component to a position
diff --git a/src/com/vaadin/terminal/gwt/client/ui/button/ButtonServerRpc.java b/src/com/vaadin/shared/ui/button/ButtonServerRpc.java
index 4a379c9262..0e55b07aea 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/button/ButtonServerRpc.java
+++ b/src/com/vaadin/shared/ui/button/ButtonServerRpc.java
@@ -1,10 +1,10 @@
/*
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client.ui.button;
+package com.vaadin.shared.ui.button;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
-import com.vaadin.terminal.gwt.client.communication.ServerRpc;
+import com.vaadin.shared.MouseEventDetails;
+import com.vaadin.shared.communication.ServerRpc;
/**
* RPC interface for calls from client to server.
diff --git a/src/com/vaadin/terminal/gwt/client/ui/button/ButtonState.java b/src/com/vaadin/shared/ui/button/ButtonState.java
index 2daceea0e8..c423e18d46 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/button/ButtonState.java
+++ b/src/com/vaadin/shared/ui/button/ButtonState.java
@@ -2,10 +2,10 @@
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client.ui.button;
+package com.vaadin.shared.ui.button;
-import com.vaadin.terminal.gwt.client.ComponentState;
-import com.vaadin.terminal.gwt.client.ui.TabIndexState;
+import com.vaadin.shared.ComponentState;
+import com.vaadin.shared.ui.TabIndexState;
import com.vaadin.ui.Button;
/**
@@ -102,6 +102,7 @@ public class ButtonState extends ComponentState implements TabIndexState {
*
* @see com.vaadin.terminal.gwt.client.ui.TabIndexState#getTabIndex()
*/
+ @Override
public int getTabIndex() {
return tabIndex;
}
@@ -111,6 +112,7 @@ public class ButtonState extends ComponentState implements TabIndexState {
*
* @see com.vaadin.terminal.gwt.client.ui.TabIndexState#setTabIndex(int)
*/
+ @Override
public void setTabIndex(int tabIndex) {
this.tabIndex = tabIndex;
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/checkbox/CheckBoxServerRpc.java b/src/com/vaadin/shared/ui/checkbox/CheckBoxServerRpc.java
index 05091ff6ed..fafd9bf2ff 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/checkbox/CheckBoxServerRpc.java
+++ b/src/com/vaadin/shared/ui/checkbox/CheckBoxServerRpc.java
@@ -1,10 +1,10 @@
/*
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client.ui.checkbox;
+package com.vaadin.shared.ui.checkbox;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
-import com.vaadin.terminal.gwt.client.communication.ServerRpc;
+import com.vaadin.shared.MouseEventDetails;
+import com.vaadin.shared.communication.ServerRpc;
public interface CheckBoxServerRpc extends ServerRpc {
public void setChecked(boolean checked, MouseEventDetails mouseEventDetails);
diff --git a/src/com/vaadin/terminal/gwt/client/ui/checkbox/CheckBoxState.java b/src/com/vaadin/shared/ui/checkbox/CheckBoxState.java
index d6d51cad36..d43959327c 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/checkbox/CheckBoxState.java
+++ b/src/com/vaadin/shared/ui/checkbox/CheckBoxState.java
@@ -1,9 +1,9 @@
/*
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client.ui.checkbox;
+package com.vaadin.shared.ui.checkbox;
-import com.vaadin.terminal.gwt.client.AbstractFieldState;
+import com.vaadin.shared.AbstractFieldState;
public class CheckBoxState extends AbstractFieldState {
private boolean checked = false;
diff --git a/src/com/vaadin/shared/ui/csslayout/CssLayoutServerRpc.java b/src/com/vaadin/shared/ui/csslayout/CssLayoutServerRpc.java
new file mode 100644
index 0000000000..0672aa32ce
--- /dev/null
+++ b/src/com/vaadin/shared/ui/csslayout/CssLayoutServerRpc.java
@@ -0,0 +1,11 @@
+/*
+@VaadinApache2LicenseForJavaFiles@
+ */
+package com.vaadin.shared.ui.csslayout;
+
+import com.vaadin.shared.communication.ServerRpc;
+import com.vaadin.shared.ui.LayoutClickRpc;
+
+public interface CssLayoutServerRpc extends LayoutClickRpc, ServerRpc {
+
+} \ No newline at end of file
diff --git a/src/com/vaadin/terminal/gwt/client/ui/csslayout/CssLayoutState.java b/src/com/vaadin/shared/ui/csslayout/CssLayoutState.java
index 07a8c1804a..03b4a947f5 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/csslayout/CssLayoutState.java
+++ b/src/com/vaadin/shared/ui/csslayout/CssLayoutState.java
@@ -1,13 +1,13 @@
/*
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client.ui.csslayout;
+package com.vaadin.shared.ui.csslayout;
import java.util.HashMap;
import java.util.Map;
-import com.vaadin.terminal.gwt.client.Connector;
-import com.vaadin.terminal.gwt.client.ui.AbstractLayoutState;
+import com.vaadin.shared.Connector;
+import com.vaadin.shared.ui.AbstractLayoutState;
public class CssLayoutState extends AbstractLayoutState {
private Map<Connector, String> childCss = new HashMap<Connector, String>();
diff --git a/src/com/vaadin/terminal/gwt/client/ui/customlayout/CustomLayoutState.java b/src/com/vaadin/shared/ui/customlayout/CustomLayoutState.java
index 6b374a8099..4399e0ece1 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/customlayout/CustomLayoutState.java
+++ b/src/com/vaadin/shared/ui/customlayout/CustomLayoutState.java
@@ -1,13 +1,13 @@
/*
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client.ui.customlayout;
+package com.vaadin.shared.ui.customlayout;
import java.util.HashMap;
import java.util.Map;
-import com.vaadin.terminal.gwt.client.Connector;
-import com.vaadin.terminal.gwt.client.ui.AbstractLayoutState;
+import com.vaadin.shared.Connector;
+import com.vaadin.shared.ui.AbstractLayoutState;
public class CustomLayoutState extends AbstractLayoutState {
Map<Connector, String> childLocations = new HashMap<Connector, String>();
diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/AcceptCriterion.java b/src/com/vaadin/shared/ui/dd/AcceptCriterion.java
index 8a026e4d2e..19c2e5f273 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/dd/AcceptCriterion.java
+++ b/src/com/vaadin/shared/ui/dd/AcceptCriterion.java
@@ -2,13 +2,15 @@
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client.ui.dd;
+package com.vaadin.shared.ui.dd;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
+import com.vaadin.terminal.gwt.client.ui.dd.VAcceptCriterion;
+
/**
* An annotation type used to point the server side counterpart for client side
* a {@link VAcceptCriterion} class.
diff --git a/src/com/vaadin/shared/ui/dd/DragEventType.java b/src/com/vaadin/shared/ui/dd/DragEventType.java
new file mode 100644
index 0000000000..e03b347ada
--- /dev/null
+++ b/src/com/vaadin/shared/ui/dd/DragEventType.java
@@ -0,0 +1,9 @@
+/*
+@VaadinApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.shared.ui.dd;
+
+public enum DragEventType {
+ ENTER, LEAVE, OVER, DROP
+} \ No newline at end of file
diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/HorizontalDropLocation.java b/src/com/vaadin/shared/ui/dd/HorizontalDropLocation.java
index 5e90acd6f1..065b880953 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/dd/HorizontalDropLocation.java
+++ b/src/com/vaadin/shared/ui/dd/HorizontalDropLocation.java
@@ -1,7 +1,7 @@
/*
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client.ui.dd;
+package com.vaadin.shared.ui.dd;
public enum HorizontalDropLocation {
LEFT, RIGHT, CENTER
diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/VerticalDropLocation.java b/src/com/vaadin/shared/ui/dd/VerticalDropLocation.java
index de392a0e98..2658921124 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/dd/VerticalDropLocation.java
+++ b/src/com/vaadin/shared/ui/dd/VerticalDropLocation.java
@@ -1,7 +1,7 @@
/*
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client.ui.dd;
+package com.vaadin.shared.ui.dd;
public enum VerticalDropLocation {
TOP, BOTTOM, MIDDLE
diff --git a/src/com/vaadin/shared/ui/embedded/EmbeddedServerRpc.java b/src/com/vaadin/shared/ui/embedded/EmbeddedServerRpc.java
new file mode 100644
index 0000000000..27af1623b0
--- /dev/null
+++ b/src/com/vaadin/shared/ui/embedded/EmbeddedServerRpc.java
@@ -0,0 +1,10 @@
+/*
+@VaadinApache2LicenseForJavaFiles@
+ */
+package com.vaadin.shared.ui.embedded;
+
+import com.vaadin.shared.communication.ServerRpc;
+import com.vaadin.shared.ui.ClickRpc;
+
+public interface EmbeddedServerRpc extends ClickRpc, ServerRpc {
+} \ No newline at end of file
diff --git a/src/com/vaadin/terminal/gwt/client/ui/form/FormState.java b/src/com/vaadin/shared/ui/form/FormState.java
index c1acc0971d..a3035491bf 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/form/FormState.java
+++ b/src/com/vaadin/shared/ui/form/FormState.java
@@ -1,10 +1,10 @@
/*
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client.ui.form;
+package com.vaadin.shared.ui.form;
-import com.vaadin.terminal.gwt.client.AbstractFieldState;
-import com.vaadin.terminal.gwt.client.Connector;
+import com.vaadin.shared.AbstractFieldState;
+import com.vaadin.shared.Connector;
public class FormState extends AbstractFieldState {
private Connector layout;
diff --git a/src/com/vaadin/shared/ui/gridlayout/GridLayoutServerRpc.java b/src/com/vaadin/shared/ui/gridlayout/GridLayoutServerRpc.java
new file mode 100644
index 0000000000..110b9c33f9
--- /dev/null
+++ b/src/com/vaadin/shared/ui/gridlayout/GridLayoutServerRpc.java
@@ -0,0 +1,11 @@
+/*
+@VaadinApache2LicenseForJavaFiles@
+ */
+package com.vaadin.shared.ui.gridlayout;
+
+import com.vaadin.shared.communication.ServerRpc;
+import com.vaadin.shared.ui.LayoutClickRpc;
+
+public interface GridLayoutServerRpc extends LayoutClickRpc, ServerRpc {
+
+} \ No newline at end of file
diff --git a/src/com/vaadin/terminal/gwt/client/ui/gridlayout/GridLayoutState.java b/src/com/vaadin/shared/ui/gridlayout/GridLayoutState.java
index 109dc7dea6..9179a61d27 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/gridlayout/GridLayoutState.java
+++ b/src/com/vaadin/shared/ui/gridlayout/GridLayoutState.java
@@ -1,9 +1,9 @@
/*
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client.ui.gridlayout;
+package com.vaadin.shared.ui.gridlayout;
-import com.vaadin.terminal.gwt.client.ui.AbstractLayoutState;
+import com.vaadin.shared.ui.AbstractLayoutState;
public class GridLayoutState extends AbstractLayoutState {
private boolean spacing = false;
diff --git a/src/com/vaadin/shared/ui/label/ContentMode.java b/src/com/vaadin/shared/ui/label/ContentMode.java
new file mode 100644
index 0000000000..a58f2cdebb
--- /dev/null
+++ b/src/com/vaadin/shared/ui/label/ContentMode.java
@@ -0,0 +1,46 @@
+/*
+@VaadinApache2LicenseForJavaFiles@
+ */
+package com.vaadin.shared.ui.label;
+
+/**
+ * Content modes defining how the client should interpret a Label's value.
+ *
+ * @since 7.0.0
+ */
+public enum ContentMode {
+ /**
+ * Content mode, where the label contains only plain text.
+ */
+ TEXT,
+
+ /**
+ * Content mode, where the label contains pre formatted text. In this mode
+ * newlines are preserved when rendered on the screen.
+ */
+ PREFORMATTED,
+
+ /**
+ * Content mode, where the label contains XHTML. Care should be taken to
+ * ensure
+ */
+ XHTML,
+
+ /**
+ * Content mode, where the label contains well-formed or well-balanced XML.
+ * This is handled in the same way as {@link #XHTML}.
+ *
+ * @deprecated Use {@link #XHTML} instead
+ */
+ @Deprecated
+ XML,
+
+ /**
+ * Legacy content mode, where the label contains RAW output. This is handled
+ * in exactly the same way as {@link #XHTML}.
+ *
+ * @deprecated Use {@link #XHTML} instead
+ */
+ @Deprecated
+ RAW;
+}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/label/LabelState.java b/src/com/vaadin/shared/ui/label/LabelState.java
index 25bbca3c3d..0298e40179 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/label/LabelState.java
+++ b/src/com/vaadin/shared/ui/label/LabelState.java
@@ -1,9 +1,9 @@
/*
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client.ui.label;
+package com.vaadin.shared.ui.label;
-import com.vaadin.terminal.gwt.client.ComponentState;
+import com.vaadin.shared.ComponentState;
public class LabelState extends ComponentState {
private ContentMode contentMode = ContentMode.TEXT;
diff --git a/src/com/vaadin/shared/ui/orderedlayout/AbstractOrderedLayoutServerRpc.java b/src/com/vaadin/shared/ui/orderedlayout/AbstractOrderedLayoutServerRpc.java
new file mode 100644
index 0000000000..3de8ec0220
--- /dev/null
+++ b/src/com/vaadin/shared/ui/orderedlayout/AbstractOrderedLayoutServerRpc.java
@@ -0,0 +1,12 @@
+/*
+@VaadinApache2LicenseForJavaFiles@
+ */
+package com.vaadin.shared.ui.orderedlayout;
+
+import com.vaadin.shared.communication.ServerRpc;
+import com.vaadin.shared.ui.LayoutClickRpc;
+
+public interface AbstractOrderedLayoutServerRpc extends LayoutClickRpc,
+ ServerRpc {
+
+} \ No newline at end of file
diff --git a/src/com/vaadin/terminal/gwt/client/ui/orderedlayout/AbstractOrderedLayoutState.java b/src/com/vaadin/shared/ui/orderedlayout/AbstractOrderedLayoutState.java
index 1d57358490..c18a128912 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/orderedlayout/AbstractOrderedLayoutState.java
+++ b/src/com/vaadin/shared/ui/orderedlayout/AbstractOrderedLayoutState.java
@@ -1,14 +1,14 @@
/*
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client.ui.orderedlayout;
+package com.vaadin.shared.ui.orderedlayout;
import java.io.Serializable;
import java.util.HashMap;
-import com.vaadin.terminal.gwt.client.Connector;
-import com.vaadin.terminal.gwt.client.ui.AbstractLayoutState;
-import com.vaadin.terminal.gwt.client.ui.AlignmentInfo;
+import com.vaadin.shared.Connector;
+import com.vaadin.shared.ui.AbstractLayoutState;
+import com.vaadin.shared.ui.AlignmentInfo;
public class AbstractOrderedLayoutState extends AbstractLayoutState {
private boolean spacing = false;
diff --git a/src/com/vaadin/shared/ui/panel/PanelServerRpc.java b/src/com/vaadin/shared/ui/panel/PanelServerRpc.java
new file mode 100644
index 0000000000..6ed4652070
--- /dev/null
+++ b/src/com/vaadin/shared/ui/panel/PanelServerRpc.java
@@ -0,0 +1,11 @@
+/*
+@VaadinApache2LicenseForJavaFiles@
+ */
+package com.vaadin.shared.ui.panel;
+
+import com.vaadin.shared.communication.ServerRpc;
+import com.vaadin.shared.ui.ClickRpc;
+
+public interface PanelServerRpc extends ClickRpc, ServerRpc {
+
+} \ No newline at end of file
diff --git a/src/com/vaadin/terminal/gwt/client/ui/panel/PanelState.java b/src/com/vaadin/shared/ui/panel/PanelState.java
index fc7921825f..ed31ed1ea3 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/panel/PanelState.java
+++ b/src/com/vaadin/shared/ui/panel/PanelState.java
@@ -1,9 +1,9 @@
/*
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client.ui.panel;
+package com.vaadin.shared.ui.panel;
-import com.vaadin.terminal.gwt.client.ComponentState;
+import com.vaadin.shared.ComponentState;
public class PanelState extends ComponentState {
private int tabIndex;
diff --git a/src/com/vaadin/terminal/gwt/client/ui/root/PageClientRpc.java b/src/com/vaadin/shared/ui/root/PageClientRpc.java
index a02ecc8ded..c7d587938d 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/root/PageClientRpc.java
+++ b/src/com/vaadin/shared/ui/root/PageClientRpc.java
@@ -2,9 +2,9 @@
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client.ui.root;
+package com.vaadin.shared.ui.root;
-import com.vaadin.terminal.gwt.client.communication.ClientRpc;
+import com.vaadin.shared.communication.ClientRpc;
public interface PageClientRpc extends ClientRpc {
diff --git a/src/com/vaadin/shared/ui/root/RootServerRpc.java b/src/com/vaadin/shared/ui/root/RootServerRpc.java
new file mode 100644
index 0000000000..2e670553b8
--- /dev/null
+++ b/src/com/vaadin/shared/ui/root/RootServerRpc.java
@@ -0,0 +1,11 @@
+/*
+@VaadinApache2LicenseForJavaFiles@
+ */
+package com.vaadin.shared.ui.root;
+
+import com.vaadin.shared.communication.ServerRpc;
+import com.vaadin.shared.ui.ClickRpc;
+
+public interface RootServerRpc extends ClickRpc, ServerRpc {
+
+} \ No newline at end of file
diff --git a/src/com/vaadin/terminal/gwt/client/ui/root/RootState.java b/src/com/vaadin/shared/ui/root/RootState.java
index 85d5e45022..26844cba32 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/root/RootState.java
+++ b/src/com/vaadin/shared/ui/root/RootState.java
@@ -1,10 +1,10 @@
/*
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client.ui.root;
+package com.vaadin.shared.ui.root;
-import com.vaadin.terminal.gwt.client.ComponentState;
-import com.vaadin.terminal.gwt.client.Connector;
+import com.vaadin.shared.ComponentState;
+import com.vaadin.shared.Connector;
public class RootState extends ComponentState {
private Connector content;
diff --git a/src/com/vaadin/terminal/gwt/client/ui/splitpanel/AbstractSplitPanelRpc.java b/src/com/vaadin/shared/ui/splitpanel/AbstractSplitPanelRpc.java
index cc043838ff..e2ebcb0de3 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/splitpanel/AbstractSplitPanelRpc.java
+++ b/src/com/vaadin/shared/ui/splitpanel/AbstractSplitPanelRpc.java
@@ -1,10 +1,10 @@
/*
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client.ui.splitpanel;
+package com.vaadin.shared.ui.splitpanel;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
-import com.vaadin.terminal.gwt.client.communication.ServerRpc;
+import com.vaadin.shared.MouseEventDetails;
+import com.vaadin.shared.communication.ServerRpc;
public interface AbstractSplitPanelRpc extends ServerRpc {
diff --git a/src/com/vaadin/terminal/gwt/client/ui/splitpanel/AbstractSplitPanelState.java b/src/com/vaadin/shared/ui/splitpanel/AbstractSplitPanelState.java
index db3a39d3a5..d94d5d8608 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/splitpanel/AbstractSplitPanelState.java
+++ b/src/com/vaadin/shared/ui/splitpanel/AbstractSplitPanelState.java
@@ -1,12 +1,12 @@
/*
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client.ui.splitpanel;
+package com.vaadin.shared.ui.splitpanel;
import java.io.Serializable;
-import com.vaadin.terminal.gwt.client.ComponentState;
-import com.vaadin.terminal.gwt.client.Connector;
+import com.vaadin.shared.ComponentState;
+import com.vaadin.shared.Connector;
public class AbstractSplitPanelState extends ComponentState {
diff --git a/src/com/vaadin/terminal/gwt/client/ui/textarea/TextAreaState.java b/src/com/vaadin/shared/ui/textarea/TextAreaState.java
index 71bdd230b7..3b3bd42f87 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/textarea/TextAreaState.java
+++ b/src/com/vaadin/shared/ui/textarea/TextAreaState.java
@@ -1,9 +1,9 @@
/*
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client.ui.textarea;
+package com.vaadin.shared.ui.textarea;
-import com.vaadin.terminal.gwt.client.ui.textfield.AbstractTextFieldState;
+import com.vaadin.shared.ui.textfield.AbstractTextFieldState;
public class TextAreaState extends AbstractTextFieldState {
diff --git a/src/com/vaadin/terminal/gwt/client/ui/textfield/AbstractTextFieldState.java b/src/com/vaadin/shared/ui/textfield/AbstractTextFieldState.java
index d11b049f56..d980eccae2 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/textfield/AbstractTextFieldState.java
+++ b/src/com/vaadin/shared/ui/textfield/AbstractTextFieldState.java
@@ -1,9 +1,9 @@
/*
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client.ui.textfield;
+package com.vaadin.shared.ui.textfield;
-import com.vaadin.terminal.gwt.client.AbstractFieldState;
+import com.vaadin.shared.AbstractFieldState;
public class AbstractTextFieldState extends AbstractFieldState {
/**
diff --git a/src/com/vaadin/terminal/gwt/client/ui/video/VideoState.java b/src/com/vaadin/shared/ui/video/VideoState.java
index f59d9ccac1..1dc8d07b7c 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/video/VideoState.java
+++ b/src/com/vaadin/shared/ui/video/VideoState.java
@@ -1,10 +1,10 @@
/*
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client.ui.video;
+package com.vaadin.shared.ui.video;
-import com.vaadin.terminal.gwt.client.communication.URLReference;
-import com.vaadin.terminal.gwt.client.ui.AbstractMediaState;
+import com.vaadin.shared.communication.URLReference;
+import com.vaadin.shared.ui.AbstractMediaState;
public class VideoState extends AbstractMediaState {
private URLReference poster;
diff --git a/src/com/vaadin/shared/ui/window/WindowServerRpc.java b/src/com/vaadin/shared/ui/window/WindowServerRpc.java
new file mode 100644
index 0000000000..11abfae4be
--- /dev/null
+++ b/src/com/vaadin/shared/ui/window/WindowServerRpc.java
@@ -0,0 +1,10 @@
+/*
+@VaadinApache2LicenseForJavaFiles@
+ */
+package com.vaadin.shared.ui.window;
+
+import com.vaadin.shared.communication.ServerRpc;
+import com.vaadin.shared.ui.ClickRpc;
+
+public interface WindowServerRpc extends ClickRpc, ServerRpc {
+} \ No newline at end of file
diff --git a/src/com/vaadin/terminal/gwt/client/ui/window/WindowState.java b/src/com/vaadin/shared/ui/window/WindowState.java
index b057d76b16..428bd75167 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/window/WindowState.java
+++ b/src/com/vaadin/shared/ui/window/WindowState.java
@@ -1,9 +1,9 @@
/*
@VaadinApache2LicenseForJavaFiles@
*/
-package com.vaadin.terminal.gwt.client.ui.window;
+package com.vaadin.shared.ui.window;
-import com.vaadin.terminal.gwt.client.ui.panel.PanelState;
+import com.vaadin.shared.ui.panel.PanelState;
public class WindowState extends PanelState {
private boolean modal = false;
diff --git a/src/com/vaadin/terminal/AbstractClientConnector.java b/src/com/vaadin/terminal/AbstractClientConnector.java
index 9de444d70e..9c68361382 100644
--- a/src/com/vaadin/terminal/AbstractClientConnector.java
+++ b/src/com/vaadin/terminal/AbstractClientConnector.java
@@ -19,9 +19,9 @@ import java.util.NoSuchElementException;
import java.util.logging.Logger;
import com.vaadin.Application;
-import com.vaadin.terminal.gwt.client.communication.ClientRpc;
-import com.vaadin.terminal.gwt.client.communication.ServerRpc;
-import com.vaadin.terminal.gwt.client.communication.SharedState;
+import com.vaadin.shared.communication.ClientRpc;
+import com.vaadin.shared.communication.ServerRpc;
+import com.vaadin.shared.communication.SharedState;
import com.vaadin.terminal.gwt.server.ClientConnector;
import com.vaadin.terminal.gwt.server.ClientMethodInvocation;
import com.vaadin.terminal.gwt.server.RpcManager;
@@ -69,6 +69,7 @@ public abstract class AbstractClientConnector implements ClientConnector {
private ClientConnector parent;
/* Documentation copied from interface */
+ @Override
public void requestRepaint() {
Root root = getRoot();
if (root != null) {
@@ -125,6 +126,7 @@ public abstract class AbstractClientConnector implements ClientConnector {
registerRpc(implementation, type);
}
+ @Override
public SharedState getState() {
if (null == sharedState) {
sharedState = createState();
@@ -164,6 +166,7 @@ public abstract class AbstractClientConnector implements ClientConnector {
*
* @see com.vaadin.terminal.gwt.server.ClientConnector#getStateType()
*/
+ @Override
public Class<? extends SharedState> getStateType() {
try {
Method m = getClass().getMethod("getState", (Class[]) null);
@@ -214,6 +217,7 @@ public abstract class AbstractClientConnector implements ClientConnector {
this.connector = connector;
}
+ @Override
public Iterator<ClientConnector> iterator() {
CombinedIterator<ClientConnector> iterator = new CombinedIterator<ClientConnector>();
iterator.addIterator(connector.getExtensions().iterator());
@@ -236,6 +240,7 @@ public abstract class AbstractClientConnector implements ClientConnector {
rpcInterfaceName = rpcInterface.getName().replaceAll("\\$", ".");
}
+ @Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
addMethodInvocationToQueue(rpcInterfaceName, method, args);
@@ -274,10 +279,12 @@ public abstract class AbstractClientConnector implements ClientConnector {
*
* @since 7.0
*/
+ @Override
public RpcManager getRpcManager(Class<?> rpcInterface) {
return rpcManagerMap.get(rpcInterface);
}
+ @Override
public List<ClientMethodInvocation> retrievePendingRpcCalls() {
if (pendingInvocations.isEmpty()) {
return Collections.emptyList();
@@ -288,6 +295,7 @@ public abstract class AbstractClientConnector implements ClientConnector {
}
}
+ @Override
public String getConnectorId() {
if (connectorId == null) {
if (getApplication() == null) {
@@ -322,7 +330,8 @@ public abstract class AbstractClientConnector implements ClientConnector {
* @return the Root ancestor of this connector, or <code>null</code> if none
* is found.
*/
- protected Root getRoot() {
+ @Override
+ public Root getRoot() {
ClientConnector connector = this;
while (connector != null) {
if (connector instanceof Root) {
@@ -337,6 +346,7 @@ public abstract class AbstractClientConnector implements ClientConnector {
return Logger.getLogger(AbstractClientConnector.class.getName());
}
+ @Override
public void requestRepaintAll() {
requestRepaint();
@@ -354,6 +364,7 @@ public abstract class AbstractClientConnector implements ClientConnector {
iterators.add(iterator);
}
+ @Override
public boolean hasNext() {
for (Iterator<? extends T> i : iterators) {
if (i.hasNext()) {
@@ -363,6 +374,7 @@ public abstract class AbstractClientConnector implements ClientConnector {
return false;
}
+ @Override
public T next() {
for (Iterator<? extends T> i : iterators) {
if (i.hasNext()) {
@@ -372,6 +384,7 @@ public abstract class AbstractClientConnector implements ClientConnector {
throw new NoSuchElementException();
}
+ @Override
public void remove() {
throw new UnsupportedOperationException();
}
@@ -390,6 +403,7 @@ public abstract class AbstractClientConnector implements ClientConnector {
return new AllChildrenIterable(connector);
}
+ @Override
public Collection<Extension> getExtensions() {
return Collections.unmodifiableCollection(extensions);
}
@@ -416,12 +430,14 @@ public abstract class AbstractClientConnector implements ClientConnector {
requestRepaint();
}
+ @Override
public void removeExtension(Extension extension) {
extension.setParent(null);
extensions.remove(extension);
requestRepaint();
}
+ @Override
public void setParent(ClientConnector parent) {
// If the parent is not changed, don't do anything
@@ -448,10 +464,12 @@ public abstract class AbstractClientConnector implements ClientConnector {
}
}
+ @Override
public ClientConnector getParent() {
return parent;
}
+ @Override
public void attach() {
requestRepaint();
@@ -471,6 +489,7 @@ public abstract class AbstractClientConnector implements ClientConnector {
* <code>null</code> after this method is called.
* </p>
*/
+ @Override
public void detach() {
for (ClientConnector connector : getAllChildrenIterable(this)) {
connector.detach();
@@ -479,6 +498,7 @@ public abstract class AbstractClientConnector implements ClientConnector {
getRoot().getConnectorTracker().unregisterConnector(this);
}
+ @Override
public boolean isConnectorEnabled() {
if (getParent() == null) {
// No parent -> the component cannot receive updates from the client
diff --git a/src/com/vaadin/terminal/AbstractErrorMessage.java b/src/com/vaadin/terminal/AbstractErrorMessage.java
index 3f526f7339..f7cd0e6aad 100644
--- a/src/com/vaadin/terminal/AbstractErrorMessage.java
+++ b/src/com/vaadin/terminal/AbstractErrorMessage.java
@@ -68,6 +68,7 @@ public abstract class AbstractErrorMessage implements ErrorMessage {
}
/* Documented in interface */
+ @Override
public ErrorLevel getErrorLevel() {
return level;
}
@@ -92,6 +93,7 @@ public abstract class AbstractErrorMessage implements ErrorMessage {
causes.add(cause);
}
+ @Override
public String getFormattedHtmlMessage() {
String result = null;
switch (getMode()) {
diff --git a/src/com/vaadin/terminal/AbstractJavaScriptExtension.java b/src/com/vaadin/terminal/AbstractJavaScriptExtension.java
index bdcd948c74..df44c3edd5 100644
--- a/src/com/vaadin/terminal/AbstractJavaScriptExtension.java
+++ b/src/com/vaadin/terminal/AbstractJavaScriptExtension.java
@@ -4,7 +4,8 @@
package com.vaadin.terminal;
-import com.vaadin.terminal.gwt.client.JavaScriptExtensionState;
+import com.vaadin.shared.JavaScriptExtensionState;
+import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.ui.JavaScriptCallback;
/**
@@ -34,9 +35,9 @@ import com.vaadin.ui.JavaScriptCallback;
* the connector's parent. If <code>connectorId</code> is provided, the id of
* the parent of the corresponding connector with the passed id is returned
* instead.</li>
- * <li><code>getWidgetElement([connectorId])</code> - returns the DOM Element
- * that is the root of a connector's widget. <code>null</code> is returned if
- * the connector can not be found or if the connector doesn't have a widget. If
+ * <li><code>getElement([connectorId])</code> - returns the DOM Element that is
+ * the root of a connector's widget. <code>null</code> is returned if the
+ * connector can not be found or if the connector doesn't have a widget. If
* <code>connectorId</code> is not provided, the connector id of the current
* connector will be used.</li>
* <li><code>getState()</code> - returns an object corresponding to the shared
@@ -63,6 +64,9 @@ import com.vaadin.ui.JavaScriptCallback;
* exception when called. The scheme for conversion between Java types in the
* RPC interface and the JavaScript values that should be passed to the
* functions is described bellow.</li>
+ * <li><code>translateVaadinUri(uri)</code> - Translates a Vaadin URI to a URL
+ * that can be used in the browser. This is just way of accessing
+ * {@link ApplicationConnection#translateVaadinUri(String)}</li>
* </ul>
* The connector wrapper also supports these special functions:
* <ul>
@@ -139,8 +143,9 @@ public abstract class AbstractJavaScriptExtension extends AbstractExtension {
/**
* Invoke a named function that the connector JavaScript has added to the
* JavaScript connector wrapper object. The arguments should only contain
- * data types that can be represented in JavaScript, including primitive
- * boxing types, arrays, String, List, Set, Map, Connector and JavaBeans.
+ * data types that can be represented in JavaScript including primitives,
+ * their boxed types, arrays, String, List, Set, Map, Connector and
+ * JavaBeans.
*
* @param name
* the name of the function
diff --git a/src/com/vaadin/terminal/ClassResource.java b/src/com/vaadin/terminal/ClassResource.java
index e7419576f1..b74c8e7bb7 100644
--- a/src/com/vaadin/terminal/ClassResource.java
+++ b/src/com/vaadin/terminal/ClassResource.java
@@ -89,6 +89,7 @@ public class ClassResource implements ApplicationResource, Serializable {
*
* @see com.vaadin.terminal.Resource#getMIMEType()
*/
+ @Override
public String getMIMEType() {
return FileTypeResolver.getMIMEType(resourceName);
}
@@ -98,6 +99,7 @@ public class ClassResource implements ApplicationResource, Serializable {
*
* @see com.vaadin.terminal.ApplicationResource#getApplication()
*/
+ @Override
public Application getApplication() {
return application;
}
@@ -108,6 +110,7 @@ public class ClassResource implements ApplicationResource, Serializable {
* @return the file name associated to this resource.
* @see com.vaadin.terminal.ApplicationResource#getFilename()
*/
+ @Override
public String getFilename() {
int index = 0;
int next = 0;
@@ -123,6 +126,7 @@ public class ClassResource implements ApplicationResource, Serializable {
*
* @see com.vaadin.terminal.ApplicationResource#getStream()
*/
+ @Override
public DownloadStream getStream() {
final DownloadStream ds = new DownloadStream(
associatedClass.getResourceAsStream(resourceName),
@@ -133,6 +137,7 @@ public class ClassResource implements ApplicationResource, Serializable {
}
/* documented in superclass */
+ @Override
public int getBufferSize() {
return bufferSize;
}
@@ -148,6 +153,7 @@ public class ClassResource implements ApplicationResource, Serializable {
}
/* documented in superclass */
+ @Override
public long getCacheTime() {
return cacheTime;
}
diff --git a/src/com/vaadin/terminal/CombinedRequest.java b/src/com/vaadin/terminal/CombinedRequest.java
index abf5e0412a..5b92feb39a 100644
--- a/src/com/vaadin/terminal/CombinedRequest.java
+++ b/src/com/vaadin/terminal/CombinedRequest.java
@@ -63,6 +63,7 @@ public class CombinedRequest implements WrappedRequest {
}
+ @Override
public String getParameter(String parameter) {
String[] strings = getParameterMap().get(parameter);
if (strings == null || strings.length == 0) {
@@ -72,48 +73,60 @@ public class CombinedRequest implements WrappedRequest {
}
}
+ @Override
public Map<String, String[]> getParameterMap() {
return parameterMap;
}
+ @Override
public int getContentLength() {
return secondRequest.getContentLength();
}
+ @Override
public InputStream getInputStream() throws IOException {
return secondRequest.getInputStream();
}
+ @Override
public Object getAttribute(String name) {
return secondRequest.getAttribute(name);
}
+ @Override
public void setAttribute(String name, Object value) {
secondRequest.setAttribute(name, value);
}
+ @Override
public String getRequestPathInfo() {
return secondRequest.getParameter("initialPath");
}
+ @Override
public int getSessionMaxInactiveInterval() {
return secondRequest.getSessionMaxInactiveInterval();
}
+ @Override
public Object getSessionAttribute(String name) {
return secondRequest.getSessionAttribute(name);
}
+ @Override
public void setSessionAttribute(String name, Object attribute) {
secondRequest.setSessionAttribute(name, attribute);
}
+ @Override
public String getContentType() {
return secondRequest.getContentType();
}
+ @Override
public BrowserDetails getBrowserDetails() {
return new BrowserDetails() {
+ @Override
public String getUriFragment() {
String fragment = secondRequest.getParameter("fr");
if (fragment == null) {
@@ -123,10 +136,12 @@ public class CombinedRequest implements WrappedRequest {
}
}
+ @Override
public String getWindowName() {
return secondRequest.getParameter("wn");
}
+ @Override
public WebBrowser getWebBrowser() {
WebApplicationContext context = (WebApplicationContext) Application
.getCurrent().getContext();
@@ -145,22 +160,27 @@ public class CombinedRequest implements WrappedRequest {
return secondRequest;
}
+ @Override
public Locale getLocale() {
return secondRequest.getLocale();
}
+ @Override
public String getRemoteAddr() {
return secondRequest.getRemoteAddr();
}
+ @Override
public boolean isSecure() {
return secondRequest.isSecure();
}
+ @Override
public String getHeader(String name) {
return secondRequest.getHeader(name);
}
+ @Override
public DeploymentConfiguration getDeploymentConfiguration() {
return secondRequest.getDeploymentConfiguration();
}
diff --git a/src/com/vaadin/terminal/DeploymentConfiguration.java b/src/com/vaadin/terminal/DeploymentConfiguration.java
index 02a3f0200f..ddb42349d8 100644
--- a/src/com/vaadin/terminal/DeploymentConfiguration.java
+++ b/src/com/vaadin/terminal/DeploymentConfiguration.java
@@ -5,6 +5,10 @@
package com.vaadin.terminal;
import java.io.Serializable;
+import java.util.Properties;
+
+import javax.portlet.PortletContext;
+import javax.servlet.ServletContext;
/**
* Provide deployment specific settings that are required outside terminal
@@ -83,4 +87,27 @@ public interface DeploymentConfiguration extends Serializable {
* @return the class loader to use, or <code>null</code>
*/
public ClassLoader getClassLoader();
+
+ /**
+ * Returns the MIME type of the specified file, or null if the MIME type is
+ * not known. The MIME type is determined by the configuration of the
+ * container, and may be specified in a deployment descriptor. Common MIME
+ * types are "text/html" and "image/gif".
+ *
+ * @param resourceName
+ * a String specifying the name of a file
+ * @return a String specifying the file's MIME type
+ *
+ * @see ServletContext#getMimeType(String)
+ * @see PortletContext#getMimeType(String)
+ */
+ public String getMimeType(String resourceName);
+
+ /**
+ * Gets the properties configured for the deployment, e.g. as init
+ * parameters to the servlet or portlet.
+ *
+ * @return properties for the application.
+ */
+ public Properties getInitParameters();
}
diff --git a/src/com/vaadin/terminal/ExternalResource.java b/src/com/vaadin/terminal/ExternalResource.java
index 0abff91638..84fcc65a44 100644
--- a/src/com/vaadin/terminal/ExternalResource.java
+++ b/src/com/vaadin/terminal/ExternalResource.java
@@ -100,6 +100,7 @@ public class ExternalResource implements Resource, Serializable {
*
* @see com.vaadin.terminal.Resource#getMIMEType()
*/
+ @Override
public String getMIMEType() {
if (mimeType == null) {
mimeType = FileTypeResolver.getMIMEType(getURL().toString());
diff --git a/src/com/vaadin/terminal/FileResource.java b/src/com/vaadin/terminal/FileResource.java
index 8dc3b00fd0..e3c9f0172a 100644
--- a/src/com/vaadin/terminal/FileResource.java
+++ b/src/com/vaadin/terminal/FileResource.java
@@ -61,6 +61,7 @@ public class FileResource implements ApplicationResource {
*
* @see com.vaadin.terminal.ApplicationResource#getStream()
*/
+ @Override
public DownloadStream getStream() {
try {
final DownloadStream ds = new DownloadStream(new FileInputStream(
@@ -74,6 +75,7 @@ public class FileResource implements ApplicationResource {
// Log the exception using the application error handler
getApplication().getErrorHandler().terminalError(new ErrorEvent() {
+ @Override
public Throwable getThrowable() {
return e;
}
@@ -106,6 +108,7 @@ public class FileResource implements ApplicationResource {
/**
* @see com.vaadin.terminal.ApplicationResource#getApplication()
*/
+ @Override
public Application getApplication() {
return application;
}
@@ -113,6 +116,7 @@ public class FileResource implements ApplicationResource {
/**
* @see com.vaadin.terminal.ApplicationResource#getFilename()
*/
+ @Override
public String getFilename() {
return sourceFile.getName();
}
@@ -120,6 +124,7 @@ public class FileResource implements ApplicationResource {
/**
* @see com.vaadin.terminal.Resource#getMIMEType()
*/
+ @Override
public String getMIMEType() {
return FileTypeResolver.getMIMEType(sourceFile);
}
@@ -132,6 +137,7 @@ public class FileResource implements ApplicationResource {
*
* @return Cache time in milliseconds.
*/
+ @Override
public long getCacheTime() {
return cacheTime;
}
@@ -150,6 +156,7 @@ public class FileResource implements ApplicationResource {
}
/* documented in superclass */
+ @Override
public int getBufferSize() {
return bufferSize;
}
diff --git a/src/com/vaadin/terminal/JavaScriptCallbackHelper.java b/src/com/vaadin/terminal/JavaScriptCallbackHelper.java
index 01db0267d9..131875a5a4 100644
--- a/src/com/vaadin/terminal/JavaScriptCallbackHelper.java
+++ b/src/com/vaadin/terminal/JavaScriptCallbackHelper.java
@@ -14,8 +14,8 @@ import java.util.Set;
import com.vaadin.external.json.JSONArray;
import com.vaadin.external.json.JSONException;
+import com.vaadin.shared.JavaScriptConnectorState;
import com.vaadin.terminal.gwt.client.JavaScriptConnectorHelper;
-import com.vaadin.terminal.gwt.client.JavaScriptConnectorHelper.JavaScriptConnectorState;
import com.vaadin.tools.ReflectTools;
import com.vaadin.ui.AbstractJavaScriptComponent;
import com.vaadin.ui.JavaScript.JavaScriptCallbackRpc;
@@ -65,6 +65,7 @@ public class JavaScriptCallbackHelper implements Serializable {
private void ensureRpc() {
if (javascriptCallbackRpc == null) {
javascriptCallbackRpc = new JavaScriptCallbackRpc() {
+ @Override
public void call(String name, JSONArray arguments) {
JavaScriptCallback callback = callbacks.get(name);
try {
diff --git a/src/com/vaadin/terminal/Page.java b/src/com/vaadin/terminal/Page.java
index 8ccb243a1e..a068e7573e 100644
--- a/src/com/vaadin/terminal/Page.java
+++ b/src/com/vaadin/terminal/Page.java
@@ -12,9 +12,9 @@ import java.util.LinkedList;
import java.util.List;
import com.vaadin.event.EventRouter;
+import com.vaadin.shared.ui.root.PageClientRpc;
import com.vaadin.terminal.WrappedRequest.BrowserDetails;
import com.vaadin.terminal.gwt.client.ui.notification.VNotification;
-import com.vaadin.terminal.gwt.client.ui.root.PageClientRpc;
import com.vaadin.terminal.gwt.client.ui.root.VRoot;
import com.vaadin.terminal.gwt.server.WebApplicationContext;
import com.vaadin.terminal.gwt.server.WebBrowser;
diff --git a/src/com/vaadin/terminal/StreamResource.java b/src/com/vaadin/terminal/StreamResource.java
index 1e13169292..1afd91dc08 100644
--- a/src/com/vaadin/terminal/StreamResource.java
+++ b/src/com/vaadin/terminal/StreamResource.java
@@ -79,6 +79,7 @@ public class StreamResource implements ApplicationResource {
/**
* @see com.vaadin.terminal.Resource#getMIMEType()
*/
+ @Override
public String getMIMEType() {
if (MIMEType != null) {
return MIMEType;
@@ -123,6 +124,7 @@ public class StreamResource implements ApplicationResource {
*
* @return the filename.
*/
+ @Override
public String getFilename() {
return filename;
}
@@ -140,6 +142,7 @@ public class StreamResource implements ApplicationResource {
/**
* @see com.vaadin.terminal.ApplicationResource#getApplication()
*/
+ @Override
public Application getApplication() {
return application;
}
@@ -147,6 +150,7 @@ public class StreamResource implements ApplicationResource {
/**
* @see com.vaadin.terminal.ApplicationResource#getStream()
*/
+ @Override
public DownloadStream getStream() {
final StreamSource ss = getStreamSource();
if (ss == null) {
@@ -176,6 +180,7 @@ public class StreamResource implements ApplicationResource {
}
/* documented in superclass */
+ @Override
public int getBufferSize() {
return bufferSize;
}
@@ -191,6 +196,7 @@ public class StreamResource implements ApplicationResource {
}
/* documented in superclass */
+ @Override
public long getCacheTime() {
return cacheTime;
}
diff --git a/src/com/vaadin/terminal/ThemeResource.java b/src/com/vaadin/terminal/ThemeResource.java
index d456047653..41674b2373 100644
--- a/src/com/vaadin/terminal/ThemeResource.java
+++ b/src/com/vaadin/terminal/ThemeResource.java
@@ -89,6 +89,7 @@ public class ThemeResource implements Resource {
/**
* @see com.vaadin.terminal.Resource#getMIMEType()
*/
+ @Override
public String getMIMEType() {
return FileTypeResolver.getMIMEType(getResourceId());
}
diff --git a/src/com/vaadin/terminal/gwt/DefaultWidgetSet.gwt.xml b/src/com/vaadin/terminal/gwt/DefaultWidgetSet.gwt.xml
index 697bf992e9..278d92f38f 100644
--- a/src/com/vaadin/terminal/gwt/DefaultWidgetSet.gwt.xml
+++ b/src/com/vaadin/terminal/gwt/DefaultWidgetSet.gwt.xml
@@ -6,93 +6,8 @@
<!-- Hint for WidgetSetBuilder not to automatically update the file -->
<!-- WS Compiler: manually edited -->
- <inherits name="com.google.gwt.user.User" />
-
- <inherits name="com.google.gwt.http.HTTP" />
-
- <inherits name="com.google.gwt.json.JSON" />
-
- <inherits
- name="com.vaadin.terminal.gwt.DefaultWidgetSetBrowserSpecificOverrides" />
-
- <source path="client" />
-
- <!-- TODO only for development -->
- <replace-with class="com.vaadin.terminal.gwt.client.ui.VerticalBoxLayoutConnector">
- <when-type-is class="com.vaadin.terminal.gwt.client.ui.orderedlayout.VerticalLayoutConnector" />
- </replace-with>
- <replace-with class="com.vaadin.terminal.gwt.client.ui.HorizontalBoxLayoutConnector">
- <when-type-is class="com.vaadin.terminal.gwt.client.ui.orderedlayout.HorizontalLayoutConnector" />
- </replace-with>
-
- <!-- Use own Scheduler implementation to be able to track if commands are
- running -->
- <replace-with class="com.vaadin.terminal.gwt.client.VSchedulerImpl">
- <when-type-is class="com.google.gwt.core.client.impl.SchedulerImpl" />
- </replace-with>
-
-
- <!-- Generators for serializators for classes used in communication between
- server and client -->
- <generate-with
- class="com.vaadin.terminal.gwt.widgetsetutils.SerializerMapGenerator">
- <when-type-is
- class="com.vaadin.terminal.gwt.client.communication.SerializerMap" />
- </generate-with>
-
- <replace-with class="com.vaadin.terminal.gwt.client.VDebugConsole">
- <when-type-is class="com.vaadin.terminal.gwt.client.Console" />
- </replace-with>
-
- <generate-with
- class="com.vaadin.terminal.gwt.widgetsetutils.EagerWidgetMapGenerator">
- <when-type-is class="com.vaadin.terminal.gwt.client.WidgetMap" />
- </generate-with>
-
- <generate-with
- class="com.vaadin.terminal.gwt.widgetsetutils.AcceptCriteriaFactoryGenerator">
- <when-type-is
- class="com.vaadin.terminal.gwt.client.ui.dd.VAcceptCriterionFactory" />
- </generate-with>
-
- <!-- Generate client side proxies for client to server RPC interfaces -->
- <generate-with
- class="com.vaadin.terminal.gwt.widgetsetutils.RpcProxyGenerator">
- <when-type-assignable
- class="com.vaadin.terminal.gwt.client.communication.ServerRpc" />
- </generate-with>
-
- <!-- Generate client side proxies for client to server RPC interfaces -->
- <generate-with
- class="com.vaadin.terminal.gwt.widgetsetutils.RpcProxyCreatorGenerator">
- <when-type-assignable
- class="com.vaadin.terminal.gwt.client.communication.RpcProxy.RpcProxyCreator" />
- </generate-with>
-
- <!-- Generate client side RPC manager for server to client RPC -->
- <generate-with
- class="com.vaadin.terminal.gwt.widgetsetutils.GeneratedRpcMethodProviderGenerator">
- <when-type-assignable
- class="com.vaadin.terminal.gwt.client.communication.GeneratedRpcMethodProvider" />
- </generate-with>
-
- <generate-with
- class="com.vaadin.terminal.gwt.widgetsetutils.ConnectorWidgetFactoryGenerator">
- <when-type-assignable
- class="com.vaadin.terminal.gwt.client.ui.ConnectorWidgetFactory" />
- </generate-with>
-
- <generate-with
- class="com.vaadin.terminal.gwt.widgetsetutils.ConnectorStateFactoryGenerator">
- <when-type-assignable
- class="com.vaadin.terminal.gwt.client.ui.ConnectorStateFactory" />
- </generate-with>
+ <inherits name="com.vaadin.Vaadin" />
<entry-point class="com.vaadin.terminal.gwt.client.ApplicationConfiguration" />
- <!-- Use the new cross site linker to get a nocache.js without document.write -->
- <add-linker name="xsiframe" />
-
- <set-configuration-property name="devModeRedirectEnabled" value="true" />
-
</module>
diff --git a/src/com/vaadin/terminal/gwt/DefaultWidgetSetBrowserSpecificOverrides.gwt.xml b/src/com/vaadin/terminal/gwt/VaadinBrowserSpecificOverrides.gwt.xml
index b5ab61df64..b5ab61df64 100644
--- a/src/com/vaadin/terminal/gwt/DefaultWidgetSetBrowserSpecificOverrides.gwt.xml
+++ b/src/com/vaadin/terminal/gwt/VaadinBrowserSpecificOverrides.gwt.xml
diff --git a/src/com/vaadin/terminal/gwt/client/ApplicationConfiguration.java b/src/com/vaadin/terminal/gwt/client/ApplicationConfiguration.java
index 960b0a8b0e..71707e723a 100644
--- a/src/com/vaadin/terminal/gwt/client/ApplicationConfiguration.java
+++ b/src/com/vaadin/terminal/gwt/client/ApplicationConfiguration.java
@@ -23,6 +23,8 @@ import com.vaadin.terminal.gwt.client.ui.UnknownComponentConnector;
public class ApplicationConfiguration implements EntryPoint {
+ public static final String PORTLET_RESOUCE_URL_BASE = "portletAppURLBase";
+
/**
* Helper class for reading configuration options from the bootstap
* javascript
@@ -205,8 +207,6 @@ public class ApplicationConfiguration implements EntryPoint {
private ErrorMessage communicationError;
private ErrorMessage authorizationError;
private boolean useDebugIdInDom = true;
- private boolean usePortletURLs = false;
- private String portletUidlURLBase;
private HashMap<Integer, String> unknownComponents;
@@ -218,7 +218,7 @@ public class ApplicationConfiguration implements EntryPoint {
static// TODO consider to make this hashmap per application
LinkedList<Command> callbacks = new LinkedList<Command>();
- private static int widgetsLoading;
+ private static int dependenciesLoading;
private static ArrayList<ApplicationConnection> runningApplications = new ArrayList<ApplicationConnection>();
@@ -226,11 +226,12 @@ public class ApplicationConfiguration implements EntryPoint {
private Map<Integer, String> tagToServerSideClassName = new HashMap<Integer, String>();
public boolean usePortletURLs() {
- return usePortletURLs;
+ return getPortletResourceUrl() != null;
}
- public String getPortletUidlURLBase() {
- return portletUidlURLBase;
+ public String getPortletResourceUrl() {
+ return getJsoConfiguration(id)
+ .getConfigString(PORTLET_RESOUCE_URL_BASE);
}
public String getRootPanelId() {
@@ -319,12 +320,6 @@ public class ApplicationConfiguration implements EntryPoint {
useDebugIdInDom = jsoConfiguration.getConfigBoolean("useDebugIdInDom") != Boolean.FALSE;
// null -> false
- usePortletURLs = jsoConfiguration.getConfigBoolean("usePortletURLs") == Boolean.TRUE;
-
- portletUidlURLBase = jsoConfiguration
- .getConfigString("portletUidlURLBase");
-
- // null -> false
standalone = jsoConfiguration.getConfigBoolean("standalone") == Boolean.TRUE;
communicationError = jsoConfiguration.getConfigError("comErrMsg");
@@ -348,6 +343,7 @@ public class ApplicationConfiguration implements EntryPoint {
public static void startApplication(final String applicationId) {
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
+ @Override
public void execute() {
ApplicationConfiguration appConf = getConfigFromDOM(applicationId);
ApplicationConnection a = GWT
@@ -454,26 +450,26 @@ public class ApplicationConfiguration implements EntryPoint {
*
* @param c
*/
- static void runWhenWidgetsLoaded(Command c) {
- if (widgetsLoading == 0) {
+ static void runWhenDependenciesLoaded(Command c) {
+ if (dependenciesLoading == 0) {
c.execute();
} else {
callbacks.add(c);
}
}
- static void startWidgetLoading() {
- widgetsLoading++;
+ static void startDependencyLoading() {
+ dependenciesLoading++;
}
- static void endWidgetLoading() {
- widgetsLoading--;
- if (widgetsLoading == 0 && !callbacks.isEmpty()) {
+ static void endDependencyLoading() {
+ dependenciesLoading--;
+ if (dependenciesLoading == 0 && !callbacks.isEmpty()) {
for (Command cmd : callbacks) {
cmd.execute();
}
callbacks.clear();
- } else if (widgetsLoading == 0 && deferredWidgetLoader != null) {
+ } else if (dependenciesLoading == 0 && deferredWidgetLoader != null) {
deferredWidgetLoader.trigger();
}
@@ -534,7 +530,7 @@ public class ApplicationConfiguration implements EntryPoint {
}
private boolean isBusy() {
- if (widgetsLoading > 0) {
+ if (dependenciesLoading > 0) {
communicationFree = 0;
return true;
}
@@ -553,6 +549,7 @@ public class ApplicationConfiguration implements EntryPoint {
private static DeferredWidgetLoader deferredWidgetLoader;
+ @Override
public void onModuleLoad() {
// Prepare VConsole for debugging
@@ -571,6 +568,7 @@ public class ApplicationConfiguration implements EntryPoint {
*/
GWT.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
+ @Override
public void onUncaughtException(Throwable e) {
/*
* Note in case of null console (without ?debug) we eat
@@ -581,6 +579,11 @@ public class ApplicationConfiguration implements EntryPoint {
}
});
+ if (SuperDevMode.enableBasedOnParameter()) {
+ // Do not start any application as super dev mode will refresh the
+ // page once done compiling
+ return;
+ }
registerCallback(GWT.getModuleName());
deferredWidgetLoader = new DeferredWidgetLoader();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ApplicationConnection.java b/src/com/vaadin/terminal/gwt/client/ApplicationConnection.java
index f0470c8ee8..fb7af1404c 100644
--- a/src/com/vaadin/terminal/gwt/client/ApplicationConnection.java
+++ b/src/com/vaadin/terminal/gwt/client/ApplicationConnection.java
@@ -27,6 +27,7 @@ import com.google.gwt.http.client.RequestBuilder;
import com.google.gwt.http.client.RequestCallback;
import com.google.gwt.http.client.RequestException;
import com.google.gwt.http.client.Response;
+import com.google.gwt.http.client.URL;
import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONString;
@@ -35,21 +36,23 @@ import com.google.gwt.regexp.shared.RegExp;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
-import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.shared.ComponentState;
+import com.vaadin.shared.communication.MethodInvocation;
+import com.vaadin.shared.communication.SharedState;
+import com.vaadin.shared.communication.UidlValue;
import com.vaadin.terminal.gwt.client.ApplicationConfiguration.ErrorMessage;
+import com.vaadin.terminal.gwt.client.ResourceLoader.ResourceLoadEvent;
+import com.vaadin.terminal.gwt.client.ResourceLoader.ResourceLoadListener;
import com.vaadin.terminal.gwt.client.communication.HasJavaScriptConnectorHelper;
import com.vaadin.terminal.gwt.client.communication.JsonDecoder;
import com.vaadin.terminal.gwt.client.communication.JsonEncoder;
-import com.vaadin.terminal.gwt.client.communication.MethodInvocation;
import com.vaadin.terminal.gwt.client.communication.RpcManager;
import com.vaadin.terminal.gwt.client.communication.SerializerMap;
-import com.vaadin.terminal.gwt.client.communication.SharedState;
import com.vaadin.terminal.gwt.client.communication.StateChangeEvent;
import com.vaadin.terminal.gwt.client.communication.Type;
-import com.vaadin.terminal.gwt.client.communication.UidlValue;
import com.vaadin.terminal.gwt.client.extensions.AbstractExtensionConnector;
import com.vaadin.terminal.gwt.client.ui.AbstractComponentConnector;
import com.vaadin.terminal.gwt.client.ui.VContextMenu;
@@ -75,6 +78,19 @@ import com.vaadin.terminal.gwt.server.AbstractCommunicationManager;
* Entry point classes (widgetsets) define <code>onModuleLoad()</code>.
*/
public class ApplicationConnection {
+ public static final String APP_REQUEST_PATH = "APP/";
+
+ public static final String UIDL_REQUEST_PATH = "UIDL/";
+
+ public static final String APP_PROTOCOL_PREFIX = "app://";
+
+ public static final String V_RESOURCE_PATH = "v-resourcePath";
+
+ public static final String CONNECTOR_PROTOCOL_PREFIX = "connector://";
+
+ public static final String CONNECTOR_RESOURCE_PREFIX = APP_REQUEST_PATH
+ + "CONNECTOR";
+
// This indicates the whole page is generated by us (not embedded)
public static final String GENERATED_BODY_CLASSNAME = "v-generated-body";
@@ -131,7 +147,7 @@ public class ApplicationConnection {
*/
public static final String UIDL_REFRESH_TOKEN = "Vaadin-Refresh";
- private final boolean debugLogging = false;
+ private final boolean debugLogging = true || false;
// will hold the UIDL security key (for XSS protection) once received
private String uidlSecurityKey = "init";
@@ -506,12 +522,7 @@ public class ApplicationConnection {
final String payload = uidlSecurityKey + VAR_BURST_SEPARATOR
+ requestData;
VConsole.log("Making UIDL Request with params: " + payload);
- String uri;
- if (configuration.usePortletURLs()) {
- uri = configuration.getPortletUidlURLBase();
- } else {
- uri = getAppUri() + "UIDL";
- }
+ String uri = translateVaadinUri(APP_PROTOCOL_PREFIX + UIDL_REQUEST_PATH);
if (extraParams != null && extraParams.length() > 0) {
uri = addGetParameters(uri, extraParams);
@@ -538,11 +549,13 @@ public class ApplicationConnection {
final boolean synchronous) {
if (!synchronous) {
RequestCallback requestCallback = new RequestCallback() {
+ @Override
public void onError(Request request, Throwable exception) {
showCommunicationError(exception.getMessage(), -1);
endRequest();
}
+ @Override
public void onResponseReceived(Request request,
Response response) {
VConsole.log("Server visit took "
@@ -868,6 +881,7 @@ public class ApplicationConnection {
}
// deferring to avoid flickering
Scheduler.get().scheduleDeferred(new Command() {
+ @Override
public void execute() {
if (!hasActiveRequest()) {
hideLoadingIndicator();
@@ -1067,6 +1081,14 @@ public class ApplicationConnection {
json.getValueMap("typeMappings"), widgetSet);
}
+ VConsole.log("Handling resource dependencies");
+ if (json.containsKey("scriptDependencies")) {
+ loadScriptDependencies(json.getJSStringArray("scriptDependencies"));
+ }
+ if (json.containsKey("styleDependencies")) {
+ loadStyleDependencies(json.getJSStringArray("styleDependencies"));
+ }
+
handleUIDLDuration.logDuration(
" * Handling type mappings from server completed", 10);
/*
@@ -1077,6 +1099,7 @@ public class ApplicationConnection {
}
Command c = new Command() {
+ @Override
public void execute() {
handleUIDLDuration.logDuration(" * Loading widgets completed",
10);
@@ -1608,7 +1631,72 @@ public class ApplicationConnection {
}
};
- ApplicationConfiguration.runWhenWidgetsLoaded(c);
+ ApplicationConfiguration.runWhenDependenciesLoaded(c);
+ }
+
+ private void loadStyleDependencies(JsArrayString dependencies) {
+ // Assuming no reason to interpret in a defined order
+ ResourceLoadListener resourceLoadListener = new ResourceLoadListener() {
+ @Override
+ public void onLoad(ResourceLoadEvent event) {
+ ApplicationConfiguration.endDependencyLoading();
+ }
+
+ @Override
+ public void onError(ResourceLoadEvent event) {
+ VConsole.error(event.getResourceUrl()
+ + " could not be loaded, or the load detection failed because the stylesheet is empty.");
+ // The show must go on
+ onLoad(event);
+ }
+ };
+ ResourceLoader loader = ResourceLoader.get();
+ for (int i = 0; i < dependencies.length(); i++) {
+ String url = translateVaadinUri(dependencies.get(i));
+ ApplicationConfiguration.startDependencyLoading();
+ loader.loadStylesheet(url, resourceLoadListener);
+ }
+ }
+
+ private void loadScriptDependencies(final JsArrayString dependencies) {
+ if (dependencies.length() == 0) {
+ return;
+ }
+
+ // Listener that loads the next when one is completed
+ ResourceLoadListener resourceLoadListener = new ResourceLoadListener() {
+ @Override
+ public void onLoad(ResourceLoadEvent event) {
+ if (dependencies.length() != 0) {
+ String url = translateVaadinUri(dependencies.shift());
+ ApplicationConfiguration.startDependencyLoading();
+ // Load next in chain (hopefully already preloaded)
+ event.getResourceLoader().loadScript(url, this);
+ }
+ // Call start for next before calling end for current
+ ApplicationConfiguration.endDependencyLoading();
+ }
+
+ @Override
+ public void onError(ResourceLoadEvent event) {
+ VConsole.error(event.getResourceUrl() + " could not be loaded.");
+ // The show must go on
+ onLoad(event);
+ }
+ };
+
+ ResourceLoader loader = ResourceLoader.get();
+
+ // Start chain by loading first
+ String url = translateVaadinUri(dependencies.shift());
+ ApplicationConfiguration.startDependencyLoading();
+ loader.loadScript(url, resourceLoadListener);
+
+ // Preload all remaining
+ for (int i = 0; i < dependencies.length(); i++) {
+ String preloadUrl = translateVaadinUri(dependencies.get(i));
+ loader.preloadResource(preloadUrl, null);
+ }
}
// Redirect browser, null reloads current page
@@ -1669,6 +1757,7 @@ public class ApplicationConnection {
}
private final ScheduledCommand sendPendingCommand = new ScheduledCommand() {
+ @Override
public void execute() {
deferedSendPending = false;
doSendPendingVariableChanges();
@@ -2214,8 +2303,42 @@ public class ApplicationConnection {
}
uidlUri = themeUri + uidlUri.substring(7);
}
- if (uidlUri.startsWith("app://")) {
- uidlUri = getAppUri() + uidlUri.substring(6);
+
+ if (uidlUri.startsWith(CONNECTOR_PROTOCOL_PREFIX)) {
+ // getAppUri *should* always end with /
+ // substring *should* always start with / (connector:///foo.bar
+ // without connector://)
+ uidlUri = APP_PROTOCOL_PREFIX + CONNECTOR_RESOURCE_PREFIX
+ + uidlUri.substring(CONNECTOR_PROTOCOL_PREFIX.length());
+ // Let translation of app:// urls take care of the rest
+ }
+ if (uidlUri.startsWith(APP_PROTOCOL_PREFIX)) {
+ String relativeUrl = uidlUri
+ .substring(APP_PROTOCOL_PREFIX.length());
+ if (getConfiguration().usePortletURLs()) {
+ // Should put path in v-resourcePath parameter and append query
+ // params to base portlet url
+ String[] parts = relativeUrl.split("\\?", 2);
+ String path = parts[0];
+
+ String url = getConfiguration().getPortletResourceUrl();
+
+ // If there's a "?" followed by something, append it as a query
+ // string to the base URL
+ if (parts.length > 1) {
+ String appUrlParams = parts[1];
+ url = addGetParameters(url, appUrlParams);
+ }
+ if (!path.startsWith("/")) {
+ path = '/' + path;
+ }
+ String pathParam = V_RESOURCE_PATH + "="
+ + URL.encodeQueryString(path);
+ url = addGetParameters(url, pathParam);
+ uidlUri = url;
+ } else {
+ uidlUri = getAppUri() + relativeUrl;
+ }
}
return uidlUri;
}
@@ -2242,6 +2365,7 @@ public class ApplicationConnection {
this.url = url;
}
+ @Override
public void notificationHidden(HideEvent event) {
redirect(url);
}
@@ -2250,57 +2374,8 @@ public class ApplicationConnection {
/* Extended title handling */
- /**
- * Data showed in tooltips are stored centrilized as it may be needed in
- * varios place: caption, layouts, and in owner components themselves.
- *
- * Updating TooltipInfo is done in updateComponent method.
- *
- */
- public TooltipInfo getTooltipTitleInfo(ComponentConnector titleOwner,
- Object key) {
- if (null == titleOwner) {
- return null;
- }
- return connectorMap.getTooltipInfo(titleOwner, key);
- }
-
private final VTooltip tooltip = new VTooltip(this);
- /**
- * Component may want to delegate Tooltip handling to client. Layouts add
- * Tooltip (description, errors) to caption, but some components may want
- * them to appear one other elements too.
- *
- * Events wanted by this handler are same as in Tooltip.TOOLTIP_EVENTS
- *
- * @param event
- * @param owner
- */
- public void handleTooltipEvent(Event event, ComponentConnector owner) {
- tooltip.handleTooltipEvent(event, owner, null);
-
- }
-
- /**
- * Component may want to delegate Tooltip handling to client. Layouts add
- * Tooltip (description, errors) to caption, but some components may want
- * them to appear one other elements too.
- *
- * Events wanted by this handler are same as in Tooltip.TOOLTIP_EVENTS
- *
- * @param event
- * @param owner
- * @param key
- * the key for tooltip if this is "additional" tooltip, null for
- * components "main tooltip"
- */
- public void handleTooltipEvent(Event event, ComponentConnector owner,
- Object key) {
- tooltip.handleTooltipEvent(event, owner, key);
-
- }
-
private ConnectorMap connectorMap = GWT.create(ConnectorMap.class);
protected String getUidlSecurityKey() {
@@ -2328,34 +2403,6 @@ public class ApplicationConnection {
}
/**
- * If component has several tooltips in addition to the one provided by
- * {@link com.vaadin.ui.AbstractComponent}, component can register them with
- * this method.
- * <p>
- * Component must also pipe events to
- * {@link #handleTooltipEvent(Event, ComponentConnector, Object)} method.
- * <p>
- * This method can also be used to deregister tooltips by using null as
- * tooltip
- *
- * @param paintable
- * Paintable "owning" this tooltip
- * @param key
- * key assosiated with given tooltip. Can be any object. For
- * example a related dom element. Same key must be given for
- * {@link #handleTooltipEvent(Event, ComponentConnector, Object)}
- * method.
- *
- * @param tooltip
- * the TooltipInfo object containing details shown in tooltip,
- * null if deregistering tooltip
- */
- public void registerTooltip(ComponentConnector paintable, Object key,
- TooltipInfo tooltip) {
- connectorMap.registerTooltip(paintable, key, tooltip);
- }
-
- /**
* Gets the {@link ApplicationConfiguration} for the current application.
*
* @see ApplicationConfiguration
@@ -2437,15 +2484,15 @@ public class ApplicationConnection {
// connectorMap.unregisterConnector(p);
}
+ /**
+ * Get VTooltip instance related to application connection
+ *
+ * @return VTooltip instance
+ */
public VTooltip getVTooltip() {
return tooltip;
}
- @Deprecated
- public void handleTooltipEvent(Event event, Widget owner, Object key) {
- handleTooltipEvent(event, getConnectorMap().getConnector(owner), key);
- }
-
/**
* Method provided for backwards compatibility. Duties previously done by
* this method is now handled by the state change event handler in
@@ -2474,17 +2521,6 @@ public class ApplicationConnection {
}
@Deprecated
- public void handleTooltipEvent(Event event, Widget owner) {
- handleTooltipEvent(event, getConnectorMap().getConnector(owner));
-
- }
-
- @Deprecated
- public void registerTooltip(Widget owner, Object key, TooltipInfo info) {
- registerTooltip(getConnectorMap().getConnector(owner), key, info);
- }
-
- @Deprecated
public boolean hasEventListeners(Widget widget, String eventIdentifier) {
return hasEventListeners(getConnectorMap().getConnector(widget),
eventIdentifier);
diff --git a/src/com/vaadin/terminal/gwt/client/BrowserInfo.java b/src/com/vaadin/terminal/gwt/client/BrowserInfo.java
index 82cf925ec1..32bb0b8eed 100644
--- a/src/com/vaadin/terminal/gwt/client/BrowserInfo.java
+++ b/src/com/vaadin/terminal/gwt/client/BrowserInfo.java
@@ -5,6 +5,7 @@
package com.vaadin.terminal.gwt.client;
import com.google.gwt.user.client.ui.RootPanel;
+import com.vaadin.shared.VBrowserDetails;
/**
* Class used to query information about web browser.
diff --git a/src/com/vaadin/terminal/gwt/client/ComponentConnector.java b/src/com/vaadin/terminal/gwt/client/ComponentConnector.java
index 4e6a690a3c..e57a188b47 100644
--- a/src/com/vaadin/terminal/gwt/client/ComponentConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ComponentConnector.java
@@ -4,7 +4,9 @@
package com.vaadin.terminal.gwt.client;
+import com.google.gwt.dom.client.Element;
import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.shared.ComponentState;
/**
* An interface used by client-side widgets or paintable parts to receive
@@ -21,6 +23,7 @@ public interface ComponentConnector extends ServerConnector {
*
* @see com.vaadin.terminal.gwt.client.VPaintable#getState()
*/
+ @Override
public ComponentState getState();
/**
@@ -104,4 +107,14 @@ public interface ComponentConnector extends ServerConnector {
*/
public void setWidgetEnabled(boolean widgetEnabled);
+ /**
+ * Gets the tooltip info for the given element.
+ *
+ * @param element
+ * The element to lookup a tooltip for
+ * @return The tooltip for the element or null if no tooltip is defined for
+ * this element.
+ */
+ public TooltipInfo getTooltipInfo(Element element);
+
}
diff --git a/src/com/vaadin/terminal/gwt/client/ComponentLocator.java b/src/com/vaadin/terminal/gwt/client/ComponentLocator.java
index 0e7a0c1d1c..8df9dc41b9 100644
--- a/src/com/vaadin/terminal/gwt/client/ComponentLocator.java
+++ b/src/com/vaadin/terminal/gwt/client/ComponentLocator.java
@@ -12,7 +12,9 @@ import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.Widget;
-import com.vaadin.terminal.gwt.client.communication.SharedState;
+import com.vaadin.shared.ComponentState;
+import com.vaadin.shared.Connector;
+import com.vaadin.shared.communication.SharedState;
import com.vaadin.terminal.gwt.client.ui.SubPartAware;
import com.vaadin.terminal.gwt.client.ui.VBoxLayout;
import com.vaadin.terminal.gwt.client.ui.gridlayout.VGridLayout;
diff --git a/src/com/vaadin/terminal/gwt/client/ConnectorMap.java b/src/com/vaadin/terminal/gwt/client/ConnectorMap.java
index efb50b5e00..8bc4a4aacf 100644
--- a/src/com/vaadin/terminal/gwt/client/ConnectorMap.java
+++ b/src/com/vaadin/terminal/gwt/client/ConnectorMap.java
@@ -200,49 +200,11 @@ public class ConnectorMap {
return idToConnector.size();
}
- /**
- * FIXME: Should be moved to VAbstractPaintableWidget
- *
- * @param paintable
- * @return
- */
- @Deprecated
- public TooltipInfo getTooltipInfo(ComponentConnector paintable, Object key) {
- ComponentDetail componentDetail = getComponentDetail(paintable);
- if (componentDetail == null) {
- return null;
- }
- return componentDetail.getTooltipInfo(key);
- }
-
- @Deprecated
- public TooltipInfo getWidgetTooltipInfo(Widget widget, Object key) {
- ComponentConnector connector = getConnector(widget);
- if (connector == null) {
- return null;
- }
- return getTooltipInfo(connector, key);
- }
-
public Collection<? extends ServerConnector> getConnectors() {
return Collections.unmodifiableCollection(idToConnector.values());
}
/**
- * FIXME: Should not be here
- *
- * @param componentConnector
- * @return
- */
- @Deprecated
- public void registerTooltip(ComponentConnector componentConnector,
- Object key, TooltipInfo tooltip) {
- getComponentDetail(componentConnector).putAdditionalTooltip(key,
- tooltip);
-
- }
-
- /**
* Tests if the widget is the root widget of a {@link ComponentConnector}.
*
* @param widget
diff --git a/src/com/vaadin/terminal/gwt/client/EventHelper.java b/src/com/vaadin/terminal/gwt/client/EventHelper.java
index 95f5125f1b..208768a0c1 100644
--- a/src/com/vaadin/terminal/gwt/client/EventHelper.java
+++ b/src/com/vaadin/terminal/gwt/client/EventHelper.java
@@ -3,8 +3,8 @@
*/
package com.vaadin.terminal.gwt.client;
-import static com.vaadin.terminal.gwt.client.EventId.BLUR;
-import static com.vaadin.terminal.gwt.client.EventId.FOCUS;
+import static com.vaadin.shared.EventId.BLUR;
+import static com.vaadin.shared.EventId.FOCUS;
import com.google.gwt.event.dom.client.BlurEvent;
import com.google.gwt.event.dom.client.BlurHandler;
diff --git a/src/com/vaadin/terminal/gwt/client/JavaScriptConnectorHelper.java b/src/com/vaadin/terminal/gwt/client/JavaScriptConnectorHelper.java
index bd62a759cb..69b8e00603 100644
--- a/src/com/vaadin/terminal/gwt/client/JavaScriptConnectorHelper.java
+++ b/src/com/vaadin/terminal/gwt/client/JavaScriptConnectorHelper.java
@@ -15,18 +15,13 @@ import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.core.client.JsArray;
import com.google.gwt.json.client.JSONArray;
import com.google.gwt.user.client.Element;
-import com.vaadin.terminal.gwt.client.communication.MethodInvocation;
+import com.vaadin.shared.JavaScriptConnectorState;
+import com.vaadin.shared.communication.MethodInvocation;
import com.vaadin.terminal.gwt.client.communication.StateChangeEvent;
import com.vaadin.terminal.gwt.client.communication.StateChangeEvent.StateChangeHandler;
public class JavaScriptConnectorHelper {
- public interface JavaScriptConnectorState {
- public Set<String> getCallbackNames();
-
- public Map<String, Set<String>> getRpcInterfaces();
- }
-
private final ServerConnector connector;
private final JavaScriptObject nativeState = JavaScriptObject
.createObject();
@@ -49,6 +44,7 @@ public class JavaScriptConnectorHelper {
public void init() {
connector.addStateChangeHandler(new StateChangeHandler() {
+ @Override
public void onStateChanged(StateChangeEvent stateChangeEvent) {
JavaScriptObject wrapper = getConnectorWrapper();
JavaScriptConnectorState state = getConnectorState();
@@ -149,8 +145,9 @@ public class JavaScriptConnectorHelper {
private JavaScriptObject getConnectorWrapper() {
if (connectorWrapper == null) {
- connectorWrapper = createConnectorWrapper(this, nativeState,
- rpcMap, connector.getConnectorId(), rpcObjects);
+ connectorWrapper = createConnectorWrapper(this,
+ connector.getConnection(), nativeState, rpcMap,
+ connector.getConnectorId(), rpcObjects);
}
return connectorWrapper;
@@ -165,9 +162,9 @@ public class JavaScriptConnectorHelper {
}-*/;
private static native JavaScriptObject createConnectorWrapper(
- JavaScriptConnectorHelper h, JavaScriptObject nativeState,
- JavaScriptObject registeredRpc, String connectorId,
- Map<String, JavaScriptObject> rpcObjects)
+ JavaScriptConnectorHelper h, ApplicationConnection c,
+ JavaScriptObject nativeState, JavaScriptObject registeredRpc,
+ String connectorId, Map<String, JavaScriptObject> rpcObjects)
/*-{
return {
'getConnectorId': function() {
@@ -185,7 +182,7 @@ public class JavaScriptConnectorHelper {
}
return rpcObjects.@java.util.Map::get(Ljava/lang/Object;)(iface);
}),
- 'getWidgetElement': $entry(function(connectorId) {
+ 'getElement': $entry(function(connectorId) {
return h.@com.vaadin.terminal.gwt.client.JavaScriptConnectorHelper::getWidgetElement(Ljava/lang/String;)(connectorId);
}),
'registerRpc': function(iface, rpcHandler) {
@@ -199,6 +196,9 @@ public class JavaScriptConnectorHelper {
}
registeredRpc[iface].push(rpcHandler);
},
+ 'translateVaadinUri': $entry(function(uri) {
+ return c.@com.vaadin.terminal.gwt.client.ApplicationConnection::translateVaadinUri(Ljava/lang/String;)(uri);
+ }),
};
}-*/;
@@ -238,8 +238,8 @@ public class JavaScriptConnectorHelper {
return connector;
}
- return ConnectorMap.get(connector.getConnection())
- .getConnector(connectorId);
+ return ConnectorMap.get(connector.getConnection()).getConnector(
+ connectorId);
}
private void fireRpc(String iface, String method,
@@ -331,9 +331,9 @@ public class JavaScriptConnectorHelper {
invokeCallback(getConnectorWrapper(), callbackName, arguments);
} else {
JavaScriptObject arguments = parametersJson.getJavaScriptObject();
- invokeJsRpc(rpcMap, iface, method, arguments);
+ invokeJsRpc(rpcMap, iface, method, arguments, getConnectorWrapper());
// Also invoke wildcard interface
- invokeJsRpc(rpcMap, "", method, arguments);
+ invokeJsRpc(rpcMap, "", method, arguments, getConnectorWrapper());
}
}
@@ -344,7 +344,8 @@ public class JavaScriptConnectorHelper {
}-*/;
private static native void invokeJsRpc(JavaScriptObject rpcMap,
- String interfaceName, String methodName, JavaScriptObject parameters)
+ String interfaceName, String methodName,
+ JavaScriptObject parameters, JavaScriptObject connector)
/*-{
var targets = rpcMap[interfaceName];
if (!targets) {
@@ -352,7 +353,7 @@ public class JavaScriptConnectorHelper {
}
for(var i = 0; i < targets.length; i++) {
var target = targets[i];
- target[methodName].apply(target, parameters);
+ target[methodName].apply(connector, parameters);
}
}-*/;
diff --git a/src/com/vaadin/terminal/gwt/client/JavaScriptExtension.java b/src/com/vaadin/terminal/gwt/client/JavaScriptExtension.java
index 2a97e4a770..a2170b9ab9 100644
--- a/src/com/vaadin/terminal/gwt/client/JavaScriptExtension.java
+++ b/src/com/vaadin/terminal/gwt/client/JavaScriptExtension.java
@@ -4,10 +4,11 @@
package com.vaadin.terminal.gwt.client;
+import com.vaadin.shared.JavaScriptExtensionState;
+import com.vaadin.shared.ui.Connect;
import com.vaadin.terminal.AbstractJavaScriptExtension;
import com.vaadin.terminal.gwt.client.communication.HasJavaScriptConnectorHelper;
import com.vaadin.terminal.gwt.client.extensions.AbstractExtensionConnector;
-import com.vaadin.terminal.gwt.client.ui.Connect;
@Connect(AbstractJavaScriptExtension.class)
public final class JavaScriptExtension extends AbstractExtensionConnector
@@ -21,6 +22,7 @@ public final class JavaScriptExtension extends AbstractExtensionConnector
helper.init();
}
+ @Override
public JavaScriptConnectorHelper getJavascriptConnectorHelper() {
return helper;
}
diff --git a/src/com/vaadin/terminal/gwt/client/MouseEventDetailsBuilder.java b/src/com/vaadin/terminal/gwt/client/MouseEventDetailsBuilder.java
index 58dd488351..d39f98a024 100644
--- a/src/com/vaadin/terminal/gwt/client/MouseEventDetailsBuilder.java
+++ b/src/com/vaadin/terminal/gwt/client/MouseEventDetailsBuilder.java
@@ -6,6 +6,7 @@ package com.vaadin.terminal.gwt.client;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.user.client.Event;
+import com.vaadin.shared.MouseEventDetails;
/**
* Helper class for constructing a MouseEventDetails object from a
diff --git a/src/com/vaadin/terminal/gwt/client/NullConsole.java b/src/com/vaadin/terminal/gwt/client/NullConsole.java
index 2d15ffd46c..7db513ca82 100644
--- a/src/com/vaadin/terminal/gwt/client/NullConsole.java
+++ b/src/com/vaadin/terminal/gwt/client/NullConsole.java
@@ -15,39 +15,48 @@ import com.google.gwt.core.client.GWT;
*/
public class NullConsole implements Console {
+ @Override
public void dirUIDL(ValueMap u, ApplicationConfiguration cnf) {
}
+ @Override
public void error(String msg) {
GWT.log(msg);
}
+ @Override
public void log(String msg) {
GWT.log(msg);
}
+ @Override
public void printObject(Object msg) {
GWT.log(msg.toString());
}
+ @Override
public void printLayoutProblems(ValueMap meta,
ApplicationConnection applicationConnection,
Set<ComponentConnector> zeroHeightComponents,
Set<ComponentConnector> zeroWidthComponents) {
}
+ @Override
public void log(Throwable e) {
GWT.log(e.getMessage(), e);
}
+ @Override
public void error(Throwable e) {
// Borrow exception handling from VDebugConsole
VDebugConsole.handleError(e, this);
}
+ @Override
public void setQuietMode(boolean quietDebugMode) {
}
+ @Override
public void init() {
}
diff --git a/src/com/vaadin/terminal/gwt/client/ResourceLoader.java b/src/com/vaadin/terminal/gwt/client/ResourceLoader.java
new file mode 100644
index 0000000000..21577ce87e
--- /dev/null
+++ b/src/com/vaadin/terminal/gwt/client/ResourceLoader.java
@@ -0,0 +1,540 @@
+/*
+@VaadinApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.terminal.gwt.client;
+
+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.Duration;
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.client.Scheduler;
+import com.google.gwt.core.client.Scheduler.RepeatingCommand;
+import com.google.gwt.dom.client.AnchorElement;
+import com.google.gwt.dom.client.Document;
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.dom.client.LinkElement;
+import com.google.gwt.dom.client.NodeList;
+import com.google.gwt.dom.client.ObjectElement;
+import com.google.gwt.dom.client.ScriptElement;
+import com.google.gwt.user.client.Timer;
+
+/**
+ * ResourceLoader lets you dynamically include external scripts and styles on
+ * the page and lets you know when the resource has been loaded.
+ *
+ * You can also preload resources, allowing them to get cached by the browser
+ * without being evaluated. This enables downloading multiple resources at once
+ * while still controlling in which order e.g. scripts are executed.
+ *
+ * @author Vaadin Ltd
+ * @version @VERSION@
+ * @since 7.0.0
+ */
+public class ResourceLoader {
+ /**
+ * Event fired when a resource has been loaded.
+ */
+ public static class ResourceLoadEvent {
+ private ResourceLoader loader;
+ private String resourceUrl;
+ private final boolean preload;
+
+ /**
+ * Creates a new event.
+ *
+ * @param loader
+ * the resource loader that has loaded the resource
+ * @param resourceUrl
+ * the url of the loaded resource
+ * @param preload
+ * true if the resource has only been preloaded, false if
+ * it's fully loaded
+ */
+ public ResourceLoadEvent(ResourceLoader loader, String resourceUrl,
+ boolean preload) {
+ this.loader = loader;
+ this.resourceUrl = resourceUrl;
+ this.preload = preload;
+ }
+
+ /**
+ * Gets the resource loader that has fired this event
+ *
+ * @return the resource loader
+ */
+ public ResourceLoader getResourceLoader() {
+ return loader;
+ }
+
+ /**
+ * Gets the absolute url of the loaded resource.
+ *
+ * @return the absolute url of the loaded resource
+ */
+ public String getResourceUrl() {
+ return resourceUrl;
+ }
+
+ /**
+ * Returns true if the resource has been preloaded, false if it's fully
+ * loaded
+ *
+ * @see ResourceLoader#preloadResource(String, ResourceLoadListener)
+ *
+ * @return true if the resource has been preloaded, false if it's fully
+ * loaded
+ */
+ public boolean isPreload() {
+ return preload;
+ }
+ }
+
+ /**
+ * Event listener that gets notified when a resource has been loaded
+ */
+ public interface ResourceLoadListener {
+ /**
+ * Notifies this ResourceLoadListener that a resource has been loaded.
+ * Some browsers do not support any way of detecting load errors. In
+ * these cases, onLoad will be called regardless of the status.
+ *
+ * @see ResourceLoadEvent
+ *
+ * @param event
+ * a resource load event with information about the loaded
+ * resource
+ */
+ public void onLoad(ResourceLoadEvent event);
+
+ /**
+ * Notifies this ResourceLoadListener that a resource could not be
+ * loaded, e.g. because the file could not be found or because the
+ * server did not respond. Some browsers do not support any way of
+ * detecting load errors. In these cases, onLoad will be called
+ * regardless of the status.
+ *
+ * @see ResourceLoadEvent
+ *
+ * @param event
+ * a resource load event with information about the resource
+ * that could not be loaded.
+ */
+ public void onError(ResourceLoadEvent event);
+ }
+
+ private static final ResourceLoader INSTANCE = GWT
+ .create(ResourceLoader.class);
+
+ private ApplicationConnection connection;
+
+ private final Set<String> loadedResources = new HashSet<String>();
+ private final Set<String> preloadedResources = new HashSet<String>();
+
+ private final Map<String, Collection<ResourceLoadListener>> loadListeners = new HashMap<String, Collection<ResourceLoadListener>>();
+ private final Map<String, Collection<ResourceLoadListener>> preloadListeners = new HashMap<String, Collection<ResourceLoadListener>>();
+
+ private final Element head;
+
+ /**
+ * Creates a new resource loader. You should generally not create you own
+ * resource loader, but instead use {@link ResourceLoader#get()} to get an
+ * instance.
+ */
+ protected ResourceLoader() {
+ Document document = Document.get();
+ head = document.getElementsByTagName("head").getItem(0);
+
+ // detect already loaded scripts and stylesheets
+ NodeList<Element> scripts = document.getElementsByTagName("script");
+ for (int i = 0; i < scripts.getLength(); i++) {
+ ScriptElement element = ScriptElement.as(scripts.getItem(i));
+ String src = element.getSrc();
+ if (src != null && src.length() != 0) {
+ loadedResources.add(src);
+ }
+ }
+
+ NodeList<Element> links = document.getElementsByTagName("link");
+ for (int i = 0; i < links.getLength(); i++) {
+ LinkElement linkElement = LinkElement.as(links.getItem(i));
+ String rel = linkElement.getRel();
+ String href = linkElement.getHref();
+ if ("stylesheet".equalsIgnoreCase(rel) && href != null
+ && href.length() != 0) {
+ loadedResources.add(href);
+ }
+ }
+ }
+
+ /**
+ * Returns the default ResourceLoader
+ *
+ * @return the default ResourceLoader
+ */
+ public static ResourceLoader get() {
+ return INSTANCE;
+ }
+
+ /**
+ * Load a script and notify a listener when the script is loaded. Calling
+ * this method when the script is currently loading or already loaded
+ * doesn't cause the script to be loaded again, but the listener will still
+ * be notified when appropriate.
+ *
+ *
+ * @param scriptUrl
+ * the url of the script to load
+ * @param resourceLoadListener
+ * the listener that will get notified when the script is loaded
+ */
+ public void loadScript(final String scriptUrl,
+ final ResourceLoadListener resourceLoadListener) {
+ final String url = getAbsoluteUrl(scriptUrl);
+ ResourceLoadEvent event = new ResourceLoadEvent(this, url, false);
+ if (loadedResources.contains(url)) {
+ if (resourceLoadListener != null) {
+ resourceLoadListener.onLoad(event);
+ }
+ return;
+ }
+
+ if (preloadListeners.containsKey(url)) {
+ // Preload going on, continue when preloaded
+ preloadResource(url, new ResourceLoadListener() {
+ @Override
+ public void onLoad(ResourceLoadEvent event) {
+ loadScript(url, resourceLoadListener);
+ }
+
+ @Override
+ public void onError(ResourceLoadEvent event) {
+ // Preload failed -> signal error to own listener
+ if (resourceLoadListener != null) {
+ resourceLoadListener.onError(event);
+ }
+ }
+ });
+ return;
+ }
+
+ if (addListener(url, resourceLoadListener, loadListeners)) {
+ ScriptElement scriptTag = Document.get().createScriptElement();
+ scriptTag.setSrc(url);
+ scriptTag.setType("text/javascript");
+ addOnloadHandler(scriptTag, new ResourceLoadListener() {
+ @Override
+ public void onLoad(ResourceLoadEvent event) {
+ fireLoad(event);
+ }
+
+ @Override
+ public void onError(ResourceLoadEvent event) {
+ fireError(event);
+ }
+ }, event);
+ head.appendChild(scriptTag);
+ }
+ }
+
+ private static String getAbsoluteUrl(String url) {
+ AnchorElement a = Document.get().createAnchorElement();
+ a.setHref(url);
+ return a.getHref();
+ }
+
+ /**
+ * Download a resource and notify a listener when the resource is loaded
+ * without attempting to interpret the resource. When a resource has been
+ * preloaded, it will be present in the browser's cache (provided the HTTP
+ * headers allow caching), making a subsequent load operation complete
+ * without having to wait for the resource to be downloaded again.
+ *
+ * Calling this method when the resource is currently loading, currently
+ * preloading, already preloaded or already loaded doesn't cause the
+ * resource to be preloaded again, but the listener will still be notified
+ * when appropriate.
+ *
+ * @param url
+ * the url of the resource to preload
+ * @param resourceLoadListener
+ * the listener that will get notified when the resource is
+ * preloaded
+ */
+ public void preloadResource(String url,
+ ResourceLoadListener resourceLoadListener) {
+ url = getAbsoluteUrl(url);
+ ResourceLoadEvent event = new ResourceLoadEvent(this, url, true);
+ if (loadedResources.contains(url) || preloadedResources.contains(url)) {
+ // Already loaded or preloaded -> just fire listener
+ if (resourceLoadListener != null) {
+ resourceLoadListener.onLoad(event);
+ }
+ return;
+ }
+
+ if (addListener(url, resourceLoadListener, preloadListeners)
+ && !loadListeners.containsKey(url)) {
+ // Inject loader element if this is the first time this is preloaded
+ // AND the resources isn't already being loaded in the normal way
+
+ Element element = getPreloadElement(url);
+ addOnloadHandler(element, new ResourceLoadListener() {
+ @Override
+ public void onLoad(ResourceLoadEvent event) {
+ fireLoad(event);
+ }
+
+ @Override
+ public void onError(ResourceLoadEvent event) {
+ fireError(event);
+ }
+ }, event);
+
+ // TODO Remove object when loaded (without causing spinner in FF)
+ Document.get().getBody().appendChild(element);
+ }
+ }
+
+ private static Element getPreloadElement(String url) {
+ if (BrowserInfo.get().isIE()) {
+ ScriptElement element = Document.get().createScriptElement();
+ element.setSrc(url);
+ element.setType("text/cache");
+ return element;
+ } else {
+ ObjectElement element = Document.get().createObjectElement();
+ element.setData(url);
+ element.setType("text/plain");
+ element.setHeight("0px");
+ element.setWidth("0px");
+ return element;
+ }
+ }
+
+ private native void addOnloadHandler(Element element,
+ ResourceLoadListener listener, ResourceLoadEvent event)
+ /*-{
+ element.onload = $entry(function() {
+ element.onload = null;
+ element.onerror = null;
+ element.onreadystatechange = null;
+ listener.@com.vaadin.terminal.gwt.client.ResourceLoader.ResourceLoadListener::onLoad(Lcom/vaadin/terminal/gwt/client/ResourceLoader$ResourceLoadEvent;)(event);
+ });
+ element.onerror = $entry(function() {
+ element.onload = null;
+ element.onerror = null;
+ element.onreadystatechange = null;
+ listener.@com.vaadin.terminal.gwt.client.ResourceLoader.ResourceLoadListener::onError(Lcom/vaadin/terminal/gwt/client/ResourceLoader$ResourceLoadEvent;)(event);
+ });
+ element.onreadystatechange = function() {
+ if ("loaded" === element.readyState || "complete" === element.readyState ) {
+ element.onload(arguments[0]);
+ }
+ };
+ }-*/;
+
+ /**
+ * Load a stylesheet and notify a listener when the stylesheet is loaded.
+ * Calling this method when the stylesheet is currently loading or already
+ * loaded doesn't cause the stylesheet to be loaded again, but the listener
+ * will still be notified when appropriate.
+ *
+ * @param stylesheetUrl
+ * the url of the stylesheet to load
+ * @param resourceLoadListener
+ * the listener that will get notified when the stylesheet is
+ * loaded
+ */
+ public void loadStylesheet(final String stylesheetUrl,
+ final ResourceLoadListener resourceLoadListener) {
+ final String url = getAbsoluteUrl(stylesheetUrl);
+ final ResourceLoadEvent event = new ResourceLoadEvent(this, url, false);
+ if (loadedResources.contains(url)) {
+ if (resourceLoadListener != null) {
+ resourceLoadListener.onLoad(event);
+ }
+ return;
+ }
+
+ if (preloadListeners.containsKey(url)) {
+ // Preload going on, continue when preloaded
+ preloadResource(url, new ResourceLoadListener() {
+ @Override
+ public void onLoad(ResourceLoadEvent event) {
+ loadStylesheet(url, resourceLoadListener);
+ }
+
+ @Override
+ public void onError(ResourceLoadEvent event) {
+ // Preload failed -> signal error to own listener
+ if (resourceLoadListener != null) {
+ resourceLoadListener.onError(event);
+ }
+ }
+ });
+ return;
+ }
+
+ if (addListener(url, resourceLoadListener, loadListeners)) {
+ LinkElement linkElement = Document.get().createLinkElement();
+ linkElement.setRel("stylesheet");
+ linkElement.setType("text/css");
+ linkElement.setHref(url);
+
+ if (BrowserInfo.get().isSafari()) {
+ // Safari doesn't fire any events for link elements
+ // See http://www.phpied.com/when-is-a-stylesheet-really-loaded/
+ Scheduler.get().scheduleFixedPeriod(new RepeatingCommand() {
+ private final Duration duration = new Duration();
+
+ @Override
+ public boolean execute() {
+ int styleSheetLength = getStyleSheetLength(url);
+ if (getStyleSheetLength(url) > 0) {
+ fireLoad(event);
+ return false; // Stop repeating
+ } else if (styleSheetLength == 0) {
+ // "Loaded" empty sheet -> most likely 404 error
+ fireError(event);
+ return true;
+ } else if (duration.elapsedMillis() > 60 * 1000) {
+ fireError(event);
+ return false;
+ } else {
+ return true; // Continue repeating
+ }
+ }
+ }, 10);
+ } else {
+ addOnloadHandler(linkElement, new ResourceLoadListener() {
+ @Override
+ public void onLoad(ResourceLoadEvent event) {
+ // Chrome && IE fires load for errors, must check
+ // stylesheet data
+ if (BrowserInfo.get().isChrome()
+ || BrowserInfo.get().isIE()) {
+ int styleSheetLength = getStyleSheetLength(url);
+ // Error if there's an empty stylesheet
+ if (styleSheetLength == 0) {
+ fireError(event);
+ return;
+ }
+ }
+ fireLoad(event);
+ }
+
+ @Override
+ public void onError(ResourceLoadEvent event) {
+ fireError(event);
+ }
+ }, event);
+ if (BrowserInfo.get().isOpera()) {
+ // Opera onerror never fired, assume error if no onload in x
+ // seconds
+ new Timer() {
+ @Override
+ public void run() {
+ if (!loadedResources.contains(url)) {
+ fireError(event);
+ }
+ }
+ }.schedule(5 * 1000);
+ }
+ }
+
+ head.appendChild(linkElement);
+ }
+ }
+
+ private static native int getStyleSheetLength(String url)
+ /*-{
+ for(var i = 0; i < $doc.styleSheets.length; i++) {
+ if ($doc.styleSheets[i].href === url) {
+ var sheet = $doc.styleSheets[i];
+ try {
+ var rules = sheet.cssRules
+ if (rules === undefined) {
+ rules = sheet.rules;
+ }
+
+ if (rules === null) {
+ // Style sheet loaded, but can't access length because of XSS -> assume there's something there
+ return 1;
+ }
+
+ // Return length so we can distinguish 0 (probably 404 error) from normal case.
+ return rules.length;
+ } catch (err) {
+ return 1;
+ }
+ }
+ }
+ // No matching stylesheet found -> not yet loaded
+ return -1;
+ }-*/;
+
+ private static boolean addListener(String url,
+ ResourceLoadListener listener,
+ Map<String, Collection<ResourceLoadListener>> listenerMap) {
+ Collection<ResourceLoadListener> listeners = listenerMap.get(url);
+ if (listeners == null) {
+ listeners = new HashSet<ResourceLoader.ResourceLoadListener>();
+ listeners.add(listener);
+ listenerMap.put(url, listeners);
+ return true;
+ } else {
+ listeners.add(listener);
+ return false;
+ }
+ }
+
+ private void fireError(ResourceLoadEvent event) {
+ String resource = event.getResourceUrl();
+
+ Collection<ResourceLoadListener> listeners;
+ if (event.isPreload()) {
+ // Also fire error for load listeners
+ fireError(new ResourceLoadEvent(this, resource, false));
+ listeners = preloadListeners.remove(resource);
+ } else {
+ listeners = loadListeners.remove(resource);
+ }
+ if (listeners != null && !listeners.isEmpty()) {
+ for (ResourceLoadListener listener : listeners) {
+ if (listener != null) {
+ listener.onError(event);
+ }
+ }
+ }
+ }
+
+ private void fireLoad(ResourceLoadEvent event) {
+ String resource = event.getResourceUrl();
+ Collection<ResourceLoadListener> listeners;
+ if (event.isPreload()) {
+ preloadedResources.add(resource);
+ listeners = preloadListeners.remove(resource);
+ } else {
+ if (preloadListeners.containsKey(resource)) {
+ // Also fire preload events for potential listeners
+ fireLoad(new ResourceLoadEvent(this, resource, true));
+ }
+ preloadedResources.remove(resource);
+ loadedResources.add(resource);
+ listeners = loadListeners.remove(resource);
+ }
+ if (listeners != null && !listeners.isEmpty()) {
+ for (ResourceLoadListener listener : listeners) {
+ if (listener != null) {
+ listener.onLoad(event);
+ }
+ }
+ }
+ }
+
+}
diff --git a/src/com/vaadin/terminal/gwt/client/ServerConnector.java b/src/com/vaadin/terminal/gwt/client/ServerConnector.java
index fcf5100c8e..a0f08b92b9 100644
--- a/src/com/vaadin/terminal/gwt/client/ServerConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ServerConnector.java
@@ -8,7 +8,8 @@ import java.util.List;
import com.google.gwt.event.shared.GwtEvent;
import com.google.web.bindery.event.shared.HandlerRegistration;
-import com.vaadin.terminal.gwt.client.communication.ClientRpc;
+import com.vaadin.shared.Connector;
+import com.vaadin.shared.communication.ClientRpc;
import com.vaadin.terminal.gwt.client.communication.StateChangeEvent.StateChangeHandler;
/**
@@ -102,6 +103,7 @@ public interface ServerConnector extends Connector {
* @return The parent of this connector, as set by
* {@link #setParent(ServerConnector)}.
*/
+ @Override
public ServerConnector getParent();
/**
diff --git a/src/com/vaadin/terminal/gwt/client/SimpleTree.java b/src/com/vaadin/terminal/gwt/client/SimpleTree.java
index 350e0d707d..506d990aac 100644
--- a/src/com/vaadin/terminal/gwt/client/SimpleTree.java
+++ b/src/com/vaadin/terminal/gwt/client/SimpleTree.java
@@ -49,6 +49,7 @@ public class SimpleTree extends ComplexPanel {
getElement().appendChild(children);
addDomHandler(new ClickHandler() {
+ @Override
public void onClick(ClickEvent event) {
if (event.getNativeEvent().getEventTarget().cast() == handle) {
if (children.getStyle().getDisplay().intern() == Display.NONE
diff --git a/src/com/vaadin/terminal/gwt/client/SuperDevMode.java b/src/com/vaadin/terminal/gwt/client/SuperDevMode.java
new file mode 100644
index 0000000000..e435b3c6ed
--- /dev/null
+++ b/src/com/vaadin/terminal/gwt/client/SuperDevMode.java
@@ -0,0 +1,253 @@
+/*
+@VaadinApache2LicenseForJavaFiles@
+ */
+package com.vaadin.terminal.gwt.client;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.client.JavaScriptObject;
+import com.google.gwt.http.client.UrlBuilder;
+import com.google.gwt.jsonp.client.JsonpRequestBuilder;
+import com.google.gwt.storage.client.Storage;
+import com.google.gwt.user.client.Window.Location;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.vaadin.terminal.gwt.client.ui.notification.VNotification;
+import com.vaadin.terminal.gwt.client.ui.notification.VNotification.EventListener;
+import com.vaadin.terminal.gwt.client.ui.notification.VNotification.HideEvent;
+
+/**
+ * Class that enables SuperDevMode using a ?superdevmode parameter in the url.
+ *
+ * @author Vaadin Ltd
+ * @version @VERSION@
+ * @since 7.0
+ *
+ */
+public class SuperDevMode {
+
+ private static final int COMPILE_TIMEOUT_IN_SECONDS = 60;
+ protected static final String SKIP_RECOMPILE = "VaadinSuperDevMode_skip_recompile";
+
+ public static class RecompileResult extends JavaScriptObject {
+ protected RecompileResult() {
+
+ }
+
+ public final native boolean ok()
+ /*-{
+ return this.status == "ok";
+ }-*/;
+ }
+
+ private static void recompileWidgetsetAndStartInDevMode(
+ final String serverUrl) {
+ VConsole.log("Recompiling widgetset using<br/>" + serverUrl
+ + "<br/>and then reloading in super dev mode");
+ VNotification n = new VNotification();
+ n.show("<b>Recompiling widgetset, this should not take too long</b>",
+ VNotification.CENTERED, VNotification.STYLE_SYSTEM);
+
+ JsonpRequestBuilder b = new JsonpRequestBuilder();
+ b.setCallbackParam("_callback");
+ b.setTimeout(COMPILE_TIMEOUT_IN_SECONDS * 1000);
+ b.requestObject(serverUrl + "recompile/" + GWT.getModuleName() + "?"
+ + getRecompileParameters(GWT.getModuleName()),
+ new AsyncCallback<RecompileResult>() {
+
+ @Override
+ public void onSuccess(RecompileResult result) {
+ VConsole.log("JSONP compile call successful");
+
+ if (!result.ok()) {
+ VConsole.log("* result: " + result);
+ failed();
+ return;
+ }
+
+ setSession(
+ getSuperDevModeHookKey(),
+ getSuperDevWidgetSetUrl(GWT.getModuleName(),
+ serverUrl));
+ setSession(SKIP_RECOMPILE, "1");
+
+ VConsole.log("* result: OK. Reloading");
+ Location.reload();
+ }
+
+ @Override
+ public void onFailure(Throwable caught) {
+ VConsole.error("JSONP compile call failed");
+ // Don't log exception as they are shown as
+ // notifications
+ VConsole.error(Util.getSimpleName(caught) + ": "
+ + caught.getMessage());
+ failed();
+
+ }
+
+ private void failed() {
+ VNotification n = new VNotification();
+ n.addEventListener(new EventListener() {
+
+ @Override
+ public void notificationHidden(HideEvent event) {
+ recompileWidgetsetAndStartInDevMode(serverUrl);
+ }
+ });
+ n.show("Recompilation failed.<br/>"
+ + "Make sure CodeServer is running, "
+ + "check its output and click to retry",
+ VNotification.CENTERED,
+ VNotification.STYLE_SYSTEM);
+ }
+ });
+
+ }
+
+ protected static String getSuperDevWidgetSetUrl(String widgetsetName,
+ String serverUrl) {
+ return serverUrl + GWT.getModuleName() + "/" + GWT.getModuleName()
+ + ".nocache.js";
+ }
+
+ private native static String getRecompileParameters(String moduleName)
+ /*-{
+ var prop_map = $wnd.__gwt_activeModules[moduleName].bindings();
+
+ // convert map to URL parameter string
+ var props = [];
+ for (var key in prop_map) {
+ props.push(encodeURIComponent(key) + '=' + encodeURIComponent(prop_map[key]))
+ }
+
+ return props.join('&') + '&';
+ }-*/;
+
+ private static void setSession(String key, String value) {
+ Storage.getSessionStorageIfSupported().setItem(key, value);
+ }
+
+ private static String getSession(String key) {
+ return Storage.getSessionStorageIfSupported().getItem(key);
+ }
+
+ private static void removeSession(String key) {
+ Storage.getSessionStorageIfSupported().removeItem(key);
+ }
+
+ protected static void disableDevModeAndReload() {
+ removeSession(getSuperDevModeHookKey());
+ redirect(false);
+ }
+
+ protected static void redirect(boolean devModeOn) {
+ UrlBuilder createUrlBuilder = Location.createUrlBuilder();
+ if (!devModeOn) {
+ createUrlBuilder.removeParameter("superdevmode");
+ } else {
+ createUrlBuilder.setParameter("superdevmode", "");
+ }
+
+ Location.assign(createUrlBuilder.buildString());
+
+ }
+
+ private static String getSuperDevModeHookKey() {
+ String widgetsetName = GWT.getModuleName();
+ final String superDevModeKey = "__gwtDevModeHook:" + widgetsetName;
+ return superDevModeKey;
+ }
+
+ private static boolean hasSession(String key) {
+ return getSession(key) != null;
+ }
+
+ /**
+ * The URL of the code server. The default URL (http://localhost:9876/) will
+ * be used if this is empty or null.
+ *
+ * @param serverUrl
+ * The url of the code server or null to use the default
+ * @return true if recompile started, false if we are running in
+ * SuperDevMode
+ */
+ protected static boolean recompileIfNeeded(String serverUrl) {
+ if (serverUrl == null || "".equals(serverUrl)) {
+ serverUrl = "http://localhost:9876/";
+ } else {
+ serverUrl = "http://" + serverUrl + "/";
+ }
+
+ if (hasSession(SKIP_RECOMPILE)) {
+ VConsole.log("Running in SuperDevMode");
+ // When we get here, we are running in super dev mode
+
+ // Remove the flag so next reload will recompile
+ removeSession(SKIP_RECOMPILE);
+
+ // Remove the gwt flag so we will not end up in dev mode if we
+ // remove the url parameter manually
+ removeSession(getSuperDevModeHookKey());
+
+ return false;
+ }
+
+ recompileWidgetsetAndStartInDevMode(serverUrl);
+ return true;
+ }
+
+ protected static boolean isSuperDevModeEnabledInModule() {
+ String moduleName = GWT.getModuleName();
+ return isSuperDevModeEnabledInModule(moduleName);
+ }
+
+ protected native static boolean isSuperDevModeEnabledInModule(
+ String moduleName)
+ /*-{
+ if (!$wnd.__gwt_activeModules)
+ return false;
+ var mod = $wnd.__gwt_activeModules[moduleName];
+ if (!mod)
+ return false;
+
+ if (mod.superdevmode) {
+ // Running in super dev mode already, it is supported
+ return true;
+ }
+
+ return !!mod.canRedirect;
+ }-*/;
+
+ /**
+ * Enables SuperDevMode if the url contains the "superdevmode" parameter.
+ * <p>
+ * The caller should not continue initialization of the application if this
+ * method returns true. The application will be restarted once compilation
+ * is done and then this method will return false.
+ * </p>
+ *
+ * @return true if a recompile operation has started and the page will be
+ * reloaded once it is done, false if no recompilation will be done.
+ */
+ public static boolean enableBasedOnParameter() {
+ String superDevModeParameter = Location.getParameter("superdevmode");
+ if (superDevModeParameter != null) {
+ // Need to check the recompile flag also because if we are running
+ // in super dev mode, as a result of the recompile, the enabled
+ // check will fail...
+ if (!isSuperDevModeEnabledInModule()) {
+ showError("SuperDevMode is not enabled for this module/widgetset.<br/>"
+ + "Ensure that your module definition (.gwt.xml) contains <br/>"
+ + "&lt;add-linker name=&quot;xsiframe&quot;/&gt;<br/>"
+ + "&lt;set-configuration-property name=&quot;devModeRedirectEnabled&quot; value=&quot;true&quot; /&gt;<br/>");
+ return false;
+ }
+ return SuperDevMode.recompileIfNeeded(superDevModeParameter);
+ }
+ return false;
+ }
+
+ private static void showError(String message) {
+ VNotification n = new VNotification();
+ n.show(message, VNotification.CENTERED_TOP, VNotification.STYLE_SYSTEM);
+ }
+}
diff --git a/src/com/vaadin/terminal/gwt/client/TooltipInfo.java b/src/com/vaadin/terminal/gwt/client/TooltipInfo.java
index fb33a56c56..712d263695 100644
--- a/src/com/vaadin/terminal/gwt/client/TooltipInfo.java
+++ b/src/com/vaadin/terminal/gwt/client/TooltipInfo.java
@@ -16,6 +16,11 @@ public class TooltipInfo {
setTitle(tooltip);
}
+ public TooltipInfo(String tooltip, String errorMessage) {
+ setTitle(tooltip);
+ setErrorMessage(errorMessage);
+ }
+
public String getTitle() {
return title;
}
@@ -32,4 +37,18 @@ public class TooltipInfo {
errorMessageHtml = errorMessage;
}
+ /**
+ * Checks is a message has been defined for the tooltip.
+ *
+ * @return true if title or error message is present, false if both are
+ * empty
+ */
+ public boolean hasMessage() {
+ return (title != null && !title.isEmpty())
+ || (errorMessageHtml != null && !errorMessageHtml.isEmpty());
+ }
+
+ public boolean equals(TooltipInfo other) {
+ return (other != null && other.title == title && other.errorMessageHtml == errorMessageHtml);
+ }
}
diff --git a/src/com/vaadin/terminal/gwt/client/UIDL.java b/src/com/vaadin/terminal/gwt/client/UIDL.java
index a523016b60..e662e08b3f 100644
--- a/src/com/vaadin/terminal/gwt/client/UIDL.java
+++ b/src/com/vaadin/terminal/gwt/client/UIDL.java
@@ -283,10 +283,12 @@ public final class UIDL extends JavaScriptObject {
int index = -1;
+ @Override
public void remove() {
throw new UnsupportedOperationException();
}
+ @Override
public Object next() {
if (hasNext()) {
@@ -308,6 +310,7 @@ public final class UIDL extends JavaScriptObject {
return null;
}
+ @Override
public boolean hasNext() {
int count = getChildCount();
return count > index + 1;
diff --git a/src/com/vaadin/terminal/gwt/client/Util.java b/src/com/vaadin/terminal/gwt/client/Util.java
index d3cb54160d..a27c77fa45 100644
--- a/src/com/vaadin/terminal/gwt/client/Util.java
+++ b/src/com/vaadin/terminal/gwt/client/Util.java
@@ -27,8 +27,10 @@ import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.shared.ComponentState;
+import com.vaadin.shared.communication.MethodInvocation;
import com.vaadin.terminal.gwt.client.RenderInformation.FloatSize;
-import com.vaadin.terminal.gwt.client.communication.MethodInvocation;
+import com.vaadin.terminal.gwt.client.ui.VOverlay;
public class Util {
@@ -446,6 +448,7 @@ public class Util {
elem.getStyle().setProperty("overflow", "hidden");
Scheduler.get().scheduleDeferred(new Command() {
+ @Override
public void execute() {
// Dough, Safari scroll auto means actually just a moped
elem.getStyle().setProperty("overflow", originalOverflow);
@@ -642,34 +645,47 @@ public class Util {
*/
public static ComponentConnector getConnectorForElement(
ApplicationConnection client, Widget parent, Element element) {
+
+ Element browseElement = element;
Element rootElement = parent.getElement();
- while (element != null && element != rootElement) {
- ComponentConnector paintable = ConnectorMap.get(client)
- .getConnector(element);
- if (paintable == null) {
- String ownerPid = VCaption.getCaptionOwnerPid(element);
+
+ while (browseElement != null && browseElement != rootElement) {
+
+ ComponentConnector connector = ConnectorMap.get(client)
+ .getConnector(browseElement);
+
+ if (connector == null) {
+ String ownerPid = VCaption.getCaptionOwnerPid(browseElement);
if (ownerPid != null) {
- paintable = (ComponentConnector) ConnectorMap.get(client)
+ connector = (ComponentConnector) ConnectorMap.get(client)
.getConnector(ownerPid);
}
}
- if (paintable != null) {
+ if (connector != null) {
// check that inside the rootElement
- while (element != null && element != rootElement) {
- element = (Element) element.getParentElement();
+ while (browseElement != null && browseElement != rootElement) {
+ browseElement = (Element) browseElement.getParentElement();
}
- if (element != rootElement) {
+ if (browseElement != rootElement) {
return null;
} else {
- return paintable;
+ return connector;
}
}
- element = (Element) element.getParentElement();
+ browseElement = (Element) browseElement.getParentElement();
}
- return null;
+ // No connector found, element is possibly inside a VOverlay
+ // If the overlay has an owner, try to find the owner's connector
+ VOverlay overlay = findWidget(element, VOverlay.class);
+ if (overlay != null && overlay.getOwner() != null) {
+ return getConnectorForElement(client, RootPanel.get(), overlay
+ .getOwner().getElement());
+ } else {
+ return null;
+ }
}
/**
@@ -818,30 +834,29 @@ public class Util {
ServerConnector connector = ConnectorMap.get(c).getConnector(id);
if (connector != null) {
VConsole.log("\t" + id + " (" + connector.getClass() + ") :");
- for (MethodInvocation invocation : invocations) {
- Object[] parameters = invocation.getParameters();
- String formattedParams = null;
- if (ApplicationConnection.UPDATE_VARIABLE_METHOD
- .equals(invocation.getMethodName())
- && parameters.length == 2) {
- // name, value
- Object value = parameters[1];
- // TODO paintables inside lists/maps get rendered as
- // components in the debug console
- String formattedValue = value instanceof ServerConnector ? ((ServerConnector) value)
- .getConnectorId() : String.valueOf(value);
- formattedParams = parameters[0] + " : " + formattedValue;
- }
- if (null == formattedParams) {
- formattedParams = (null != parameters) ? Arrays
- .toString(parameters) : null;
- }
- VConsole.log("\t\t" + invocation.getInterfaceName() + "."
- + invocation.getMethodName() + "(" + formattedParams
- + ")");
- }
} else {
- VConsole.log("\t" + id + ": Warning: no corresponding connector!");
+ VConsole.log("\t" + id
+ + ": Warning: no corresponding connector for id " + id);
+ }
+ for (MethodInvocation invocation : invocations) {
+ Object[] parameters = invocation.getParameters();
+ String formattedParams = null;
+ if (ApplicationConnection.UPDATE_VARIABLE_METHOD.equals(invocation
+ .getMethodName()) && parameters.length == 2) {
+ // name, value
+ Object value = parameters[1];
+ // TODO paintables inside lists/maps get rendered as
+ // components in the debug console
+ String formattedValue = value instanceof ServerConnector ? ((ServerConnector) value)
+ .getConnectorId() : String.valueOf(value);
+ formattedParams = parameters[0] + " : " + formattedValue;
+ }
+ if (null == formattedParams) {
+ formattedParams = (null != parameters) ? Arrays
+ .toString(parameters) : null;
+ }
+ VConsole.log("\t\t" + invocation.getInterfaceName() + "."
+ + invocation.getMethodName() + "(" + formattedParams + ")");
}
}
@@ -1007,6 +1022,7 @@ public class Util {
}
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
+ @Override
public void execute() {
try {
target.dispatchEvent(createMouseDownEvent);
diff --git a/src/com/vaadin/terminal/gwt/client/VCaption.java b/src/com/vaadin/terminal/gwt/client/VCaption.java
index 6f3fcf2c3a..85acc215b7 100644
--- a/src/com/vaadin/terminal/gwt/client/VCaption.java
+++ b/src/com/vaadin/terminal/gwt/client/VCaption.java
@@ -8,6 +8,8 @@ import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.HTML;
+import com.vaadin.shared.AbstractFieldState;
+import com.vaadin.shared.ComponentState;
import com.vaadin.terminal.gwt.client.ui.AbstractFieldConnector;
import com.vaadin.terminal.gwt.client.ui.Icon;
@@ -35,6 +37,8 @@ public class VCaption extends HTML {
ICON, CAPTION, REQUIRED, ERROR
}
+ private TooltipInfo tooltipInfo = null;
+
/**
* Creates a caption that is not linked to a {@link ComponentConnector}.
*
@@ -74,8 +78,6 @@ public class VCaption extends HTML {
}
setStyleName(CLASSNAME);
- sinkEvents(VTooltip.TOOLTIP_EVENTS);
-
}
/**
@@ -345,9 +347,6 @@ public class VCaption extends HTML {
public void onBrowserEvent(Event event) {
super.onBrowserEvent(event);
final Element target = DOM.eventGetTarget(event);
- if (client != null && owner != null && target != getElement()) {
- client.handleTooltipEvent(event, owner);
- }
if (DOM.eventGetType(event) == Event.ONLOAD
&& icon.getElement() == target) {
@@ -555,6 +554,26 @@ public class VCaption extends HTML {
}
}
+ /**
+ * Sets the tooltip that should be shown for the caption
+ *
+ * @param tooltipInfo
+ * The tooltip that should be shown or null if no tooltip should
+ * be shown
+ */
+ public void setTooltipInfo(TooltipInfo tooltipInfo) {
+ this.tooltipInfo = tooltipInfo;
+ }
+
+ /**
+ * Returns the tooltip that should be shown for the caption
+ *
+ * @return The tooltip to show or null if no tooltip should be shown
+ */
+ public TooltipInfo getTooltipInfo() {
+ return tooltipInfo;
+ }
+
protected Element getTextElement() {
return captionText;
}
diff --git a/src/com/vaadin/terminal/gwt/client/VConsole.java b/src/com/vaadin/terminal/gwt/client/VConsole.java
index dee8529a84..a221b42d67 100644
--- a/src/com/vaadin/terminal/gwt/client/VConsole.java
+++ b/src/com/vaadin/terminal/gwt/client/VConsole.java
@@ -57,35 +57,49 @@ public class VConsole {
}
public static void log(String msg) {
- impl.log(msg);
+ if (impl != null) {
+ impl.log(msg);
+ }
}
public static void log(Throwable e) {
- impl.log(e);
+ if (impl != null) {
+ impl.log(e);
+ }
}
public static void error(Throwable e) {
- impl.error(e);
+ if (impl != null) {
+ impl.error(e);
+ }
}
public static void error(String msg) {
- impl.error(msg);
+ if (impl != null) {
+ impl.error(msg);
+ }
}
public static void printObject(Object msg) {
- impl.printObject(msg);
+ if (impl != null) {
+ impl.printObject(msg);
+ }
}
public static void dirUIDL(ValueMap u, ApplicationConfiguration cnf) {
- impl.dirUIDL(u, cnf);
+ if (impl != null) {
+ impl.dirUIDL(u, cnf);
+ }
}
public static void printLayoutProblems(ValueMap meta,
ApplicationConnection applicationConnection,
Set<ComponentConnector> zeroHeightComponents,
Set<ComponentConnector> zeroWidthComponents) {
- impl.printLayoutProblems(meta, applicationConnection,
- zeroHeightComponents, zeroWidthComponents);
+ if (impl != null) {
+ impl.printLayoutProblems(meta, applicationConnection,
+ zeroHeightComponents, zeroWidthComponents);
+ }
}
}
diff --git a/src/com/vaadin/terminal/gwt/client/VDebugConsole.java b/src/com/vaadin/terminal/gwt/client/VDebugConsole.java
index 09e939336e..a7bd943912 100644
--- a/src/com/vaadin/terminal/gwt/client/VDebugConsole.java
+++ b/src/com/vaadin/terminal/gwt/client/VDebugConsole.java
@@ -24,6 +24,8 @@ import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.KeyCodes;
import com.google.gwt.event.dom.client.MouseOutEvent;
import com.google.gwt.event.dom.client.MouseOutHandler;
+import com.google.gwt.event.logical.shared.ValueChangeEvent;
+import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.event.shared.UmbrellaException;
import com.google.gwt.http.client.Request;
@@ -33,6 +35,7 @@ import com.google.gwt.http.client.RequestException;
import com.google.gwt.http.client.Response;
import com.google.gwt.http.client.UrlBuilder;
import com.google.gwt.i18n.client.DateTimeFormat;
+import com.google.gwt.storage.client.Storage;
import com.google.gwt.user.client.Cookies;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
@@ -81,6 +84,7 @@ public class VDebugConsole extends VOverlay implements Console {
this.label = label;
}
+ @Override
public void onPreviewNativeEvent(NativePreviewEvent event) {
if (event.getTypeInt() == Event.ONKEYDOWN
&& event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ESCAPE) {
@@ -160,7 +164,8 @@ public class VDebugConsole extends VOverlay implements Console {
private Button savePosition = new Button("S");
private Button highlight = new Button("H");
private Button connectorStats = new Button("CS");
- private CheckBox hostedMode = new CheckBox("GWT");
+ private CheckBox devMode = new CheckBox("Dev");
+ private CheckBox superDevMode = new CheckBox("SDev");
private CheckBox autoScroll = new CheckBox("Autoscroll ");
private HorizontalPanel actions;
private boolean collapsed = false;
@@ -195,6 +200,7 @@ public class VDebugConsole extends VOverlay implements Console {
private EventPreview dragpreview = new EventPreview() {
+ @Override
public boolean onEventPreview(Event event) {
onBrowserEvent(event);
return false;
@@ -342,6 +348,7 @@ public class VDebugConsole extends VOverlay implements Console {
*
* @see com.vaadin.terminal.gwt.client.Console#log(java.lang.String)
*/
+ @Override
public void log(String msg) {
if (msg == null) {
msg = "null";
@@ -358,6 +365,7 @@ public class VDebugConsole extends VOverlay implements Console {
private List<String> msgQueue = new LinkedList<String>();
private ScheduledCommand doSend = new ScheduledCommand() {
+ @Override
public void execute() {
if (!msgQueue.isEmpty()) {
RequestBuilder requestBuilder = new RequestBuilder(
@@ -371,12 +379,14 @@ public class VDebugConsole extends VOverlay implements Console {
requestBuilder.sendRequest(requestData,
new RequestCallback() {
+ @Override
public void onResponseReceived(Request request,
Response response) {
// TODO Auto-generated method stub
}
+ @Override
public void onError(Request request,
Throwable exception) {
// TODO Auto-generated method stub
@@ -434,6 +444,7 @@ public class VDebugConsole extends VOverlay implements Console {
*
* @see com.vaadin.terminal.gwt.client.Console#error(java.lang.String)
*/
+ @Override
public void error(String msg) {
if (msg == null) {
msg = "null";
@@ -462,6 +473,7 @@ public class VDebugConsole extends VOverlay implements Console {
* @see com.vaadin.terminal.gwt.client.Console#printObject(java.lang.
* Object)
*/
+ @Override
public void printObject(Object msg) {
String str;
if (msg == null) {
@@ -479,6 +491,7 @@ public class VDebugConsole extends VOverlay implements Console {
* @see com.vaadin.terminal.gwt.client.Console#dirUIDL(com.vaadin
* .terminal.gwt.client.UIDL)
*/
+ @Override
public void dirUIDL(ValueMap u, ApplicationConfiguration conf) {
if (panel.isAttached()) {
VUIDLBrowser vuidlBrowser = new VUIDLBrowser(u, conf);
@@ -518,6 +531,7 @@ public class VDebugConsole extends VOverlay implements Console {
}
}-*/;
+ @Override
public void printLayoutProblems(ValueMap meta, ApplicationConnection ac,
Set<ComponentConnector> zeroHeightComponents,
Set<ComponentConnector> zeroWidthComponents) {
@@ -572,6 +586,7 @@ public class VDebugConsole extends VOverlay implements Console {
final CheckBox emphasisInUi = new CheckBox(
"Emphasize components parent in UI (the actual component is not visible)");
emphasisInUi.addClickHandler(new ClickHandler() {
+ @Override
public void onClick(ClickEvent event) {
Element element2 = layout.getElement();
Widget.setStyleName(element2, "invalidlayout",
@@ -605,6 +620,7 @@ public class VDebugConsole extends VOverlay implements Console {
}
final CheckBox emphasisInUi = new CheckBox("Emphasize component in UI");
emphasisInUi.addClickHandler(new ClickHandler() {
+ @Override
public void onClick(ClickEvent event) {
if (paintable != null) {
Element element2 = paintable.getWidget().getElement();
@@ -630,6 +646,7 @@ public class VDebugConsole extends VOverlay implements Console {
root.add(errorNode);
}
+ @Override
public void log(Throwable e) {
if (e instanceof UmbrellaException) {
UmbrellaException ue = (UmbrellaException) e;
@@ -642,6 +659,7 @@ public class VDebugConsole extends VOverlay implements Console {
GWT.log(e.getMessage(), e);
}
+ @Override
public void error(Throwable e) {
handleError(e, this);
}
@@ -673,6 +691,7 @@ public class VDebugConsole extends VOverlay implements Console {
}
}
+ @Override
public void init() {
panel = new FlowPanel();
if (!quietMode) {
@@ -717,33 +736,8 @@ public class VDebugConsole extends VOverlay implements Console {
savePosition
.setTitle("Saves the position and size of debug console to a cookie");
actions.add(autoScroll);
- actions.add(hostedMode);
- if (Location.getParameter("gwt.codesvr") != null) {
- hostedMode.setValue(true);
- }
- hostedMode.addClickHandler(new ClickHandler() {
- public void onClick(ClickEvent event) {
- if (hostedMode.getValue()) {
- addHMParameter();
- } else {
- removeHMParameter();
- }
- }
-
- private void addHMParameter() {
- UrlBuilder createUrlBuilder = Location.createUrlBuilder();
- createUrlBuilder.setParameter("gwt.codesvr",
- "localhost:9997");
- Location.assign(createUrlBuilder.buildString());
- }
-
- private void removeHMParameter() {
- UrlBuilder createUrlBuilder = Location.createUrlBuilder();
- createUrlBuilder.removeParameter("gwt.codesvr");
- Location.assign(createUrlBuilder.buildString());
-
- }
- });
+ addDevMode();
+ addSuperDevMode();
autoScroll
.setTitle("Automatically scroll so that new messages are visible");
@@ -753,6 +747,7 @@ public class VDebugConsole extends VOverlay implements Console {
panel.add(new HTML("<i>" + help + "</i>"));
clear.addClickHandler(new ClickHandler() {
+ @Override
public void onClick(ClickEvent event) {
int width = panel.getOffsetWidth();
int height = panel.getOffsetHeight();
@@ -765,6 +760,7 @@ public class VDebugConsole extends VOverlay implements Console {
});
restart.addClickHandler(new ClickHandler() {
+ @Override
public void onClick(ClickEvent event) {
String queryString = Window.Location.getQueryString();
@@ -792,6 +788,7 @@ public class VDebugConsole extends VOverlay implements Console {
});
forceLayout.addClickHandler(new ClickHandler() {
+ @Override
public void onClick(ClickEvent event) {
for (ApplicationConnection applicationConnection : ApplicationConfiguration
.getRunningApplications()) {
@@ -801,6 +798,7 @@ public class VDebugConsole extends VOverlay implements Console {
});
analyzeLayout.addClickHandler(new ClickHandler() {
+ @Override
public void onClick(ClickEvent event) {
List<ApplicationConnection> runningApplications = ApplicationConfiguration
.getRunningApplications();
@@ -816,6 +814,7 @@ public class VDebugConsole extends VOverlay implements Console {
+ " all non committed variables form client side.");
savePosition.addClickHandler(new ClickHandler() {
+ @Override
public void onClick(ClickEvent event) {
String pos = getAbsoluteLeft() + "," + getAbsoluteTop()
+ "," + getOffsetWidth() + "," + getOffsetHeight()
@@ -826,6 +825,7 @@ public class VDebugConsole extends VOverlay implements Console {
highlight.addClickHandler(new ClickHandler() {
+ @Override
public void onClick(ClickEvent event) {
final Label label = new Label("--");
log("<i>Use mouse to select a component or click ESC to exit highlight mode.</i>");
@@ -840,6 +840,7 @@ public class VDebugConsole extends VOverlay implements Console {
}
connectorStats.addClickHandler(new ClickHandler() {
+ @Override
public void onClick(ClickEvent event) {
for (ApplicationConnection a : ApplicationConfiguration
.getRunningApplications()) {
@@ -861,6 +862,56 @@ public class VDebugConsole extends VOverlay implements Console {
}
+ private void addSuperDevMode() {
+ final Storage sessionStorage = Storage.getSessionStorageIfSupported();
+ if (sessionStorage == null) {
+ return;
+ }
+ actions.add(superDevMode);
+ if (Location.getParameter("superdevmode") != null) {
+ superDevMode.setValue(true);
+ }
+ superDevMode.addValueChangeHandler(new ValueChangeHandler<Boolean>() {
+
+ @Override
+ public void onValueChange(ValueChangeEvent<Boolean> event) {
+ SuperDevMode.redirect(event.getValue());
+ }
+
+ });
+
+ }
+
+ private void addDevMode() {
+ actions.add(devMode);
+ if (Location.getParameter("gwt.codesvr") != null) {
+ devMode.setValue(true);
+ }
+ devMode.addClickHandler(new ClickHandler() {
+ @Override
+ public void onClick(ClickEvent event) {
+ if (devMode.getValue()) {
+ addHMParameter();
+ } else {
+ removeHMParameter();
+ }
+ }
+
+ private void addHMParameter() {
+ UrlBuilder createUrlBuilder = Location.createUrlBuilder();
+ createUrlBuilder.setParameter("gwt.codesvr", "localhost:9997");
+ Location.assign(createUrlBuilder.buildString());
+ }
+
+ private void removeHMParameter() {
+ UrlBuilder createUrlBuilder = Location.createUrlBuilder();
+ createUrlBuilder.removeParameter("gwt.codesvr");
+ Location.assign(createUrlBuilder.buildString());
+
+ }
+ });
+ }
+
protected void dumpConnectorInfo(ApplicationConnection a) {
RootConnector root = a.getRootConnector();
log("================");
@@ -924,6 +975,7 @@ public class VDebugConsole extends VOverlay implements Console {
}
};
simpleTree.addDomHandler(new MouseOutHandler() {
+ @Override
public void onMouseOut(MouseOutEvent event) {
VUIDLBrowser.deHiglight();
}
@@ -945,6 +997,7 @@ public class VDebugConsole extends VOverlay implements Console {
return Util.getConnectorString(connector);
}
+ @Override
public void setQuietMode(boolean quietDebugMode) {
quietMode = quietDebugMode;
}
diff --git a/src/com/vaadin/terminal/gwt/client/VSchedulerImpl.java b/src/com/vaadin/terminal/gwt/client/VSchedulerImpl.java
index 65d5d6a9a2..6f5e5854b2 100644
--- a/src/com/vaadin/terminal/gwt/client/VSchedulerImpl.java
+++ b/src/com/vaadin/terminal/gwt/client/VSchedulerImpl.java
@@ -19,6 +19,7 @@ public class VSchedulerImpl extends SchedulerImpl {
super.scheduleDeferred(cmd);
super.scheduleDeferred(new ScheduledCommand() {
+ @Override
public void execute() {
deferredCommandTrackers--;
}
diff --git a/src/com/vaadin/terminal/gwt/client/VTooltip.java b/src/com/vaadin/terminal/gwt/client/VTooltip.java
index 70f4a0de0a..a3523c2013 100644
--- a/src/com/vaadin/terminal/gwt/client/VTooltip.java
+++ b/src/com/vaadin/terminal/gwt/client/VTooltip.java
@@ -3,12 +3,20 @@
*/
package com.vaadin.terminal.gwt.client;
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.event.dom.client.KeyDownEvent;
+import com.google.gwt.event.dom.client.KeyDownHandler;
+import com.google.gwt.event.dom.client.MouseMoveEvent;
+import com.google.gwt.event.dom.client.MouseMoveHandler;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.FlowPanel;
+import com.google.gwt.user.client.ui.RootPanel;
+import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.ui.VOverlay;
/**
@@ -27,15 +35,12 @@ public class VTooltip extends VOverlay {
private static final int QUICK_OPEN_DELAY = 100;
VErrorMessage em = new VErrorMessage();
Element description = DOM.createDiv();
- private ComponentConnector tooltipOwner;
private boolean closing = false;
private boolean opening = false;
private ApplicationConnection ac;
// Open next tooltip faster. Disabled after 2 sec of showTooltip-silence.
private boolean justClosed = false;
- // If this is "additional" tooltip, this field contains the key for it
- private Object tooltipKey;
public VTooltip(ApplicationConnection client) {
super(false, false, true);
@@ -78,6 +83,7 @@ public class VTooltip extends VOverlay {
// first to 0,0 position so that the calculation goes correctly.
setPopupPosition(0, 0);
setPopupPositionAndShow(new PositionCallback() {
+ @Override
public void setPosition(int offsetWidth, int offsetHeight) {
if (offsetWidth > MAX_WIDTH) {
@@ -115,51 +121,30 @@ public class VTooltip extends VOverlay {
}
}
- public void showTooltip(ComponentConnector owner, Event event, Object key) {
- if (closing && tooltipOwner == owner && tooltipKey == key) {
- // return to same tooltip, cancel closing
- closeTimer.cancel();
- closing = false;
- justClosedTimer.cancel();
- justClosed = false;
- return;
- }
+ private void showTooltip() {
- if (closing) {
+ // Close current tooltip
+ if (isShowing()) {
closeNow();
}
- updatePosition(event);
-
- if (opening) {
- showTimer.cancel();
- }
- tooltipOwner = owner;
- tooltipKey = key;
-
// Schedule timer for showing the tooltip according to if it was
// recently closed or not.
- if (justClosed) {
- showTimer.schedule(QUICK_OPEN_DELAY);
- } else {
- showTimer.schedule(OPEN_DELAY);
- }
+ int timeout = justClosed ? QUICK_OPEN_DELAY : OPEN_DELAY;
+ showTimer.schedule(timeout);
opening = true;
}
private void closeNow() {
- if (closing) {
- hide();
- tooltipOwner = null;
- setWidth("");
- closing = false;
- }
+ hide();
+ setWidth("");
+ closing = false;
}
private Timer showTimer = new Timer() {
@Override
public void run() {
- TooltipInfo info = ac.getTooltipTitleInfo(tooltipOwner, tooltipKey);
+ TooltipInfo info = tooltipEventHandler.getTooltipInfo();
if (null != info) {
show(info);
}
@@ -187,7 +172,6 @@ public class VTooltip extends VOverlay {
if (opening) {
showTimer.cancel();
opening = false;
- tooltipOwner = null;
}
if (!isAttached()) {
return;
@@ -209,24 +193,6 @@ public class VTooltip extends VOverlay {
public void updatePosition(Event event) {
tooltipEventMouseX = DOM.eventGetClientX(event);
tooltipEventMouseY = DOM.eventGetClientY(event);
-
- }
-
- public void handleTooltipEvent(Event event, ComponentConnector owner,
- Object key) {
- final int type = DOM.eventGetType(event);
- if ((VTooltip.TOOLTIP_EVENTS & type) == type) {
- if (type == Event.ONMOUSEOVER) {
- showTooltip(owner, event, key);
- } else if (type == Event.ONMOUSEMOVE) {
- updatePosition(event);
- } else {
- hideTooltip();
- }
- } else {
- // non-tooltip event, hide tooltip
- hideTooltip();
- }
}
@Override
@@ -235,17 +201,152 @@ public class VTooltip extends VOverlay {
// cancel closing event if tooltip is mouseovered; the user might want
// to scroll of cut&paste
- switch (type) {
- case Event.ONMOUSEOVER:
+ if (type == Event.ONMOUSEOVER) {
+ // Cancel closing so tooltip stays open and user can copy paste the
+ // tooltip
closeTimer.cancel();
closing = false;
- break;
- case Event.ONMOUSEOUT:
+ }
+ }
+
+ /**
+ * Replace current open tooltip with new content
+ */
+ public void replaceCurrentTooltip() {
+ if (closing) {
+ closeTimer.cancel();
+ closeNow();
+ }
+
+ TooltipInfo info = tooltipEventHandler.getTooltipInfo();
+ if (null != info) {
+ show(info);
+ }
+ opening = false;
+ }
+
+ private class TooltipEventHandler implements MouseMoveHandler,
+ ClickHandler, KeyDownHandler {
+
+ /**
+ * Current element hovered
+ */
+ private com.google.gwt.dom.client.Element currentElement = null;
+
+ /**
+ * Current tooltip active
+ */
+ private TooltipInfo currentTooltipInfo = null;
+
+ /**
+ * Get current active tooltip information
+ *
+ * @return Current active tooltip information or null
+ */
+ public TooltipInfo getTooltipInfo() {
+ return currentTooltipInfo;
+ }
+
+ /**
+ * Locate connector and it's tooltip for given element
+ *
+ * @param element
+ * Element used in search
+ * @return true if connector and tooltip found
+ */
+ private boolean resolveConnector(Element element) {
+
+ ComponentConnector connector = Util.getConnectorForElement(ac,
+ RootPanel.get(), element);
+
+ // Try to find first connector with proper tooltip info
+ TooltipInfo info = null;
+ while (connector != null) {
+
+ info = connector.getTooltipInfo(element);
+
+ if (info != null && info.hasMessage()) {
+ break;
+ }
+
+ if (!(connector.getParent() instanceof ComponentConnector)) {
+ connector = null;
+ info = null;
+ break;
+ }
+ connector = (ComponentConnector) connector.getParent();
+ }
+
+ if (connector != null && info != null) {
+ currentTooltipInfo = info;
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Handle hide event
+ *
+ * @param event
+ * Event causing hide
+ */
+ private void handleHideEvent() {
hideTooltip();
- break;
- default:
- // NOP
+ currentTooltipInfo = null;
+ }
+
+ @Override
+ public void onMouseMove(MouseMoveEvent mme) {
+ Event event = Event.as(mme.getNativeEvent());
+ com.google.gwt.dom.client.Element element = Element.as(event
+ .getEventTarget());
+
+ // We can ignore move event if it's handled by move or over already
+ if (currentElement == element) {
+ return;
+ }
+ currentElement = element;
+
+ boolean connectorAndTooltipFound = resolveConnector((com.google.gwt.user.client.Element) element);
+ if (!connectorAndTooltipFound) {
+ if (isShowing()) {
+ handleHideEvent();
+ } else {
+ currentTooltipInfo = null;
+ }
+ } else {
+ updatePosition(event);
+ if (isShowing()) {
+ replaceCurrentTooltip();
+ } else {
+ showTooltip();
+ }
+ }
+ }
+
+ @Override
+ public void onClick(ClickEvent event) {
+ handleHideEvent();
+ }
+
+ @Override
+ public void onKeyDown(KeyDownEvent event) {
+ handleHideEvent();
}
}
+ private final TooltipEventHandler tooltipEventHandler = new TooltipEventHandler();
+
+ /**
+ * Connects DOM handlers to widget that are needed for tooltip presentation.
+ *
+ * @param widget
+ * Widget which DOM handlers are connected
+ */
+ public void connectHandlersToWidget(Widget widget) {
+ widget.addDomHandler(tooltipEventHandler, MouseMoveEvent.getType());
+ widget.addDomHandler(tooltipEventHandler, ClickEvent.getType());
+ widget.addDomHandler(tooltipEventHandler, KeyDownEvent.getType());
+ }
}
diff --git a/src/com/vaadin/terminal/gwt/client/VUIDLBrowser.java b/src/com/vaadin/terminal/gwt/client/VUIDLBrowser.java
index 4230eda298..745d66c444 100644
--- a/src/com/vaadin/terminal/gwt/client/VUIDLBrowser.java
+++ b/src/com/vaadin/terminal/gwt/client/VUIDLBrowser.java
@@ -22,16 +22,29 @@ import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.MouseOutEvent;
import com.google.gwt.event.dom.client.MouseOutHandler;
+import com.google.gwt.json.client.JSONArray;
+import com.google.gwt.json.client.JSONObject;
+import com.google.gwt.json.client.JSONValue;
+import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.ui.UnknownComponentConnector;
import com.vaadin.terminal.gwt.client.ui.window.VWindow;
+/**
+ * TODO Rename to something more Vaadin7-ish?
+ */
public class VUIDLBrowser extends SimpleTree {
- private static final String HELP = "Shift click handle to open recursively. Click components to hightlight them on client side. Shift click components to highlight them also on the server side.";
+ private static final String HELP = "Shift click handle to open recursively. "
+ + " Click components to highlight them on client side."
+ + " Shift click components to highlight them also on the server side.";
private ApplicationConfiguration conf;
private String highlightedPid;
+ /**
+ * TODO Should probably take ApplicationConnection instead of
+ * ApplicationConfiguration
+ */
public VUIDLBrowser(final UIDL uidl, ApplicationConfiguration conf) {
this.conf = conf;
final UIDLItem root = new UIDLItem(uidl, conf);
@@ -47,9 +60,18 @@ public class VUIDLBrowser extends SimpleTree {
Set<String> keySet = u.getKeySet();
for (String key : keySet) {
if (key.equals("state")) {
- // TODO print updated shared states
+
+ ValueMap stateJson = u.getValueMap(key);
+ SimpleTree stateChanges = new SimpleTree("Shared state");
+
+ for (String stateKey : stateJson.getKeySet()) {
+ stateChanges.add(new SharedStateItem(stateKey, stateJson
+ .getValueMap(stateKey)));
+ }
+ add(stateChanges);
+
} else if (key.equals("changes")) {
- JsArray<UIDL> jsValueMapArray = u.getJSValueMapArray("changes")
+ JsArray<UIDL> jsValueMapArray = u.getJSValueMapArray(key)
.cast();
for (int i = 0; i < jsValueMapArray.length(); i++) {
UIDL uidl = jsValueMapArray.get(i);
@@ -68,12 +90,107 @@ public class VUIDLBrowser extends SimpleTree {
setTitle(HELP);
}
- class UIDLItem extends SimpleTree {
+ /**
+ * A debug view of a server-originated component state change.
+ */
+ abstract class StateChangeItem extends SimpleTree {
+
+ protected StateChangeItem() {
+ setTitle(HELP);
+
+ addDomHandler(new MouseOutHandler() {
+ @Override
+ public void onMouseOut(MouseOutEvent event) {
+ deHiglight();
+ }
+ }, MouseOutEvent.getType());
+ }
+
+ @Override
+ protected void select(ClickEvent event) {
+ ComponentConnector connector = getConnector();
+ highlight(connector);
+ if (event != null && event.getNativeEvent().getShiftKey()) {
+ connector.getConnection().highlightComponent(connector);
+ }
+ super.select(event);
+ }
+
+ /**
+ * Returns the Connector associated with this state change.
+ */
+ protected ComponentConnector getConnector() {
+ List<ApplicationConnection> runningApplications = ApplicationConfiguration
+ .getRunningApplications();
+
+ // TODO this does not work properly with multiple application on
+ // same host page
+ for (ApplicationConnection applicationConnection : runningApplications) {
+ ServerConnector connector = ConnectorMap.get(
+ applicationConnection).getConnector(getConnectorId());
+ if (connector instanceof ComponentConnector) {
+ return (ComponentConnector) connector;
+ }
+ }
+ return new UnknownComponentConnector();
+ }
+
+ protected abstract String getConnectorId();
+ }
+
+ /**
+ * A debug view of a Vaadin 7 style shared state change.
+ */
+ class SharedStateItem extends StateChangeItem {
+
+ private String connectorId;
+
+ SharedStateItem(String connectorId, ValueMap stateChanges) {
+ this.connectorId = connectorId;
+ setText(connectorId);
+ dir(new JSONObject(stateChanges), this);
+ }
+
+ @Override
+ protected String getConnectorId() {
+ return connectorId;
+ }
+
+ private void dir(String key, JSONValue value, SimpleTree tree) {
+ if (value.isObject() != null) {
+ SimpleTree subtree = new SimpleTree(key + "=object");
+ tree.add(subtree);
+ dir(value.isObject(), subtree);
+ } else if (value.isArray() != null) {
+ SimpleTree subtree = new SimpleTree(key + "=array");
+ dir(value.isArray(), subtree);
+ tree.add(subtree);
+ } else {
+ tree.add(new HTML(key + "=" + value));
+ }
+ }
+
+ private void dir(JSONObject state, SimpleTree tree) {
+ for (String key : state.keySet()) {
+ dir(key, state.get(key), tree);
+ }
+ }
+
+ private void dir(JSONArray array, SimpleTree tree) {
+ for (int i = 0; i < array.size(); ++i) {
+ dir("" + i, array.get(i), tree);
+ }
+ }
+ }
+
+ /**
+ * A debug view of a Vaadin 6 style hierarchical component state change.
+ */
+ class UIDLItem extends StateChangeItem {
private UIDL uidl;
UIDLItem(UIDL uidl, ApplicationConfiguration conf) {
- setTitle(HELP);
this.uidl = uidl;
try {
String name = uidl.getTag();
@@ -87,13 +204,11 @@ public class VUIDLBrowser extends SimpleTree {
} catch (Exception e) {
setText(uidl.toString());
}
+ }
- addDomHandler(new MouseOutHandler() {
- public void onMouseOut(MouseOutEvent event) {
- deHiglight();
- }
- }, MouseOutEvent.getType());
-
+ @Override
+ protected String getConnectorId() {
+ return uidl.getId();
}
private String getNodeName(UIDL uidl, ApplicationConfiguration conf,
@@ -118,26 +233,6 @@ public class VUIDLBrowser extends SimpleTree {
super.open(recursive);
}
- @Override
- protected void select(ClickEvent event) {
- List<ApplicationConnection> runningApplications = ApplicationConfiguration
- .getRunningApplications();
-
- // TODO this does not work properly with multiple application on
- // same
- // host page
- for (ApplicationConnection applicationConnection : runningApplications) {
- ComponentConnector paintable = (ComponentConnector) ConnectorMap
- .get(applicationConnection).getConnector(uidl.getId());
- highlight(paintable);
- if (event != null && event.getNativeEvent().getShiftKey()) {
- applicationConnection.highlightComponent(paintable);
- }
- }
-
- super.select(event);
- }
-
public void dir() {
remove(0);
@@ -218,6 +313,7 @@ public class VUIDLBrowser extends SimpleTree {
if (highlightedPid != null && highlightedPid.equals(uidl.getId())) {
getElement().getStyle().setBackgroundColor("#fdd");
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
+ @Override
public void execute() {
getElement().scrollIntoView();
}
diff --git a/src/com/vaadin/terminal/gwt/client/WidgetLoader.java b/src/com/vaadin/terminal/gwt/client/WidgetLoader.java
index 16e99716a0..749a8343c8 100644
--- a/src/com/vaadin/terminal/gwt/client/WidgetLoader.java
+++ b/src/com/vaadin/terminal/gwt/client/WidgetLoader.java
@@ -8,13 +8,15 @@ import com.google.gwt.core.client.RunAsyncCallback;
/** A helper class used by WidgetMap implementation. Used by the generated code. */
abstract class WidgetLoader implements RunAsyncCallback {
+ @Override
public void onFailure(Throwable reason) {
- ApplicationConfiguration.endWidgetLoading();
+ ApplicationConfiguration.endDependencyLoading();
}
+ @Override
public void onSuccess() {
addInstantiator();
- ApplicationConfiguration.endWidgetLoading();
+ ApplicationConfiguration.endDependencyLoading();
}
abstract void addInstantiator();
diff --git a/src/com/vaadin/terminal/gwt/client/communication/InitializableServerRpc.java b/src/com/vaadin/terminal/gwt/client/communication/InitializableServerRpc.java
index 0270de316e..f1b6b44b7d 100644
--- a/src/com/vaadin/terminal/gwt/client/communication/InitializableServerRpc.java
+++ b/src/com/vaadin/terminal/gwt/client/communication/InitializableServerRpc.java
@@ -3,6 +3,7 @@
*/
package com.vaadin.terminal.gwt.client.communication;
+import com.vaadin.shared.communication.ServerRpc;
import com.vaadin.terminal.gwt.client.ServerConnector;
/**
diff --git a/src/com/vaadin/terminal/gwt/client/communication/JsonDecoder.java b/src/com/vaadin/terminal/gwt/client/communication/JsonDecoder.java
index 23a2c30cd0..7268acdfc5 100644
--- a/src/com/vaadin/terminal/gwt/client/communication/JsonDecoder.java
+++ b/src/com/vaadin/terminal/gwt/client/communication/JsonDecoder.java
@@ -16,8 +16,8 @@ import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONString;
import com.google.gwt.json.client.JSONValue;
+import com.vaadin.shared.Connector;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
-import com.vaadin.terminal.gwt.client.Connector;
import com.vaadin.terminal.gwt.client.ConnectorMap;
/**
diff --git a/src/com/vaadin/terminal/gwt/client/communication/JsonEncoder.java b/src/com/vaadin/terminal/gwt/client/communication/JsonEncoder.java
index 925f0b6272..404f1238e0 100644
--- a/src/com/vaadin/terminal/gwt/client/communication/JsonEncoder.java
+++ b/src/com/vaadin/terminal/gwt/client/communication/JsonEncoder.java
@@ -17,8 +17,9 @@ import com.google.gwt.json.client.JSONNumber;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONString;
import com.google.gwt.json.client.JSONValue;
+import com.vaadin.shared.Connector;
+import com.vaadin.shared.communication.UidlValue;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
-import com.vaadin.terminal.gwt.client.Connector;
/**
* Encoder for converting RPC parameters and other values to JSON for transfer
diff --git a/src/com/vaadin/terminal/gwt/client/communication/RpcManager.java b/src/com/vaadin/terminal/gwt/client/communication/RpcManager.java
index 07d6292ce2..b1c91fe049 100644
--- a/src/com/vaadin/terminal/gwt/client/communication/RpcManager.java
+++ b/src/com/vaadin/terminal/gwt/client/communication/RpcManager.java
@@ -11,6 +11,8 @@ import java.util.Map;
import com.google.gwt.core.client.GWT;
import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONString;
+import com.vaadin.shared.communication.ClientRpc;
+import com.vaadin.shared.communication.MethodInvocation;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.ConnectorMap;
import com.vaadin.terminal.gwt.client.ServerConnector;
diff --git a/src/com/vaadin/terminal/gwt/client/communication/RpcMethod.java b/src/com/vaadin/terminal/gwt/client/communication/RpcMethod.java
index abdcf73e2c..ce9c5b468b 100644
--- a/src/com/vaadin/terminal/gwt/client/communication/RpcMethod.java
+++ b/src/com/vaadin/terminal/gwt/client/communication/RpcMethod.java
@@ -3,6 +3,8 @@
*/
package com.vaadin.terminal.gwt.client.communication;
+import com.vaadin.shared.communication.ClientRpc;
+
public abstract class RpcMethod {
private String interfaceName;
private String methodName;
diff --git a/src/com/vaadin/terminal/gwt/client/communication/RpcProxy.java b/src/com/vaadin/terminal/gwt/client/communication/RpcProxy.java
index 113ec1f1b1..996c148f4f 100644
--- a/src/com/vaadin/terminal/gwt/client/communication/RpcProxy.java
+++ b/src/com/vaadin/terminal/gwt/client/communication/RpcProxy.java
@@ -4,6 +4,7 @@
package com.vaadin.terminal.gwt.client.communication;
import com.google.gwt.core.client.GWT;
+import com.vaadin.shared.communication.ServerRpc;
import com.vaadin.terminal.gwt.client.ServerConnector;
/**
diff --git a/src/com/vaadin/terminal/gwt/client/communication/URLReference_Serializer.java b/src/com/vaadin/terminal/gwt/client/communication/URLReference_Serializer.java
index bab0f385ed..f39cad1899 100644
--- a/src/com/vaadin/terminal/gwt/client/communication/URLReference_Serializer.java
+++ b/src/com/vaadin/terminal/gwt/client/communication/URLReference_Serializer.java
@@ -6,6 +6,7 @@ package com.vaadin.terminal.gwt.client.communication;
import com.google.gwt.core.client.GWT;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONValue;
+import com.vaadin.shared.communication.URLReference;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
public class URLReference_Serializer implements JSONSerializer<URLReference> {
@@ -13,6 +14,7 @@ public class URLReference_Serializer implements JSONSerializer<URLReference> {
// setURL() -> uRL as first char becomes lower case...
private static final String URL_FIELD = "uRL";
+ @Override
public URLReference deserialize(Type type, JSONValue jsonValue,
ApplicationConnection connection) {
URLReference reference = GWT.create(URLReference.class);
@@ -27,6 +29,7 @@ public class URLReference_Serializer implements JSONSerializer<URLReference> {
return reference;
}
+ @Override
public JSONValue serialize(URLReference value,
ApplicationConnection connection) {
JSONObject json = new JSONObject();
diff --git a/src/com/vaadin/terminal/gwt/client/extensions/javascriptmanager/JavaScriptManagerConnector.java b/src/com/vaadin/terminal/gwt/client/extensions/javascriptmanager/JavaScriptManagerConnector.java
index 8656783a86..d5849096fa 100644
--- a/src/com/vaadin/terminal/gwt/client/extensions/javascriptmanager/JavaScriptManagerConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/extensions/javascriptmanager/JavaScriptManagerConnector.java
@@ -10,10 +10,12 @@ import java.util.Set;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.core.client.JsArray;
import com.google.gwt.json.client.JSONArray;
-import com.vaadin.terminal.gwt.client.communication.MethodInvocation;
+import com.vaadin.shared.communication.MethodInvocation;
+import com.vaadin.shared.extension.javascriptmanager.ExecuteJavaScriptRpc;
+import com.vaadin.shared.extension.javascriptmanager.JavaScriptManagerState;
+import com.vaadin.shared.ui.Connect;
import com.vaadin.terminal.gwt.client.communication.StateChangeEvent;
import com.vaadin.terminal.gwt.client.extensions.AbstractExtensionConnector;
-import com.vaadin.terminal.gwt.client.ui.Connect;
import com.vaadin.ui.JavaScript;
@Connect(JavaScript.class)
@@ -23,6 +25,7 @@ public class JavaScriptManagerConnector extends AbstractExtensionConnector {
@Override
protected void init() {
registerRpc(ExecuteJavaScriptRpc.class, new ExecuteJavaScriptRpc() {
+ @Override
public void executeJavaScript(String Script) {
eval(Script);
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/AbstractClickEventHandler.java b/src/com/vaadin/terminal/gwt/client/ui/AbstractClickEventHandler.java
index e0ca798682..9de465e4a5 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/AbstractClickEventHandler.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/AbstractClickEventHandler.java
@@ -53,6 +53,7 @@ public abstract class AbstractClickEventHandler implements MouseDownHandler,
*/
private final NativePreviewHandler mouseUpPreviewHandler = new NativePreviewHandler() {
+ @Override
public void onPreviewNativeEvent(NativePreviewEvent event) {
if (event.getTypeInt() == Event.ONMOUSEUP) {
mouseUpEventPreviewRegistration.removeHandler();
@@ -144,6 +145,7 @@ public abstract class AbstractClickEventHandler implements MouseDownHandler,
* popping up if there is a listener for right clicks.
*/
+ @Override
public void onContextMenu(ContextMenuEvent event) {
if (hasEventListener() && shouldFireEvent(event)) {
// Prevent showing the browser's context menu when there is a right
@@ -152,6 +154,7 @@ public abstract class AbstractClickEventHandler implements MouseDownHandler,
}
}
+ @Override
public void onMouseDown(MouseDownEvent event) {
/*
* When getting a mousedown event, we must detect where the
@@ -163,6 +166,7 @@ public abstract class AbstractClickEventHandler implements MouseDownHandler,
.addNativePreviewHandler(mouseUpPreviewHandler);
}
+ @Override
public void onMouseUp(MouseUpEvent event) {
/*
* Only fire a click if the mouseup hits the same element as the
@@ -208,6 +212,7 @@ public abstract class AbstractClickEventHandler implements MouseDownHandler,
* double click will result in two click events and one double click event.
*/
+ @Override
public void onDoubleClick(DoubleClickEvent event) {
if (hasEventListener() && shouldFireEvent(event)) {
fireClick(event.getNativeEvent());
diff --git a/src/com/vaadin/terminal/gwt/client/ui/AbstractComponentConnector.java b/src/com/vaadin/terminal/gwt/client/ui/AbstractComponentConnector.java
index a621c488be..ba3a53691a 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/AbstractComponentConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/AbstractComponentConnector.java
@@ -3,18 +3,20 @@
*/
package com.vaadin.terminal.gwt.client.ui;
-import java.util.LinkedList;
+import java.util.ArrayList;
import java.util.List;
import java.util.Set;
+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.shared.ComponentState;
+import com.vaadin.shared.Connector;
+import com.vaadin.shared.ui.TabIndexState;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.ComponentConnector;
import com.vaadin.terminal.gwt.client.ComponentContainerConnector;
-import com.vaadin.terminal.gwt.client.ComponentState;
-import com.vaadin.terminal.gwt.client.Connector;
import com.vaadin.terminal.gwt.client.ConnectorMap;
import com.vaadin.terminal.gwt.client.LayoutManager;
import com.vaadin.terminal.gwt.client.ServerConnector;
@@ -23,6 +25,7 @@ import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.Util;
import com.vaadin.terminal.gwt.client.VConsole;
import com.vaadin.terminal.gwt.client.communication.StateChangeEvent;
+import com.vaadin.terminal.gwt.client.ui.datefield.PopupDateFieldConnector;
import com.vaadin.terminal.gwt.client.ui.root.RootConnector;
public abstract class AbstractComponentConnector extends AbstractConnector
@@ -33,7 +36,11 @@ public abstract class AbstractComponentConnector extends AbstractConnector
private String lastKnownWidth = "";
private String lastKnownHeight = "";
- List<String> styleNames;
+ /**
+ * The style names from getState().getStyles() which are currently applied
+ * to the widget.
+ */
+ protected List<String> styleNames = new ArrayList<String>();
/**
* Default constructor
@@ -41,6 +48,16 @@ public abstract class AbstractComponentConnector extends AbstractConnector
public AbstractComponentConnector() {
}
+ @Override
+ protected void init() {
+ super.init();
+
+ getConnection().getVTooltip().connectHandlersToWidget(getWidget());
+
+ // Set v-connector style names for the widget
+ getWidget().setStyleName("v-connector", true);
+ }
+
/**
* Creates and returns the widget for this VPaintableWidget. This method
* should only be called once when initializing the paintable.
@@ -57,6 +74,7 @@ public abstract class AbstractComponentConnector extends AbstractConnector
*
* @return The widget associated with this paintable
*/
+ @Override
public Widget getWidget() {
if (widget == null) {
widget = createWidget();
@@ -100,19 +118,7 @@ public abstract class AbstractComponentConnector extends AbstractConnector
super.onStateChanged(stateChangeEvent);
// Style names
- // String styleName = getStyleNames(getWidget().getStylePrimaryName());
- // getWidget().setStyleName(styleName);
- updateStyleNames();
-
- // Update tooltip
- TooltipInfo tooltipInfo = paintableMap.getTooltipInfo(this, null);
- if (getState().hasDescription()) {
- tooltipInfo.setTitle(getState().getDescription());
- } else {
- tooltipInfo.setTitle(null);
- }
- // add error info to tooltip if present
- tooltipInfo.setErrorMessage(getState().getErrorMessage());
+ updateWidgetStyleNames();
// Set captions
if (delegateCaptionHandling()) {
@@ -134,13 +140,16 @@ public abstract class AbstractComponentConnector extends AbstractConnector
updateComponentSize();
}
+ @Override
public void setWidgetEnabled(boolean widgetEnabled) {
+ // add or remove v-disabled style name from the widget
+ setWidgetStyleName(ApplicationConnection.DISABLED_CLASSNAME,
+ !widgetEnabled);
+
if (getWidget() instanceof HasEnabled) {
// set widget specific enabled state
((HasEnabled) getWidget()).setEnabled(widgetEnabled);
- // add or remove v-disabled style name from the widget
- getWidget().setStyleName(ApplicationConnection.DISABLED_CLASSNAME,
- !widgetEnabled);
+
// make sure the caption has or has not v-disabled style
if (delegateCaptionHandling()) {
ServerConnector parent = getParent();
@@ -190,18 +199,22 @@ public abstract class AbstractComponentConnector extends AbstractConnector
widget.setWidth(newWidth);
}
+ @Override
public boolean isRelativeHeight() {
return getState().getHeight().endsWith("%");
}
+ @Override
public boolean isRelativeWidth() {
return getState().getWidth().endsWith("%");
}
+ @Override
public boolean isUndefinedHeight() {
return getState().getHeight().length() == 0;
}
+ @Override
public boolean isUndefinedWidth() {
return getState().getWidth().length() == 0;
}
@@ -213,111 +226,118 @@ public abstract class AbstractComponentConnector extends AbstractConnector
* com.vaadin.terminal.gwt.client.ComponentConnector#delegateCaptionHandling
* ()
*/
+ @Override
public boolean delegateCaptionHandling() {
return true;
}
/**
- * Generates the style name for the widget based on the given primary style
- * name and the shared state.
+ * Updates the user defined, read-only and error style names for the widget
+ * based the shared state. User defined style names are prefixed with the
+ * primary style name of the widget returned by {@link #getWidget()}
* <p>
* This method can be overridden to provide additional style names for the
- * component
+ * component, for example see
+ * {@link AbstractFieldConnector#updateWidgetStyleNames()}
* </p>
- *
- * @param primaryStyleName
- * The primary style name to use when generating the final style
- * names
- * @return The style names, settable using
- * {@link Widget#setStyleName(String)}
*/
- protected String getStyleNames(String primaryStyleName) {
+ protected void updateWidgetStyleNames() {
ComponentState state = getState();
- StringBuilder styleBuf = new StringBuilder();
- styleBuf.append(primaryStyleName);
- styleBuf.append(" v-connector");
+ String primaryStyleName = getWidget().getStylePrimaryName();
- // Uses connector methods to enable connectors to take hierarchy or
- // multiple state variables into account
- if (!isEnabled()) {
- styleBuf.append(" ");
- styleBuf.append(ApplicationConnection.DISABLED_CLASSNAME);
- }
- if (isReadOnly()) {
- styleBuf.append(" ");
- styleBuf.append("v-readonly");
- }
+ // should be in AbstractFieldConnector ?
+ // add / remove read-only style name
+ setWidgetStyleName("v-readonly", isReadOnly());
+
+ // add / remove error style name
+ setWidgetStyleNameWithPrefix(primaryStyleName,
+ ApplicationConnection.ERROR_CLASSNAME_EXT,
+ null != state.getErrorMessage());
- // add additional styles as css classes, prefixed with component default
- // stylename
+ // add additional user defined style names as class names, prefixed with
+ // component default class name. remove nonexistent style names.
if (state.hasStyles()) {
- for (String style : state.getStyles()) {
- styleBuf.append(" ");
- styleBuf.append(primaryStyleName);
- styleBuf.append("-");
- styleBuf.append(style);
- styleBuf.append(" ");
- styleBuf.append(style);
+ // add new style names
+ List<String> newStyles = new ArrayList<String>();
+ newStyles.addAll(state.getStyles());
+ newStyles.removeAll(styleNames);
+ for (String newStyle : newStyles) {
+ setWidgetStyleName(newStyle, true);
+ setWidgetStyleNameWithPrefix(primaryStyleName + "-", newStyle,
+ true);
}
+ // remove nonexistent style names
+ styleNames.removeAll(state.getStyles());
+ for (String oldStyle : styleNames) {
+ setWidgetStyleName(oldStyle, false);
+ setWidgetStyleNameWithPrefix(primaryStyleName + "-", oldStyle,
+ false);
+ }
+ styleNames.clear();
+ styleNames.addAll(state.getStyles());
+ } else {
+ // remove all old style names
+ for (String oldStyle : styleNames) {
+ setWidgetStyleName(oldStyle, false);
+ setWidgetStyleNameWithPrefix(primaryStyleName + "-", oldStyle,
+ false);
+ }
+ styleNames.clear();
}
- // add error classname to components w/ error
- if (null != state.getErrorMessage()) {
- styleBuf.append(" ");
- styleBuf.append(primaryStyleName);
- styleBuf.append(ApplicationConnection.ERROR_CLASSNAME_EXT);
- }
-
- return styleBuf.toString();
}
- protected void updateStyleNames() {
- Widget widget = getWidget();
-
- widget.addStyleName("v");
-
- // Disabled
- if (!isEnabled()) {
- widget.addStyleName(ApplicationConnection.DISABLED_CLASSNAME);
- } else {
- widget.removeStyleName(ApplicationConnection.DISABLED_CLASSNAME);
- }
-
- // Read-only
- if (isReadOnly()) {
- widget.addStyleName("v-readonly");
- } else {
- widget.removeStyleName("v-readonly");
- }
+ /**
+ * This is used to add / remove state related style names from the widget.
+ * <p>
+ * Override this method for example if the style name given here should be
+ * updated in another widget in addition to the one returned by the
+ * {@link #getWidget()}.
+ * </p>
+ *
+ * @param styleName
+ * the style name to be added or removed
+ * @param add
+ * <code>true</code> to add the given style, <code>false</code>
+ * to remove it
+ */
+ protected void setWidgetStyleName(String styleName, boolean add) {
+ getWidget().setStyleName(styleName, add);
+ }
- // Error
- if (null != getState().getErrorMessage()) {
- widget.addStyleDependentName("error");
+ /**
+ * This is used to add / remove state related prefixed style names from the
+ * widget.
+ * <p>
+ * Override this method if the prefixed style name given here should be
+ * updated in another widget in addition to the one returned by the
+ * <code>Connector</code>'s {@link #getWidget()}, or if the prefix should be
+ * different. For example see
+ * {@link PopupDateFieldConnector#setWidgetStyleNameWithPrefix(String, String, boolean)}
+ * </p>
+ *
+ * @param styleName
+ * the style name to be added or removed
+ * @param add
+ * <code>true</code> to add the given style, <code>false</code>
+ * to remove it
+ * @deprecated This will be removed once styles are no longer added with
+ * prefixes.
+ */
+ @Deprecated
+ protected void setWidgetStyleNameWithPrefix(String prefix,
+ String styleName, boolean add) {
+ if (!styleName.startsWith("-")) {
+ if (!prefix.endsWith("-")) {
+ prefix += "-";
+ }
} else {
- widget.removeStyleDependentName("error");
- }
-
- // Additional style names
- List<String> newStyleNames = getState().getStyles();
- if (newStyleNames == null) {
- newStyleNames = new LinkedList<String>();
- }
- if (styleNames != null) {
- // Remove previous styles which are no longer in the current list
- for (String style : styleNames) {
- if (!newStyleNames.contains(style)) {
- widget.removeStyleName(style);
- widget.removeStyleDependentName(style);
- }
+ if (prefix.endsWith("-")) {
+ styleName.replaceFirst("-", "");
}
}
- // Add any new styles
- for (String style : newStyleNames) {
- widget.addStyleName(style);
- widget.addStyleDependentName(style);
- }
- styleNames = newStyleNames;
+ getWidget().setStyleName(prefix + styleName, add);
}
/*
@@ -325,11 +345,13 @@ public abstract class AbstractComponentConnector extends AbstractConnector
*
* @see com.vaadin.terminal.gwt.client.ComponentConnector#isReadOnly()
*/
+ @Override
@Deprecated
public boolean isReadOnly() {
return getState().isReadOnly();
}
+ @Override
public LayoutManager getLayoutManager() {
return LayoutManager.get(getConnection());
}
@@ -343,6 +365,7 @@ public abstract class AbstractComponentConnector extends AbstractConnector
* @return true if an event listener has been registered with the given
* event identifier on the server side, false otherwise
*/
+ @Override
public boolean hasEventListener(String eventIdentifier) {
Set<String> reg = getState().getRegisteredEventListeners();
return (reg != null && reg.contains(eventIdentifier));
@@ -368,4 +391,17 @@ public abstract class AbstractComponentConnector extends AbstractConnector
+ ") has been unregistered. Widget was removed.");
}
}
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * com.vaadin.terminal.gwt.client.ComponentConnector#getTooltipInfo(com.
+ * google.gwt.dom.client.Element)
+ */
+ @Override
+ public TooltipInfo getTooltipInfo(Element element) {
+ return new TooltipInfo(getState().getDescription(), getState()
+ .getErrorMessage());
+ }
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/AbstractComponentContainerConnector.java b/src/com/vaadin/terminal/gwt/client/ui/AbstractComponentContainerConnector.java
index c6bfba5023..6b294e65b8 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/AbstractComponentContainerConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/AbstractComponentContainerConnector.java
@@ -35,6 +35,7 @@ public abstract class AbstractComponentContainerConnector extends
* @see
* com.vaadin.terminal.gwt.client.ComponentContainerConnector#getChildren()
*/
+ @Override
public List<ComponentConnector> getChildComponents() {
if (childComponents == null) {
return Collections.emptyList();
@@ -50,6 +51,7 @@ public abstract class AbstractComponentContainerConnector extends
* com.vaadin.terminal.gwt.client.ComponentContainerConnector#setChildren
* (java.util.Collection)
*/
+ @Override
public void setChildComponents(List<ComponentConnector> childComponents) {
this.childComponents = childComponents;
}
@@ -61,6 +63,7 @@ public abstract class AbstractComponentContainerConnector extends
* connectorHierarchyChanged
* (com.vaadin.terminal.gwt.client.ConnectorHierarchyChangedEvent)
*/
+ @Override
public void onConnectorHierarchyChange(ConnectorHierarchyChangeEvent event) {
if (debugLogging) {
VConsole.log("Hierarchy changed for "
@@ -79,6 +82,7 @@ public abstract class AbstractComponentContainerConnector extends
}
}
+ @Override
public HandlerRegistration addConnectorHierarchyChangeHandler(
ConnectorHierarchyChangeHandler handler) {
return ensureHandlerManager().addHandler(
diff --git a/src/com/vaadin/terminal/gwt/client/ui/AbstractConnector.java b/src/com/vaadin/terminal/gwt/client/ui/AbstractConnector.java
index d34529ee4e..4efd2f5c2f 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/AbstractConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/AbstractConnector.java
@@ -13,12 +13,12 @@ import java.util.Map;
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.shared.communication.ClientRpc;
+import com.vaadin.shared.communication.SharedState;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.ServerConnector;
import com.vaadin.terminal.gwt.client.Util;
import com.vaadin.terminal.gwt.client.VConsole;
-import com.vaadin.terminal.gwt.client.communication.ClientRpc;
-import com.vaadin.terminal.gwt.client.communication.SharedState;
import com.vaadin.terminal.gwt.client.communication.StateChangeEvent;
import com.vaadin.terminal.gwt.client.communication.StateChangeEvent.StateChangeHandler;
@@ -57,6 +57,7 @@ public abstract class AbstractConnector implements ServerConnector,
*
* @see com.vaadin.terminal.gwt.client.VPaintable#getConnection()
*/
+ @Override
public final ApplicationConnection getConnection() {
return connection;
}
@@ -66,6 +67,7 @@ public abstract class AbstractConnector implements ServerConnector,
*
* @see com.vaadin.terminal.gwt.client.Connector#getId()
*/
+ @Override
public String getConnectorId() {
return id;
}
@@ -78,6 +80,7 @@ public abstract class AbstractConnector implements ServerConnector,
* <p>
* Connector classes should override {@link #init()} instead of this method.
*/
+ @Override
public final void doInit(String connectorId,
ApplicationConnection connection) {
this.connection = connection;
@@ -140,6 +143,7 @@ public abstract class AbstractConnector implements ServerConnector,
}
}
+ @Override
public <T extends ClientRpc> Collection<T> getRpcImplementations(
String rpcInterfaceId) {
if (null == rpcImplementations) {
@@ -148,6 +152,7 @@ public abstract class AbstractConnector implements ServerConnector,
return (Collection<T>) rpcImplementations.get(rpcInterfaceId);
}
+ @Override
public void fireEvent(GwtEvent<?> event) {
if (handlerManager != null) {
handlerManager.fireEvent(event);
@@ -162,11 +167,13 @@ public abstract class AbstractConnector implements ServerConnector,
return handlerManager;
}
+ @Override
public HandlerRegistration addStateChangeHandler(StateChangeHandler handler) {
return ensureHandlerManager()
.addHandler(StateChangeEvent.TYPE, handler);
}
+ @Override
public void removeStateChangeHandler(StateChangeHandler handler) {
ensureHandlerManager().removeHandler(StateChangeEvent.TYPE, handler);
}
@@ -186,6 +193,7 @@ public abstract class AbstractConnector implements ServerConnector,
*
* @see com.vaadin.terminal.gwt.client.ServerConnector#onUnregister()
*/
+ @Override
public void onUnregister() {
if (debugLogging) {
VConsole.log("Unregistered connector "
@@ -201,6 +209,7 @@ public abstract class AbstractConnector implements ServerConnector,
*
* @return the current shared state (never null)
*/
+ @Override
public SharedState getState() {
if (state == null) {
state = createState();
@@ -221,14 +230,17 @@ public abstract class AbstractConnector implements ServerConnector,
return ConnectorStateFactory.createState(getClass());
}
+ @Override
public ServerConnector getParent() {
return parent;
}
+ @Override
public void setParent(ServerConnector parent) {
this.parent = parent;
}
+ @Override
public List<ServerConnector> getChildren() {
if (children == null) {
return Collections.emptyList();
@@ -236,10 +248,12 @@ public abstract class AbstractConnector implements ServerConnector,
return children;
}
+ @Override
public void setChildren(List<ServerConnector> children) {
this.children = children;
}
+ @Override
public boolean isEnabled() {
if (!getState().isEnabled()) {
return false;
@@ -252,6 +266,7 @@ public abstract class AbstractConnector implements ServerConnector,
}
}
+ @Override
public void updateEnabledState(boolean enabledState) {
if (lastEnabledState == enabledState) {
return;
diff --git a/src/com/vaadin/terminal/gwt/client/ui/AbstractFieldConnector.java b/src/com/vaadin/terminal/gwt/client/ui/AbstractFieldConnector.java
index 4be0f02c2a..4611b5a4ed 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/AbstractFieldConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/AbstractFieldConnector.java
@@ -3,7 +3,7 @@
*/
package com.vaadin.terminal.gwt.client.ui;
-import com.vaadin.terminal.gwt.client.AbstractFieldState;
+import com.vaadin.shared.AbstractFieldState;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
public abstract class AbstractFieldConnector extends AbstractComponentConnector {
@@ -35,20 +35,15 @@ public abstract class AbstractFieldConnector extends AbstractComponentConnector
}
@Override
- protected String getStyleNames(String primaryStyleName) {
- String styleNames = super.getStyleNames(primaryStyleName);
+ protected void updateWidgetStyleNames() {
+ super.updateWidgetStyleNames();
- if (isModified()) {
- // add modified classname to Fields
- styleNames += " " + ApplicationConnection.MODIFIED_CLASSNAME;
- }
+ // add / remove modified style name to Fields
+ setWidgetStyleName(ApplicationConnection.MODIFIED_CLASSNAME,
+ isModified());
- if (isRequired()) {
- // add required classname to Fields
- styleNames += " " + primaryStyleName
- + ApplicationConnection.REQUIRED_CLASSNAME_EXT;
- }
-
- return styleNames;
+ // add / remove error style name to Fields
+ setWidgetStyleNameWithPrefix(getWidget().getStylePrimaryName(),
+ ApplicationConnection.REQUIRED_CLASSNAME_EXT, isRequired());
}
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/AbstractLayoutConnector.java b/src/com/vaadin/terminal/gwt/client/ui/AbstractLayoutConnector.java
index 175e67807f..cd059357a8 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/AbstractLayoutConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/AbstractLayoutConnector.java
@@ -3,6 +3,8 @@
*/
package com.vaadin.terminal.gwt.client.ui;
+import com.vaadin.shared.ui.AbstractLayoutState;
+
public abstract class AbstractLayoutConnector extends
AbstractComponentContainerConnector {
diff --git a/src/com/vaadin/terminal/gwt/client/ui/Action.java b/src/com/vaadin/terminal/gwt/client/ui/Action.java
index ca13cfc7f3..1a92e30f3f 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/Action.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/Action.java
@@ -25,6 +25,7 @@ public abstract class Action implements Command {
/**
* Executed when action fired
*/
+ @Override
public abstract void execute();
public String getHTML() {
diff --git a/src/com/vaadin/terminal/gwt/client/ui/ClickEventHandler.java b/src/com/vaadin/terminal/gwt/client/ui/ClickEventHandler.java
index 758f798ef2..b7b6b13d3c 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/ClickEventHandler.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/ClickEventHandler.java
@@ -4,8 +4,8 @@
package com.vaadin.terminal.gwt.client.ui;
import com.google.gwt.dom.client.NativeEvent;
+import com.vaadin.shared.MouseEventDetails;
import com.vaadin.terminal.gwt.client.ComponentConnector;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
import com.vaadin.terminal.gwt.client.MouseEventDetailsBuilder;
public abstract class ClickEventHandler extends AbstractClickEventHandler {
diff --git a/src/com/vaadin/terminal/gwt/client/ui/ConnectorClassBasedFactory.java b/src/com/vaadin/terminal/gwt/client/ui/ConnectorClassBasedFactory.java
index 051ebdc6df..79dc138df9 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/ConnectorClassBasedFactory.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/ConnectorClassBasedFactory.java
@@ -6,7 +6,7 @@ package com.vaadin.terminal.gwt.client.ui;
import java.util.HashMap;
import java.util.Map;
-import com.vaadin.terminal.gwt.client.Connector;
+import com.vaadin.shared.Connector;
public abstract class ConnectorClassBasedFactory<T> {
public interface Creator<T> {
diff --git a/src/com/vaadin/terminal/gwt/client/ui/ConnectorStateFactory.java b/src/com/vaadin/terminal/gwt/client/ui/ConnectorStateFactory.java
index 86e651a0a5..535fd29dfe 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/ConnectorStateFactory.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/ConnectorStateFactory.java
@@ -4,8 +4,8 @@
package com.vaadin.terminal.gwt.client.ui;
import com.google.gwt.core.client.GWT;
-import com.vaadin.terminal.gwt.client.Connector;
-import com.vaadin.terminal.gwt.client.communication.SharedState;
+import com.vaadin.shared.Connector;
+import com.vaadin.shared.communication.SharedState;
public abstract class ConnectorStateFactory extends
ConnectorClassBasedFactory<SharedState> {
diff --git a/src/com/vaadin/terminal/gwt/client/ui/ConnectorWidgetFactory.java b/src/com/vaadin/terminal/gwt/client/ui/ConnectorWidgetFactory.java
index 063d9f03a1..03d2069a94 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/ConnectorWidgetFactory.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/ConnectorWidgetFactory.java
@@ -15,6 +15,7 @@ public abstract class ConnectorWidgetFactory extends
// TODO Move to generator
{
addCreator(TextFieldConnector.class, new Creator<Widget>() {
+ @Override
public Widget create() {
return GWT.create(VTextField.class);
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/FocusableFlexTable.java b/src/com/vaadin/terminal/gwt/client/ui/FocusableFlexTable.java
index fc97bafc46..2fac234587 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/FocusableFlexTable.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/FocusableFlexTable.java
@@ -42,6 +42,7 @@ public class FocusableFlexTable extends FlexTable implements HasFocusHandlers,
* com.google.gwt.event.dom.client.HasFocusHandlers#addFocusHandler(com.
* google.gwt.event.dom.client.FocusHandler)
*/
+ @Override
public HandlerRegistration addFocusHandler(FocusHandler handler) {
return addDomHandler(handler, FocusEvent.getType());
}
@@ -53,6 +54,7 @@ public class FocusableFlexTable extends FlexTable implements HasFocusHandlers,
* com.google.gwt.event.dom.client.HasBlurHandlers#addBlurHandler(com.google
* .gwt.event.dom.client.BlurHandler)
*/
+ @Override
public HandlerRegistration addBlurHandler(BlurHandler handler) {
return addDomHandler(handler, BlurEvent.getType());
}
@@ -64,6 +66,7 @@ public class FocusableFlexTable extends FlexTable implements HasFocusHandlers,
* com.google.gwt.event.dom.client.HasKeyDownHandlers#addKeyDownHandler(
* com.google.gwt.event.dom.client.KeyDownHandler)
*/
+ @Override
public HandlerRegistration addKeyDownHandler(KeyDownHandler handler) {
return addDomHandler(handler, KeyDownEvent.getType());
}
@@ -75,6 +78,7 @@ public class FocusableFlexTable extends FlexTable implements HasFocusHandlers,
* com.google.gwt.event.dom.client.HasKeyPressHandlers#addKeyPressHandler
* (com.google.gwt.event.dom.client.KeyPressHandler)
*/
+ @Override
public HandlerRegistration addKeyPressHandler(KeyPressHandler handler) {
return addDomHandler(handler, KeyPressEvent.getType());
}
@@ -99,6 +103,7 @@ public class FocusableFlexTable extends FlexTable implements HasFocusHandlers,
*
* @see com.vaadin.terminal.gwt.client.Focusable#focus()
*/
+ @Override
public void focus() {
setFocus(true);
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/FocusableFlowPanel.java b/src/com/vaadin/terminal/gwt/client/ui/FocusableFlowPanel.java
index 831add049b..258fe441af 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/FocusableFlowPanel.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/FocusableFlowPanel.java
@@ -39,6 +39,7 @@ public class FocusableFlowPanel extends FlowPanel implements HasFocusHandlers,
* com.google.gwt.event.dom.client.HasFocusHandlers#addFocusHandler(com.
* google.gwt.event.dom.client.FocusHandler)
*/
+ @Override
public HandlerRegistration addFocusHandler(FocusHandler handler) {
return addDomHandler(handler, FocusEvent.getType());
}
@@ -50,6 +51,7 @@ public class FocusableFlowPanel extends FlowPanel implements HasFocusHandlers,
* com.google.gwt.event.dom.client.HasBlurHandlers#addBlurHandler(com.google
* .gwt.event.dom.client.BlurHandler)
*/
+ @Override
public HandlerRegistration addBlurHandler(BlurHandler handler) {
return addDomHandler(handler, BlurEvent.getType());
}
@@ -61,6 +63,7 @@ public class FocusableFlowPanel extends FlowPanel implements HasFocusHandlers,
* com.google.gwt.event.dom.client.HasKeyDownHandlers#addKeyDownHandler(
* com.google.gwt.event.dom.client.KeyDownHandler)
*/
+ @Override
public HandlerRegistration addKeyDownHandler(KeyDownHandler handler) {
return addDomHandler(handler, KeyDownEvent.getType());
}
@@ -72,6 +75,7 @@ public class FocusableFlowPanel extends FlowPanel implements HasFocusHandlers,
* com.google.gwt.event.dom.client.HasKeyPressHandlers#addKeyPressHandler
* (com.google.gwt.event.dom.client.KeyPressHandler)
*/
+ @Override
public HandlerRegistration addKeyPressHandler(KeyPressHandler handler) {
return addDomHandler(handler, KeyPressEvent.getType());
}
@@ -94,6 +98,7 @@ public class FocusableFlowPanel extends FlowPanel implements HasFocusHandlers,
/**
* Focus the panel
*/
+ @Override
public void focus() {
setFocus(true);
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/FocusableScrollPanel.java b/src/com/vaadin/terminal/gwt/client/ui/FocusableScrollPanel.java
index ef1ea8521b..0ba42eb861 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/FocusableScrollPanel.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/FocusableScrollPanel.java
@@ -110,6 +110,7 @@ public class FocusableScrollPanel extends SimpleFocusablePanel implements
}
}
+ @Override
public HandlerRegistration addScrollHandler(ScrollHandler handler) {
return addDomHandler(handler, ScrollEvent.getType());
}
@@ -168,8 +169,10 @@ public class FocusableScrollPanel extends SimpleFocusablePanel implements
}
}
+ @Override
public void onScroll(ScrollEvent event) {
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
+ @Override
public void execute() {
focusElement.getStyle().setTop(getScrollPosition(), Unit.PX);
focusElement.getStyle().setLeft(getHorizontalScrollPosition(),
diff --git a/src/com/vaadin/terminal/gwt/client/ui/JavaScriptComponentConnector.java b/src/com/vaadin/terminal/gwt/client/ui/JavaScriptComponentConnector.java
index bb062a6677..380d96115c 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/JavaScriptComponentConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/JavaScriptComponentConnector.java
@@ -3,6 +3,8 @@
*/
package com.vaadin.terminal.gwt.client.ui;
+import com.vaadin.shared.ui.Connect;
+import com.vaadin.shared.ui.JavaScriptComponentState;
import com.vaadin.terminal.gwt.client.JavaScriptConnectorHelper;
import com.vaadin.terminal.gwt.client.communication.HasJavaScriptConnectorHelper;
import com.vaadin.ui.AbstractJavaScriptComponent;
@@ -31,6 +33,7 @@ public final class JavaScriptComponentConnector extends
helper.init();
}
+ @Override
public JavaScriptConnectorHelper getJavascriptConnectorHelper() {
return helper;
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/LayoutClickEventHandler.java b/src/com/vaadin/terminal/gwt/client/ui/LayoutClickEventHandler.java
index 7a5d85e34b..9aafaa0bbf 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/LayoutClickEventHandler.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/LayoutClickEventHandler.java
@@ -5,8 +5,9 @@ package com.vaadin.terminal.gwt.client.ui;
import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.user.client.Element;
+import com.vaadin.shared.MouseEventDetails;
+import com.vaadin.shared.ui.LayoutClickRpc;
import com.vaadin.terminal.gwt.client.ComponentConnector;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
import com.vaadin.terminal.gwt.client.MouseEventDetailsBuilder;
public abstract class LayoutClickEventHandler extends AbstractClickEventHandler {
diff --git a/src/com/vaadin/terminal/gwt/client/ui/MediaBaseConnector.java b/src/com/vaadin/terminal/gwt/client/ui/MediaBaseConnector.java
index 42027f911b..ccf90b2285 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/MediaBaseConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/MediaBaseConnector.java
@@ -3,39 +3,25 @@
*/
package com.vaadin.terminal.gwt.client.ui;
+import com.vaadin.shared.communication.URLReference;
+import com.vaadin.shared.ui.AbstractMediaState;
+import com.vaadin.shared.ui.MediaControl;
import com.vaadin.terminal.gwt.client.Util;
-import com.vaadin.terminal.gwt.client.communication.ClientRpc;
import com.vaadin.terminal.gwt.client.communication.StateChangeEvent;
-import com.vaadin.terminal.gwt.client.communication.URLReference;
public abstract class MediaBaseConnector extends AbstractComponentConnector {
- /**
- * Server to client RPC interface for controlling playback of the media.
- *
- * @since 7.0
- */
- public static interface MediaControl extends ClientRpc {
- /**
- * Start playing the media.
- */
- public void play();
-
- /**
- * Pause playback of the media.
- */
- public void pause();
- }
-
@Override
protected void init() {
super.init();
registerRpc(MediaControl.class, new MediaControl() {
+ @Override
public void play() {
getWidget().play();
}
+ @Override
public void pause() {
getWidget().pause();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/ShortcutActionHandler.java b/src/com/vaadin/terminal/gwt/client/ui/ShortcutActionHandler.java
index 37e9ab4a69..40454345bc 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/ShortcutActionHandler.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/ShortcutActionHandler.java
@@ -149,6 +149,7 @@ public class ShortcutActionHandler {
} else {
shakeTarget(et);
Scheduler.get().scheduleDeferred(new Command() {
+ @Override
public void execute() {
shakeTarget(et);
}
@@ -156,6 +157,7 @@ public class ShortcutActionHandler {
}
Scheduler.get().scheduleDeferred(new Command() {
+ @Override
public void execute() {
if (finalTarget != null) {
client.updateVariable(paintableId, "actiontarget",
@@ -187,6 +189,7 @@ public class ShortcutActionHandler {
// deferred. Will cause a small flickering, so not doing it for all
// browsers.
Scheduler.get().scheduleDeferred(new Command() {
+ @Override
public void execute() {
focus(e);
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/SimpleFocusablePanel.java b/src/com/vaadin/terminal/gwt/client/ui/SimpleFocusablePanel.java
index 9baa1db007..ec62b82ce1 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/SimpleFocusablePanel.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/SimpleFocusablePanel.java
@@ -36,18 +36,22 @@ public class SimpleFocusablePanel extends SimplePanel implements
setTabIndex(0);
}
+ @Override
public HandlerRegistration addFocusHandler(FocusHandler handler) {
return addDomHandler(handler, FocusEvent.getType());
}
+ @Override
public HandlerRegistration addBlurHandler(BlurHandler handler) {
return addDomHandler(handler, BlurEvent.getType());
}
+ @Override
public HandlerRegistration addKeyDownHandler(KeyDownHandler handler) {
return addDomHandler(handler, KeyDownEvent.getType());
}
+ @Override
public HandlerRegistration addKeyPressHandler(KeyPressHandler handler) {
return addDomHandler(handler, KeyPressEvent.getType());
}
@@ -64,6 +68,7 @@ public class SimpleFocusablePanel extends SimplePanel implements
}
}
+ @Override
public void focus() {
setFocus(true);
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/TouchScrollDelegate.java b/src/com/vaadin/terminal/gwt/client/ui/TouchScrollDelegate.java
index 7302f9f2ac..16c32acecc 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/TouchScrollDelegate.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/TouchScrollDelegate.java
@@ -121,6 +121,7 @@ public class TouchScrollDelegate implements NativePreviewHandler {
setElements(scrollables);
}
+ @Override
public void onTouchStart(TouchStartEvent event) {
assert delegate != null;
delegate.onTouchStart(event);
@@ -593,6 +594,7 @@ public class TouchScrollDelegate implements NativePreviewHandler {
- scrolledElement.getClientHeight();
}
+ @Override
public void onPreviewNativeEvent(NativePreviewEvent event) {
int typeInt = event.getTypeInt();
if (transitionOn) {
diff --git a/src/com/vaadin/terminal/gwt/client/ui/TreeImages.java b/src/com/vaadin/terminal/gwt/client/ui/TreeImages.java
index 37f8889463..221a409511 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/TreeImages.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/TreeImages.java
@@ -15,6 +15,7 @@ public interface TreeImages extends com.google.gwt.user.client.ui.TreeImages {
* @gwt.resource com/vaadin/terminal/gwt/public/default/tree/img/expanded
* .png
*/
+ @Override
AbstractImagePrototype treeOpen();
/**
@@ -24,6 +25,7 @@ public interface TreeImages extends com.google.gwt.user.client.ui.TreeImages {
* @gwt.resource com/vaadin/terminal/gwt/public/default/tree/img/collapsed
* .png
*/
+ @Override
AbstractImagePrototype treeClosed();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/UnknownComponentConnector.java b/src/com/vaadin/terminal/gwt/client/ui/UnknownComponentConnector.java
index 0cccec6481..83ac97458e 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/UnknownComponentConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/UnknownComponentConnector.java
@@ -4,7 +4,6 @@
package com.vaadin.terminal.gwt.client.ui;
-
public class UnknownComponentConnector extends AbstractComponentConnector {
@Override
diff --git a/src/com/vaadin/terminal/gwt/client/ui/VContextMenu.java b/src/com/vaadin/terminal/gwt/client/ui/VContextMenu.java
index 692e13bd94..607abe893a 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/VContextMenu.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/VContextMenu.java
@@ -46,6 +46,7 @@ public class VContextMenu extends VOverlay implements SubPartAware {
private VLazyExecutor delayedImageLoadExecutioner = new VLazyExecutor(100,
new ScheduledCommand() {
+ @Override
public void execute() {
imagesLoaded();
}
@@ -103,6 +104,7 @@ public class VContextMenu extends VOverlay implements SubPartAware {
Util.sinkOnloadForImages(menu.getElement());
setPopupPositionAndShow(new PositionCallback() {
+ @Override
public void setPosition(int offsetWidth, int offsetHeight) {
// mac FF gets bad width due GWT popups overflow hacks,
// re-determine width
@@ -129,6 +131,7 @@ public class VContextMenu extends VOverlay implements SubPartAware {
* the positioning has been done.
*/
Scheduler.get().scheduleDeferred(new Command() {
+ @Override
public void execute() {
// Focus the menu.
menu.setFocus(true);
@@ -186,18 +189,22 @@ public class VContextMenu extends VOverlay implements SubPartAware {
return super.getItems().get(index);
}
+ @Override
public HandlerRegistration addFocusHandler(FocusHandler handler) {
return addDomHandler(handler, FocusEvent.getType());
}
+ @Override
public HandlerRegistration addBlurHandler(BlurHandler handler) {
return addDomHandler(handler, BlurEvent.getType());
}
+ @Override
public HandlerRegistration addKeyDownHandler(KeyDownHandler handler) {
return addDomHandler(handler, KeyDownEvent.getType());
}
+ @Override
public HandlerRegistration addKeyPressHandler(KeyPressHandler handler) {
return addDomHandler(handler, KeyPressEvent.getType());
}
@@ -215,6 +222,7 @@ public class VContextMenu extends VOverlay implements SubPartAware {
setFocus(true);
}
+ @Override
public void onLoad(LoadEvent event) {
// Handle icon onload events to ensure shadow is resized correctly
delayedImageLoadExecutioner.trigger();
@@ -222,6 +230,7 @@ public class VContextMenu extends VOverlay implements SubPartAware {
}
+ @Override
public Element getSubPartElement(String subPart) {
int index = Integer.parseInt(subPart.substring(6));
// ApplicationConnection.getConsole().log(
@@ -232,6 +241,7 @@ public class VContextMenu extends VOverlay implements SubPartAware {
return item.getElement().getFirstChildElement().cast();
}
+ @Override
public String getSubPartName(Element subElement) {
if (getElement().isOrHasChild(subElement)) {
com.google.gwt.dom.client.Element e = subElement;
diff --git a/src/com/vaadin/terminal/gwt/client/ui/VOverlay.java b/src/com/vaadin/terminal/gwt/client/ui/VOverlay.java
index df655ef959..f2f13d1f35 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/VOverlay.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/VOverlay.java
@@ -6,7 +6,10 @@ package com.vaadin.terminal.gwt.client.ui;
import com.google.gwt.animation.client.Animation;
import com.google.gwt.dom.client.Document;
+import com.google.gwt.dom.client.IFrameElement;
import com.google.gwt.dom.client.Style;
+import com.google.gwt.dom.client.Style.BorderStyle;
+import com.google.gwt.dom.client.Style.Position;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.logical.shared.CloseEvent;
import com.google.gwt.event.logical.shared.CloseHandler;
@@ -14,6 +17,7 @@ import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.RootPanel;
+import com.google.gwt.user.client.ui.Widget;
import com.vaadin.terminal.gwt.client.BrowserInfo;
/**
@@ -23,6 +27,49 @@ import com.vaadin.terminal.gwt.client.BrowserInfo;
*/
public class VOverlay extends PopupPanel implements CloseHandler<PopupPanel> {
+ public static class PositionAndSize {
+ private int left, top, width, height;
+
+ public int getLeft() {
+ return left;
+ }
+
+ public void setLeft(int left) {
+ this.left = left;
+ }
+
+ public int getTop() {
+ return top;
+ }
+
+ public void setTop(int top) {
+ this.top = top;
+ }
+
+ public int getWidth() {
+ return width;
+ }
+
+ public void setWidth(int width) {
+ this.width = width;
+ }
+
+ public int getHeight() {
+ return height;
+ }
+
+ public void setHeight(int height) {
+ this.height = height;
+ }
+
+ public void setAnimationFromCenterProgress(double progress) {
+ left += (int) (width * (1.0 - progress) / 2.0);
+ top += (int) (height * (1.0 - progress) / 2.0);
+ width = (int) (width * progress);
+ height = (int) (height * progress);
+ }
+ }
+
/*
* The z-index value from where all overlays live. This can be overridden in
* any extending class.
@@ -45,6 +92,18 @@ public class VOverlay extends PopupPanel implements CloseHandler<PopupPanel> {
*/
private Element shadow;
+ /*
+ * Creator of VOverlow (widget that made the instance, not the layout
+ * parent)
+ */
+ private Widget owner;
+
+ /**
+ * The shim iframe behind the overlay, allowing PDFs and applets to be
+ * covered by overlays.
+ */
+ private IFrameElement shimElement;
+
/**
* The HTML snippet that is used to render the actual shadow. In consists of
* nine different DIV-elements with the following class names:
@@ -66,6 +125,11 @@ public class VOverlay extends PopupPanel implements CloseHandler<PopupPanel> {
*/
private static final String SHADOW_HTML = "<div class=\"top-left\"></div><div class=\"top\"></div><div class=\"top-right\"></div><div class=\"left\"></div><div class=\"center\"></div><div class=\"right\"></div><div class=\"bottom-left\"></div><div class=\"bottom\"></div><div class=\"bottom-right\"></div>";
+ /**
+ * Matches {@link PopupPanel}.ANIMATION_DURATION
+ */
+ private static final int POPUP_PANEL_ANIMATION_DURATION = 200;
+
private boolean sinkShadowEvents = false;
public VOverlay() {
@@ -116,9 +180,15 @@ public class VOverlay extends PopupPanel implements CloseHandler<PopupPanel> {
return shadow != null;
}
+ private void removeShim() {
+ if (shimElement != null) {
+ shimElement.removeFromParent();
+ }
+ }
+
private void removeShadowIfPresent() {
if (isShadowAttached()) {
- shadow.getParentElement().removeChild(shadow);
+ shadow.removeFromParent();
// Remove event listener from the shadow
unsinkShadowEvents();
@@ -129,6 +199,10 @@ public class VOverlay extends PopupPanel implements CloseHandler<PopupPanel> {
return isShadowEnabled() && shadow.getParentElement() != null;
}
+ private boolean isShimAttached() {
+ return shimElement != null && shimElement.hasParentElement();
+ }
+
private void adjustZIndex() {
setZIndex(Z_INDEX);
}
@@ -156,7 +230,46 @@ public class VOverlay extends PopupPanel implements CloseHandler<PopupPanel> {
style.setMarginLeft(-adjustByRelativeLeftBodyMargin(), Unit.PX);
style.setMarginTop(-adjustByRelativeTopBodyMargin(), Unit.PX);
super.setPopupPosition(left, top);
- updateShadowSizeAndPosition(isAnimationEnabled() ? 0 : 1);
+ sizeOrPositionUpdated(isAnimationEnabled() ? 0 : 1);
+ }
+
+ private IFrameElement getShimElement() {
+ if (shimElement == null) {
+ shimElement = Document.get().createIFrameElement();
+
+ // Insert shim iframe before the main overlay element. It does not
+ // matter if it is in front or behind the shadow as we cannot put a
+ // shim behind the shadow due to its transparency.
+ shimElement.getStyle().setPosition(Position.ABSOLUTE);
+ shimElement.getStyle().setBorderStyle(BorderStyle.NONE);
+ shimElement.setFrameBorder(0);
+ shimElement.setMarginHeight(0);
+ }
+ return shimElement;
+ }
+
+ private int getActualTop() {
+ int y = getAbsoluteTop();
+
+ /* This is needed for IE7 at least */
+ // Account for the difference between absolute position and the
+ // body's positioning context.
+ y -= Document.get().getBodyOffsetTop();
+ y -= adjustByRelativeTopBodyMargin();
+
+ return y;
+ }
+
+ private int getActualLeft() {
+ int x = getAbsoluteLeft();
+
+ /* This is needed for IE7 at least */
+ // Account for the difference between absolute position and the
+ // body's positioning context.
+ x -= Document.get().getBodyOffsetLeft();
+ x -= adjustByRelativeLeftBodyMargin();
+
+ return x;
}
private static int adjustByRelativeTopBodyMargin() {
@@ -189,13 +302,10 @@ public class VOverlay extends PopupPanel implements CloseHandler<PopupPanel> {
@Override
public void show() {
super.show();
- if (isShadowEnabled()) {
- if (isAnimationEnabled()) {
- ShadowAnimation sa = new ShadowAnimation();
- sa.run(200);
- } else {
- updateShadowSizeAndPosition(1.0);
- }
+ if (isAnimationEnabled()) {
+ new ResizeAnimation().run(POPUP_PANEL_ANIMATION_DURATION);
+ } else {
+ sizeOrPositionUpdated(1.0);
}
}
@@ -205,6 +315,7 @@ public class VOverlay extends PopupPanel implements CloseHandler<PopupPanel> {
// Always ensure shadow is removed when the overlay is removed.
removeShadowIfPresent();
+ removeShim();
}
@Override
@@ -219,13 +330,13 @@ public class VOverlay extends PopupPanel implements CloseHandler<PopupPanel> {
@Override
public void setWidth(String width) {
super.setWidth(width);
- updateShadowSizeAndPosition(1.0);
+ sizeOrPositionUpdated(1.0);
}
@Override
public void setHeight(String height) {
super.setHeight(height);
- updateShadowSizeAndPosition(1.0);
+ sizeOrPositionUpdated(1.0);
}
/**
@@ -244,28 +355,29 @@ public class VOverlay extends PopupPanel implements CloseHandler<PopupPanel> {
}
}
- /*
+ /**
* Extending classes should always call this method after they change the
* size of overlay without using normal 'setWidth(String)' and
* 'setHeight(String)' methods (if not calling super.setWidth/Height).
+ *
*/
- public void updateShadowSizeAndPosition() {
- updateShadowSizeAndPosition(1.0);
+ public void sizeOrPositionUpdated() {
+ sizeOrPositionUpdated(1.0);
}
/**
- * Recalculates proper position and dimensions for the shadow element. Can
- * be used to animate the shadow, using the 'progress' parameter (used to
- * animate the shadow in sync with GWT PopupPanel's default animation
- * 'PopupPanel.AnimationType.CENTER').
+ * Recalculates proper position and dimensions for the shadow and shim
+ * elements. Can be used to animate the related elements, using the
+ * 'progress' parameter (used to animate the shadow in sync with GWT
+ * PopupPanel's default animation 'PopupPanel.AnimationType.CENTER').
*
* @param progress
* A value between 0.0 and 1.0, indicating the progress of the
* animation (0=start, 1=end).
*/
- private void updateShadowSizeAndPosition(final double progress) {
+ private void sizeOrPositionUpdated(final double progress) {
// Don't do anything if overlay element is not attached
- if (!isAttached() || shadow == null) {
+ if (!isAttached()) {
return;
}
// Calculate proper z-index
@@ -288,37 +400,26 @@ public class VOverlay extends PopupPanel implements CloseHandler<PopupPanel> {
getOffsetWidth();
}
- int x = getAbsoluteLeft();
- int y = getAbsoluteTop();
+ PositionAndSize positionAndSize = new PositionAndSize();
+ positionAndSize.left = getActualLeft();
+ positionAndSize.top = getActualTop();
+ positionAndSize.width = getOffsetWidth();
+ positionAndSize.height = getOffsetHeight();
- /* This is needed for IE7 at least */
- // Account for the difference between absolute position and the
- // body's positioning context.
- x -= Document.get().getBodyOffsetLeft();
- y -= Document.get().getBodyOffsetTop();
- x -= adjustByRelativeLeftBodyMargin();
- y -= adjustByRelativeTopBodyMargin();
-
- int width = getOffsetWidth();
- int height = getOffsetHeight();
-
- if (width < 0) {
- width = 0;
+ if (positionAndSize.width < 0) {
+ positionAndSize.width = 0;
}
- if (height < 0) {
- height = 0;
+ if (positionAndSize.height < 0) {
+ positionAndSize.height = 0;
}
- // Animate the shadow size
- x += (int) (width * (1.0 - progress) / 2.0);
- y += (int) (height * (1.0 - progress) / 2.0);
- width = (int) (width * progress);
- height = (int) (height * progress);
+ // Animate the size
+ positionAndSize.setAnimationFromCenterProgress(progress);
// Opera needs some shaking to get parts of the shadow showing
// properly
// (ticket #2704)
- if (BrowserInfo.get().isOpera()) {
+ if (BrowserInfo.get().isOpera() && isShadowEnabled()) {
// Clear the height of all middle elements
DOM.getChild(shadow, 3).getStyle().setProperty("height", "auto");
DOM.getChild(shadow, 4).getStyle().setProperty("height", "auto");
@@ -326,15 +427,17 @@ public class VOverlay extends PopupPanel implements CloseHandler<PopupPanel> {
}
// Update correct values
- DOM.setStyleAttribute(shadow, "zIndex", zIndex);
- DOM.setStyleAttribute(shadow, "width", width + "px");
- DOM.setStyleAttribute(shadow, "height", height + "px");
- DOM.setStyleAttribute(shadow, "top", y + "px");
- DOM.setStyleAttribute(shadow, "left", x + "px");
- DOM.setStyleAttribute(shadow, "display", progress < 0.9 ? "none" : "");
+ if (isShadowEnabled()) {
+ updateSizeAndPosition(shadow, positionAndSize);
+ DOM.setStyleAttribute(shadow, "zIndex", zIndex);
+ DOM.setStyleAttribute(shadow, "display", progress < 0.9 ? "none"
+ : "");
+ }
+ updateSizeAndPosition((Element) Element.as(getShimElement()),
+ positionAndSize);
// Opera fix, part 2 (ticket #2704)
- if (BrowserInfo.get().isOpera()) {
+ if (BrowserInfo.get().isOpera() && isShadowEnabled()) {
// We'll fix the height of all the middle elements
DOM.getChild(shadow, 3)
.getStyle()
@@ -351,20 +454,33 @@ public class VOverlay extends PopupPanel implements CloseHandler<PopupPanel> {
}
// Attach to dom if not there already
- if (!isShadowAttached()) {
+ if (isShadowEnabled() && !isShadowAttached()) {
RootPanel.get().getElement().insertBefore(shadow, getElement());
sinkShadowEvents();
}
+ if (!isShimAttached()) {
+ RootPanel.get().getElement()
+ .insertBefore(shimElement, getElement());
+ }
+
+ }
+ private void updateSizeAndPosition(Element e,
+ PositionAndSize positionAndSize) {
+ e.getStyle().setLeft(positionAndSize.left, Unit.PX);
+ e.getStyle().setTop(positionAndSize.top, Unit.PX);
+ e.getStyle().setWidth(positionAndSize.width, Unit.PX);
+ e.getStyle().setHeight(positionAndSize.height, Unit.PX);
}
- protected class ShadowAnimation extends Animation {
+ protected class ResizeAnimation extends Animation {
@Override
protected void onUpdate(double progress) {
- updateShadowSizeAndPosition(progress);
+ sizeOrPositionUpdated(progress);
}
}
+ @Override
public void onClose(CloseEvent<PopupPanel> event) {
removeShadowIfPresent();
}
@@ -414,4 +530,25 @@ public class VOverlay extends PopupPanel implements CloseHandler<PopupPanel> {
protected boolean isSinkShadowEvents() {
return sinkShadowEvents;
}
+
+ /**
+ * Get owner (Widget that made this VOverlay, not the layout parent) of
+ * VOverlay
+ *
+ * @return Owner (creator) or null if not defined
+ */
+ public Widget getOwner() {
+ return owner;
+ }
+
+ /**
+ * Set owner (Widget that made this VOverlay, not the layout parent) of
+ * VOverlay
+ *
+ * @param owner
+ * Owner (creator) of VOverlay
+ */
+ public void setOwner(Widget owner) {
+ this.owner = owner;
+ }
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/Vaadin6Connector.java b/src/com/vaadin/terminal/gwt/client/ui/Vaadin6Connector.java
index 7fccdafd2a..f2f0125c86 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/Vaadin6Connector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/Vaadin6Connector.java
@@ -10,6 +10,7 @@ import com.vaadin.terminal.gwt.client.UIDL;
public abstract class Vaadin6Connector extends AbstractComponentConnector
implements Paintable {
+ @Override
public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
((Paintable) getWidget()).updateFromUIDL(uidl, client);
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/absolutelayout/AbsoluteLayoutConnector.java b/src/com/vaadin/terminal/gwt/client/ui/absolutelayout/AbsoluteLayoutConnector.java
index 91436f5353..188d464b84 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/absolutelayout/AbsoluteLayoutConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/absolutelayout/AbsoluteLayoutConnector.java
@@ -10,6 +10,10 @@ import com.google.gwt.dom.client.Style;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.shared.ui.Connect;
+import com.vaadin.shared.ui.LayoutClickRpc;
+import com.vaadin.shared.ui.absolutelayout.AbsoluteLayoutServerRpc;
+import com.vaadin.shared.ui.absolutelayout.AbsoluteLayoutState;
import com.vaadin.terminal.gwt.client.ComponentConnector;
import com.vaadin.terminal.gwt.client.ConnectorHierarchyChangeEvent;
import com.vaadin.terminal.gwt.client.DirectionalManagedLayout;
@@ -18,9 +22,7 @@ import com.vaadin.terminal.gwt.client.VCaption;
import com.vaadin.terminal.gwt.client.communication.RpcProxy;
import com.vaadin.terminal.gwt.client.communication.StateChangeEvent;
import com.vaadin.terminal.gwt.client.ui.AbstractComponentContainerConnector;
-import com.vaadin.terminal.gwt.client.ui.Connect;
import com.vaadin.terminal.gwt.client.ui.LayoutClickEventHandler;
-import com.vaadin.terminal.gwt.client.ui.LayoutClickRpc;
import com.vaadin.terminal.gwt.client.ui.absolutelayout.VAbsoluteLayout.AbsoluteWrapper;
import com.vaadin.ui.AbsoluteLayout;
@@ -68,6 +70,7 @@ public class AbsoluteLayoutConnector extends
element);
}
+ @Override
public void updateCaption(ComponentConnector component) {
VAbsoluteLayout absoluteLayoutWidget = getWidget();
AbsoluteWrapper componentWrapper = getWrapper(component);
@@ -147,6 +150,7 @@ public class AbsoluteLayoutConnector extends
}
}
+ @Override
public void layoutVertically() {
VAbsoluteLayout layout = getWidget();
for (ComponentConnector paintable : getChildComponents()) {
@@ -179,6 +183,7 @@ public class AbsoluteLayoutConnector extends
}
}
+ @Override
public void layoutHorizontally() {
VAbsoluteLayout layout = getWidget();
for (ComponentConnector paintable : getChildComponents()) {
diff --git a/src/com/vaadin/terminal/gwt/client/ui/absolutelayout/AbsoluteLayoutServerRpc.java b/src/com/vaadin/terminal/gwt/client/ui/absolutelayout/AbsoluteLayoutServerRpc.java
deleted file mode 100644
index d626eb5b6c..0000000000
--- a/src/com/vaadin/terminal/gwt/client/ui/absolutelayout/AbsoluteLayoutServerRpc.java
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
-@VaadinApache2LicenseForJavaFiles@
- */
-package com.vaadin.terminal.gwt.client.ui.absolutelayout;
-
-import com.vaadin.terminal.gwt.client.communication.ServerRpc;
-import com.vaadin.terminal.gwt.client.ui.LayoutClickRpc;
-
-public interface AbsoluteLayoutServerRpc extends LayoutClickRpc, ServerRpc {
-
-} \ No newline at end of file
diff --git a/src/com/vaadin/terminal/gwt/client/ui/accordion/AccordionConnector.java b/src/com/vaadin/terminal/gwt/client/ui/accordion/AccordionConnector.java
index f022e97973..7ff1257da3 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/accordion/AccordionConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/accordion/AccordionConnector.java
@@ -5,10 +5,10 @@ package com.vaadin.terminal.gwt.client.ui.accordion;
import java.util.Iterator;
+import com.vaadin.shared.ui.Connect;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.ComponentConnector;
import com.vaadin.terminal.gwt.client.UIDL;
-import com.vaadin.terminal.gwt.client.ui.Connect;
import com.vaadin.terminal.gwt.client.ui.SimpleManagedLayout;
import com.vaadin.terminal.gwt.client.ui.accordion.VAccordion.StackItem;
import com.vaadin.terminal.gwt.client.ui.layout.MayScrollChildren;
@@ -57,10 +57,12 @@ public class AccordionConnector extends TabsheetBaseConnector implements
return (VAccordion) super.getWidget();
}
+ @Override
public void updateCaption(ComponentConnector component) {
/* Accordion does not render its children's captions */
}
+ @Override
public void layout() {
VAccordion accordion = getWidget();
diff --git a/src/com/vaadin/terminal/gwt/client/ui/accordion/VAccordion.java b/src/com/vaadin/terminal/gwt/client/ui/accordion/VAccordion.java
index b83d5afb00..d9320787e8 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/accordion/VAccordion.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/accordion/VAccordion.java
@@ -434,6 +434,7 @@ public class VAccordion extends VTabsheetBase {
}
}
+ @Override
public void onClick(ClickEvent event) {
onSelectTab(this);
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/audio/AudioConnector.java b/src/com/vaadin/terminal/gwt/client/ui/audio/AudioConnector.java
index 1c7feb132a..6b713c229c 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/audio/AudioConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/audio/AudioConnector.java
@@ -7,9 +7,9 @@ import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.shared.ui.Connect;
import com.vaadin.terminal.gwt.client.BrowserInfo;
import com.vaadin.terminal.gwt.client.communication.StateChangeEvent;
-import com.vaadin.terminal.gwt.client.ui.Connect;
import com.vaadin.terminal.gwt.client.ui.MediaBaseConnector;
import com.vaadin.ui.Audio;
diff --git a/src/com/vaadin/terminal/gwt/client/ui/button/ButtonConnector.java b/src/com/vaadin/terminal/gwt/client/ui/button/ButtonConnector.java
index d79aa96ac6..0cec6ce96b 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/button/ButtonConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/button/ButtonConnector.java
@@ -12,15 +12,17 @@ import com.google.gwt.event.dom.client.FocusEvent;
import com.google.gwt.event.dom.client.FocusHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.DOM;
+import com.vaadin.shared.MouseEventDetails;
+import com.vaadin.shared.communication.FieldRpc.FocusAndBlurServerRpc;
+import com.vaadin.shared.ui.Connect;
+import com.vaadin.shared.ui.Connect.LoadStyle;
+import com.vaadin.shared.ui.button.ButtonServerRpc;
+import com.vaadin.shared.ui.button.ButtonState;
import com.vaadin.terminal.gwt.client.EventHelper;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
import com.vaadin.terminal.gwt.client.MouseEventDetailsBuilder;
-import com.vaadin.terminal.gwt.client.communication.FieldRpc.FocusAndBlurServerRpc;
import com.vaadin.terminal.gwt.client.communication.RpcProxy;
import com.vaadin.terminal.gwt.client.communication.StateChangeEvent;
import com.vaadin.terminal.gwt.client.ui.AbstractComponentConnector;
-import com.vaadin.terminal.gwt.client.ui.Connect;
-import com.vaadin.terminal.gwt.client.ui.Connect.LoadStyle;
import com.vaadin.terminal.gwt.client.ui.Icon;
import com.vaadin.ui.Button;
@@ -103,18 +105,21 @@ public class ButtonConnector extends AbstractComponentConnector implements
return (ButtonState) super.getState();
}
+ @Override
public void onFocus(FocusEvent event) {
// EventHelper.updateFocusHandler ensures that this is called only when
// there is a listener on server side
focusBlurProxy.focus();
}
+ @Override
public void onBlur(BlurEvent event) {
// EventHelper.updateFocusHandler ensures that this is called only when
// there is a listener on server side
focusBlurProxy.blur();
}
+ @Override
public void onClick(ClickEvent event) {
if (getState().isDisableOnClick()) {
getWidget().setEnabled(false);
diff --git a/src/com/vaadin/terminal/gwt/client/ui/button/VButton.java b/src/com/vaadin/terminal/gwt/client/ui/button/VButton.java
index 0cd8bc54f4..3232338f62 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/button/VButton.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/button/VButton.java
@@ -18,7 +18,6 @@ import com.google.gwt.user.client.ui.FocusWidget;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.BrowserInfo;
import com.vaadin.terminal.gwt.client.Util;
-import com.vaadin.terminal.gwt.client.VTooltip;
import com.vaadin.terminal.gwt.client.ui.Icon;
public class VButton extends FocusWidget implements ClickHandler {
@@ -90,7 +89,6 @@ public class VButton extends FocusWidget implements ClickHandler {
setTabIndex(0);
sinkEvents(Event.ONCLICK | Event.MOUSEEVENTS | Event.FOCUSEVENTS
| Event.KEYEVENTS);
- sinkEvents(VTooltip.TOOLTIP_EVENTS);
setStyleName(CLASSNAME);
@@ -128,9 +126,6 @@ public class VButton extends FocusWidget implements ClickHandler {
* -onload event handler added (for icon handling)
*/
public void onBrowserEvent(Event event) {
- if (client != null) {
- client.handleTooltipEvent(event, this);
- }
if (DOM.eventGetType(event) == Event.ONLOAD) {
Util.notifyParentOfSizeChange(this, true);
}
@@ -286,6 +281,7 @@ public class VButton extends FocusWidget implements ClickHandler {
* com.google.gwt.event.dom.client.ClickHandler#onClick(com.google.gwt.event
* .dom.client.ClickEvent)
*/
+ @Override
public void onClick(ClickEvent event) {
if (BrowserInfo.get().isSafari()) {
VButton.this.setFocus(true);
diff --git a/src/com/vaadin/terminal/gwt/client/ui/checkbox/CheckBoxConnector.java b/src/com/vaadin/terminal/gwt/client/ui/checkbox/CheckBoxConnector.java
index bc405b793b..c7e827bc74 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/checkbox/CheckBoxConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/checkbox/CheckBoxConnector.java
@@ -12,15 +12,17 @@ import com.google.gwt.event.dom.client.FocusHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Event;
+import com.vaadin.shared.MouseEventDetails;
+import com.vaadin.shared.communication.FieldRpc.FocusAndBlurServerRpc;
+import com.vaadin.shared.ui.Connect;
+import com.vaadin.shared.ui.checkbox.CheckBoxServerRpc;
+import com.vaadin.shared.ui.checkbox.CheckBoxState;
import com.vaadin.terminal.gwt.client.EventHelper;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
import com.vaadin.terminal.gwt.client.MouseEventDetailsBuilder;
import com.vaadin.terminal.gwt.client.VTooltip;
-import com.vaadin.terminal.gwt.client.communication.FieldRpc.FocusAndBlurServerRpc;
import com.vaadin.terminal.gwt.client.communication.RpcProxy;
import com.vaadin.terminal.gwt.client.communication.StateChangeEvent;
import com.vaadin.terminal.gwt.client.ui.AbstractFieldConnector;
-import com.vaadin.terminal.gwt.client.ui.Connect;
import com.vaadin.terminal.gwt.client.ui.Icon;
import com.vaadin.ui.CheckBox;
@@ -114,18 +116,21 @@ public class CheckBoxConnector extends AbstractFieldConnector implements
return (VCheckBox) super.getWidget();
}
+ @Override
public void onFocus(FocusEvent event) {
// EventHelper.updateFocusHandler ensures that this is called only when
// there is a listener on server side
focusBlurRpc.focus();
}
+ @Override
public void onBlur(BlurEvent event) {
// EventHelper.updateFocusHandler ensures that this is called only when
// there is a listener on server side
focusBlurRpc.blur();
}
+ @Override
public void onClick(ClickEvent event) {
if (!isEnabled()) {
return;
diff --git a/src/com/vaadin/terminal/gwt/client/ui/checkbox/VCheckBox.java b/src/com/vaadin/terminal/gwt/client/ui/checkbox/VCheckBox.java
index fd90796ea5..a6eec2de8a 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/checkbox/VCheckBox.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/checkbox/VCheckBox.java
@@ -31,7 +31,6 @@ public class VCheckBox extends com.google.gwt.user.client.ui.CheckBox implements
public VCheckBox() {
setStyleName(CLASSNAME);
- sinkEvents(VTooltip.TOOLTIP_EVENTS);
Element el = DOM.getFirstChild(getElement());
while (el != null) {
DOM.sinkEvents(el,
@@ -53,9 +52,6 @@ public class VCheckBox extends com.google.gwt.user.client.ui.CheckBox implements
if (event.getTypeInt() == Event.ONLOAD) {
Util.notifyParentOfSizeChange(this, true);
}
- if (client != null) {
- client.handleTooltipEvent(event, this);
- }
}
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/combobox/ComboBoxConnector.java b/src/com/vaadin/terminal/gwt/client/ui/combobox/ComboBoxConnector.java
index ff153d30c9..0fa71bb7a6 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/combobox/ComboBoxConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/combobox/ComboBoxConnector.java
@@ -5,12 +5,12 @@ package com.vaadin.terminal.gwt.client.ui.combobox;
import java.util.Iterator;
+import com.vaadin.shared.ui.Connect;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.Paintable;
import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.Util;
import com.vaadin.terminal.gwt.client.ui.AbstractFieldConnector;
-import com.vaadin.terminal.gwt.client.ui.Connect;
import com.vaadin.terminal.gwt.client.ui.SimpleManagedLayout;
import com.vaadin.terminal.gwt.client.ui.combobox.VFilterSelect.FilterSelectSuggestion;
import com.vaadin.terminal.gwt.client.ui.menubar.MenuItem;
@@ -27,6 +27,7 @@ public class ComboBoxConnector extends AbstractFieldConnector implements
* com.vaadin.terminal.gwt.client.Paintable#updateFromUIDL(com.vaadin.terminal
* .gwt.client.UIDL, com.vaadin.terminal.gwt.client.ApplicationConnection)
*/
+ @Override
public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
// Save details
getWidget().client = client;
@@ -230,6 +231,7 @@ public class ComboBoxConnector extends AbstractFieldConnector implements
return (VFilterSelect) super.getWidget();
}
+ @Override
public void layout() {
VFilterSelect widget = getWidget();
if (widget.initDone) {
diff --git a/src/com/vaadin/terminal/gwt/client/ui/combobox/VFilterSelect.java b/src/com/vaadin/terminal/gwt/client/ui/combobox/VFilterSelect.java
index 8c5d521445..6e24a74e04 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/combobox/VFilterSelect.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/combobox/VFilterSelect.java
@@ -44,17 +44,16 @@ import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.PopupPanel.PositionCallback;
import com.google.gwt.user.client.ui.SuggestOracle.Suggestion;
import com.google.gwt.user.client.ui.TextBox;
+import com.vaadin.shared.ComponentState;
+import com.vaadin.shared.EventId;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.BrowserInfo;
import com.vaadin.terminal.gwt.client.ComponentConnector;
-import com.vaadin.terminal.gwt.client.ComponentState;
import com.vaadin.terminal.gwt.client.ConnectorMap;
-import com.vaadin.terminal.gwt.client.EventId;
import com.vaadin.terminal.gwt.client.Focusable;
import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.Util;
import com.vaadin.terminal.gwt.client.VConsole;
-import com.vaadin.terminal.gwt.client.VTooltip;
import com.vaadin.terminal.gwt.client.ui.Field;
import com.vaadin.terminal.gwt.client.ui.SubPartAware;
import com.vaadin.terminal.gwt.client.ui.VLazyExecutor;
@@ -102,6 +101,7 @@ public class VFilterSelect extends Composite implements Field, KeyDownHandler,
* specified) and the caption of the item
*/
+ @Override
public String getDisplayString() {
final StringBuffer sb = new StringBuffer();
if (iconUri != null) {
@@ -125,6 +125,7 @@ public class VFilterSelect extends Composite implements Field, KeyDownHandler,
* Get a string that represents this item. This is used in the text box.
*/
+ @Override
public String getReplacementString() {
return caption;
}
@@ -151,6 +152,7 @@ public class VFilterSelect extends Composite implements Field, KeyDownHandler,
* Executes a selection of this item.
*/
+ @Override
public void execute() {
onSuggestionSelected(this);
}
@@ -455,6 +457,7 @@ public class VFilterSelect extends Composite implements Field, KeyDownHandler,
* (int, int)
*/
+ @Override
public void setPosition(int offsetWidth, int offsetHeight) {
int top = -1;
@@ -592,6 +595,7 @@ public class VFilterSelect extends Composite implements Field, KeyDownHandler,
private VLazyExecutor delayedImageLoadExecutioner = new VLazyExecutor(
100, new ScheduledCommand() {
+ @Override
public void execute() {
if (suggestionPopup.isVisible()
&& suggestionPopup.isAttached()) {
@@ -749,6 +753,7 @@ public class VFilterSelect extends Composite implements Field, KeyDownHandler,
private static final String SUBPART_PREFIX = "item";
+ @Override
public Element getSubPartElement(String subPart) {
int index = Integer.parseInt(subPart.substring(SUBPART_PREFIX
.length()));
@@ -758,6 +763,7 @@ public class VFilterSelect extends Composite implements Field, KeyDownHandler,
return item.getElement();
}
+ @Override
public String getSubPartName(Element subElement) {
if (!getElement().isOrHasChild(subElement)) {
return null;
@@ -780,6 +786,7 @@ public class VFilterSelect extends Composite implements Field, KeyDownHandler,
return null;
}
+ @Override
public void onLoad(LoadEvent event) {
// Handle icon onload events to ensure shadow is resized
// correctly
@@ -824,21 +831,6 @@ public class VFilterSelect extends Composite implements Field, KeyDownHandler,
* The text box where the filter is written
*/
protected final TextBox tb = new TextBox() {
- /*
- * (non-Javadoc)
- *
- * @see
- * com.google.gwt.user.client.ui.TextBoxBase#onBrowserEvent(com.google
- * .gwt.user.client.Event)
- */
-
- @Override
- public void onBrowserEvent(Event event) {
- super.onBrowserEvent(event);
- if (client != null) {
- client.handleTooltipEvent(event, VFilterSelect.this);
- }
- }
// Overridden to avoid selecting text when text input is disabled
@Override
@@ -869,9 +861,6 @@ public class VFilterSelect extends Composite implements Field, KeyDownHandler,
@Override
public void onBrowserEvent(Event event) {
super.onBrowserEvent(event);
- if (client != null) {
- client.handleTooltipEvent(event, VFilterSelect.this);
- }
/*
* Prevent the keyboard focus from leaving the textfield by
@@ -961,6 +950,7 @@ public class VFilterSelect extends Composite implements Field, KeyDownHandler,
selectedItemIcon.setStyleName("v-icon");
selectedItemIcon.addLoadHandler(new LoadHandler() {
+ @Override
public void onLoad(LoadEvent event) {
if (BrowserInfo.get().isIE8()) {
// IE8 needs some help to discover it should reposition the
@@ -972,8 +962,7 @@ public class VFilterSelect extends Composite implements Field, KeyDownHandler,
}
});
- tb.sinkEvents(VTooltip.TOOLTIP_EVENTS);
- popupOpener.sinkEvents(VTooltip.TOOLTIP_EVENTS | Event.ONMOUSEDOWN);
+ popupOpener.sinkEvents(Event.ONMOUSEDOWN);
panel.add(tb);
panel.add(popupOpener);
initWidget(panel);
@@ -1214,6 +1203,7 @@ public class VFilterSelect extends Composite implements Field, KeyDownHandler,
* .event.dom.client.KeyDownEvent)
*/
+ @Override
public void onKeyDown(KeyDownEvent event) {
if (enabled && !readonly) {
int keyCode = event.getNativeKeyCode();
@@ -1376,6 +1366,7 @@ public class VFilterSelect extends Composite implements Field, KeyDownHandler,
* The KeyUpEvent of the key depressed
*/
+ @Override
public void onKeyUp(KeyUpEvent event) {
if (enabled && !readonly) {
switch (event.getNativeKeyCode()) {
@@ -1424,6 +1415,7 @@ public class VFilterSelect extends Composite implements Field, KeyDownHandler,
* Listener for popupopener
*/
+ @Override
public void onClick(ClickEvent event) {
if (textInputEnabled
&& event.getNativeEvent().getEventTarget().cast() == tb
@@ -1488,6 +1480,7 @@ public class VFilterSelect extends Composite implements Field, KeyDownHandler,
* .dom.client.FocusEvent)
*/
+ @Override
public void onFocus(FocusEvent event) {
/*
@@ -1525,6 +1518,7 @@ public class VFilterSelect extends Composite implements Field, KeyDownHandler,
* .dom.client.BlurEvent)
*/
+ @Override
public void onBlur(BlurEvent event) {
if (BrowserInfo.get().isIE() && preventNextBlurEventInIE) {
@@ -1582,6 +1576,7 @@ public class VFilterSelect extends Composite implements Field, KeyDownHandler,
* @see com.vaadin.terminal.gwt.client.Focusable#focus()
*/
+ @Override
public void focus() {
focused = true;
if (prompting && !readonly) {
@@ -1690,6 +1685,7 @@ public class VFilterSelect extends Composite implements Field, KeyDownHandler,
suggestionPopup.hide();
}
+ @Override
public Element getSubPartElement(String subPart) {
if ("textbox".equals(subPart)) {
return this.tb.getElement();
@@ -1699,6 +1695,7 @@ public class VFilterSelect extends Composite implements Field, KeyDownHandler,
return null;
}
+ @Override
public String getSubPartName(Element subElement) {
if (tb.getElement().isOrHasChild(subElement)) {
return "textbox";
diff --git a/src/com/vaadin/terminal/gwt/client/ui/csslayout/CssLayoutConnector.java b/src/com/vaadin/terminal/gwt/client/ui/csslayout/CssLayoutConnector.java
index 4d341bddfc..7d07172cd1 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/csslayout/CssLayoutConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/csslayout/CssLayoutConnector.java
@@ -9,6 +9,11 @@ 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.shared.ui.Connect;
+import com.vaadin.shared.ui.LayoutClickRpc;
+import com.vaadin.shared.ui.VMarginInfo;
+import com.vaadin.shared.ui.csslayout.CssLayoutServerRpc;
+import com.vaadin.shared.ui.csslayout.CssLayoutState;
import com.vaadin.terminal.gwt.client.BrowserInfo;
import com.vaadin.terminal.gwt.client.ComponentConnector;
import com.vaadin.terminal.gwt.client.ConnectorHierarchyChangeEvent;
@@ -17,10 +22,7 @@ import com.vaadin.terminal.gwt.client.VCaption;
import com.vaadin.terminal.gwt.client.communication.RpcProxy;
import com.vaadin.terminal.gwt.client.communication.StateChangeEvent;
import com.vaadin.terminal.gwt.client.ui.AbstractLayoutConnector;
-import com.vaadin.terminal.gwt.client.ui.Connect;
import com.vaadin.terminal.gwt.client.ui.LayoutClickEventHandler;
-import com.vaadin.terminal.gwt.client.ui.LayoutClickRpc;
-import com.vaadin.terminal.gwt.client.ui.VMarginInfo;
import com.vaadin.terminal.gwt.client.ui.csslayout.VCssLayout.FlowPane;
import com.vaadin.ui.CssLayout;
@@ -137,6 +139,7 @@ public class CssLayoutConnector extends AbstractLayoutConnector {
return (VCssLayout) super.getWidget();
}
+ @Override
public void updateCaption(ComponentConnector child) {
Widget childWidget = child.getWidget();
FlowPane cssLayoutWidgetContainer = getWidget().panel;
diff --git a/src/com/vaadin/terminal/gwt/client/ui/csslayout/CssLayoutServerRpc.java b/src/com/vaadin/terminal/gwt/client/ui/csslayout/CssLayoutServerRpc.java
deleted file mode 100644
index 7ba89d4c4c..0000000000
--- a/src/com/vaadin/terminal/gwt/client/ui/csslayout/CssLayoutServerRpc.java
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
-@VaadinApache2LicenseForJavaFiles@
- */
-package com.vaadin.terminal.gwt.client.ui.csslayout;
-
-import com.vaadin.terminal.gwt.client.communication.ServerRpc;
-import com.vaadin.terminal.gwt.client.ui.LayoutClickRpc;
-
-public interface CssLayoutServerRpc extends LayoutClickRpc, ServerRpc {
-
-} \ No newline at end of file
diff --git a/src/com/vaadin/terminal/gwt/client/ui/csslayout/VCssLayout.java b/src/com/vaadin/terminal/gwt/client/ui/csslayout/VCssLayout.java
index 7076120388..53f8ca6c8a 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/csslayout/VCssLayout.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/csslayout/VCssLayout.java
@@ -9,8 +9,8 @@ import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.shared.ui.VMarginInfo;
import com.vaadin.terminal.gwt.client.StyleConstants;
-import com.vaadin.terminal.gwt.client.ui.VMarginInfo;
public class VCssLayout extends SimplePanel {
public static final String TAGNAME = "csslayout";
diff --git a/src/com/vaadin/terminal/gwt/client/ui/customcomponent/CustomComponentConnector.java b/src/com/vaadin/terminal/gwt/client/ui/customcomponent/CustomComponentConnector.java
index 5001711d6c..f7740a9205 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/customcomponent/CustomComponentConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/customcomponent/CustomComponentConnector.java
@@ -3,11 +3,11 @@
*/
package com.vaadin.terminal.gwt.client.ui.customcomponent;
+import com.vaadin.shared.ui.Connect;
+import com.vaadin.shared.ui.Connect.LoadStyle;
import com.vaadin.terminal.gwt.client.ComponentConnector;
import com.vaadin.terminal.gwt.client.ConnectorHierarchyChangeEvent;
import com.vaadin.terminal.gwt.client.ui.AbstractComponentContainerConnector;
-import com.vaadin.terminal.gwt.client.ui.Connect;
-import com.vaadin.terminal.gwt.client.ui.Connect.LoadStyle;
import com.vaadin.ui.CustomComponent;
@Connect(value = CustomComponent.class, loadStyle = LoadStyle.EAGER)
@@ -19,6 +19,7 @@ public class CustomComponentConnector extends
return (VCustomComponent) super.getWidget();
}
+ @Override
public void updateCaption(ComponentConnector component) {
// NOP, custom component dont render composition roots caption
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/customfield/CustomFieldConnector.java b/src/com/vaadin/terminal/gwt/client/ui/customfield/CustomFieldConnector.java
index 09045df6eb..b4f42c36aa 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/customfield/CustomFieldConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/customfield/CustomFieldConnector.java
@@ -4,9 +4,9 @@
package com.vaadin.terminal.gwt.client.ui.customfield;
import com.google.gwt.core.client.GWT;
-import com.vaadin.terminal.gwt.client.AbstractFieldState;
-import com.vaadin.terminal.gwt.client.communication.SharedState;
-import com.vaadin.terminal.gwt.client.ui.Connect;
+import com.vaadin.shared.AbstractFieldState;
+import com.vaadin.shared.communication.SharedState;
+import com.vaadin.shared.ui.Connect;
import com.vaadin.terminal.gwt.client.ui.customcomponent.CustomComponentConnector;
import com.vaadin.ui.CustomField;
diff --git a/src/com/vaadin/terminal/gwt/client/ui/customlayout/CustomLayoutConnector.java b/src/com/vaadin/terminal/gwt/client/ui/customlayout/CustomLayoutConnector.java
index f8861caf92..9d973227d1 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/customlayout/CustomLayoutConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/customlayout/CustomLayoutConnector.java
@@ -5,17 +5,21 @@ package com.vaadin.terminal.gwt.client.ui.customlayout;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.shared.ui.Connect;
+import com.vaadin.shared.ui.customlayout.CustomLayoutState;
+import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.ComponentConnector;
import com.vaadin.terminal.gwt.client.ConnectorHierarchyChangeEvent;
+import com.vaadin.terminal.gwt.client.Paintable;
+import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.communication.StateChangeEvent;
import com.vaadin.terminal.gwt.client.ui.AbstractLayoutConnector;
-import com.vaadin.terminal.gwt.client.ui.Connect;
import com.vaadin.terminal.gwt.client.ui.SimpleManagedLayout;
import com.vaadin.ui.CustomLayout;
@Connect(CustomLayout.class)
public class CustomLayoutConnector extends AbstractLayoutConnector implements
- SimpleManagedLayout {
+ SimpleManagedLayout, Paintable {
@Override
public CustomLayoutState getState() {
@@ -102,11 +106,19 @@ public class CustomLayoutConnector extends AbstractLayoutConnector implements
return (VCustomLayout) super.getWidget();
}
+ @Override
public void updateCaption(ComponentConnector paintable) {
getWidget().updateCaption(paintable);
}
+ @Override
public void layout() {
getWidget().iLayoutJS(DOM.getFirstChild(getWidget().getElement()));
}
+
+ @Override
+ public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
+ // Not interested in anything from the UIDL - just implementing the
+ // interface to avoid some warning (#8688)
+ }
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/datefield/AbstractDateFieldConnector.java b/src/com/vaadin/terminal/gwt/client/ui/datefield/AbstractDateFieldConnector.java
index b55f480bac..159b5bc414 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/datefield/AbstractDateFieldConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/datefield/AbstractDateFieldConnector.java
@@ -15,6 +15,7 @@ import com.vaadin.terminal.gwt.client.ui.AbstractFieldConnector;
public class AbstractDateFieldConnector extends AbstractFieldConnector
implements Paintable {
+ @Override
public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
if (!isRealUpdate(uidl)) {
return;
@@ -63,15 +64,23 @@ public class AbstractDateFieldConnector extends AbstractFieldConnector
newResolution = VDateField.RESOLUTION_YEAR;
}
+ // Remove old stylename that indicates current resolution
+ setWidgetStyleName(
+ VDateField.CLASSNAME
+ + "-"
+ + VDateField
+ .resolutionToString(getWidget().currentResolution),
+ false);
+
getWidget().currentResolution = newResolution;
// Add stylename that indicates current resolution
- getWidget()
- .addStyleName(
- VDateField.CLASSNAME
- + "-"
- + VDateField
- .resolutionToString(getWidget().currentResolution));
+ setWidgetStyleName(
+ VDateField.CLASSNAME
+ + "-"
+ + VDateField
+ .resolutionToString(getWidget().currentResolution),
+ true);
final int year = uidl.getIntVariable("year");
final int month = (getWidget().currentResolution >= VDateField.RESOLUTION_MONTH) ? uidl
diff --git a/src/com/vaadin/terminal/gwt/client/ui/datefield/InlineDateFieldConnector.java b/src/com/vaadin/terminal/gwt/client/ui/datefield/InlineDateFieldConnector.java
index 7cd9c110ba..304c75322a 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/datefield/InlineDateFieldConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/datefield/InlineDateFieldConnector.java
@@ -5,10 +5,10 @@ package com.vaadin.terminal.gwt.client.ui.datefield;
import java.util.Date;
+import com.vaadin.shared.ui.Connect;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.DateTimeService;
import com.vaadin.terminal.gwt.client.UIDL;
-import com.vaadin.terminal.gwt.client.ui.Connect;
import com.vaadin.terminal.gwt.client.ui.datefield.VCalendarPanel.FocusChangeListener;
import com.vaadin.terminal.gwt.client.ui.datefield.VCalendarPanel.TimeChangeListener;
import com.vaadin.ui.InlineDateField;
@@ -40,6 +40,7 @@ public class InlineDateFieldConnector extends AbstractDateFieldConnector {
if (getWidget().currentResolution > VDateField.RESOLUTION_DAY) {
getWidget().calendarPanel
.setTimeChangeListener(new TimeChangeListener() {
+ @Override
public void changed(int hour, int min, int sec, int msec) {
Date d = getWidget().getDate();
if (d == null) {
@@ -64,6 +65,7 @@ public class InlineDateFieldConnector extends AbstractDateFieldConnector {
if (getWidget().currentResolution <= VDateField.RESOLUTION_MONTH) {
getWidget().calendarPanel
.setFocusChangeListener(new FocusChangeListener() {
+ @Override
public void focusChanged(Date date) {
Date date2 = new Date();
if (getWidget().calendarPanel.getDate() != null) {
diff --git a/src/com/vaadin/terminal/gwt/client/ui/datefield/PopupDateFieldConnector.java b/src/com/vaadin/terminal/gwt/client/ui/datefield/PopupDateFieldConnector.java
index e169d83b48..a8c8ada1d9 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/datefield/PopupDateFieldConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/datefield/PopupDateFieldConnector.java
@@ -6,10 +6,10 @@ package com.vaadin.terminal.gwt.client.ui.datefield;
import java.util.Date;
+import com.vaadin.shared.ui.Connect;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.DateTimeService;
import com.vaadin.terminal.gwt.client.UIDL;
-import com.vaadin.terminal.gwt.client.ui.Connect;
import com.vaadin.terminal.gwt.client.ui.datefield.VCalendarPanel.FocusChangeListener;
import com.vaadin.terminal.gwt.client.ui.datefield.VCalendarPanel.TimeChangeListener;
import com.vaadin.ui.DateField;
@@ -35,14 +35,6 @@ public class PopupDateFieldConnector extends TextualDateConnector {
super.updateFromUIDL(uidl, client);
- String popupStyleNames = getStyleNames(VPopupCalendar.POPUP_PRIMARY_STYLE_NAME);
- popupStyleNames += " "
- + VDateField.CLASSNAME
- + "-"
- + VPopupCalendar
- .resolutionToString(getWidget().currentResolution);
- getWidget().popup.setStyleName(popupStyleNames);
-
getWidget().calendar.setDateTimeService(getWidget()
.getDateTimeService());
getWidget().calendar.setShowISOWeekNumbers(getWidget()
@@ -61,6 +53,7 @@ public class PopupDateFieldConnector extends TextualDateConnector {
if (getWidget().currentResolution <= VPopupCalendar.RESOLUTION_MONTH) {
getWidget().calendar
.setFocusChangeListener(new FocusChangeListener() {
+ @Override
public void focusChanged(Date date) {
getWidget().updateValue(date);
getWidget().buildDate();
@@ -76,6 +69,7 @@ public class PopupDateFieldConnector extends TextualDateConnector {
if (getWidget().currentResolution > VPopupCalendar.RESOLUTION_DAY) {
getWidget().calendar
.setTimeChangeListener(new TimeChangeListener() {
+ @Override
public void changed(int hour, int min, int sec, int msec) {
Date d = getWidget().getDate();
if (d == null) {
@@ -114,4 +108,30 @@ public class PopupDateFieldConnector extends TextualDateConnector {
public VPopupCalendar getWidget() {
return (VPopupCalendar) super.getWidget();
}
+
+ @Override
+ protected void setWidgetStyleName(String styleName, boolean add) {
+ super.setWidgetStyleName(styleName, add);
+
+ // update the style change to popup calendar widget
+ getWidget().popup.setStyleName(styleName, add);
+ }
+
+ @Override
+ protected void setWidgetStyleNameWithPrefix(String prefix,
+ String styleName, boolean add) {
+ super.setWidgetStyleNameWithPrefix(prefix, styleName, add);
+
+ // update the style change to popup calendar widget with the correct
+ // prefix
+ if (!styleName.startsWith("-")) {
+ getWidget().popup.setStyleName(
+ VPopupCalendar.POPUP_PRIMARY_STYLE_NAME + "-" + styleName,
+ add);
+ } else {
+ getWidget().popup.setStyleName(
+ VPopupCalendar.POPUP_PRIMARY_STYLE_NAME + styleName, add);
+ }
+ }
+
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/datefield/VCalendarPanel.java b/src/com/vaadin/terminal/gwt/client/ui/datefield/VCalendarPanel.java
index acfff60d53..e4e25a5a2e 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/datefield/VCalendarPanel.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/datefield/VCalendarPanel.java
@@ -121,6 +121,7 @@ public class VCalendarPanel extends FocusableFlexTable implements
* com.google.gwt.event.dom.client.ClickHandler#onClick(com.google.gwt
* .event.dom.client.ClickEvent)
*/
+ @Override
public void onClick(ClickEvent event) {
Day day = (Day) event.getSource();
focusDay(day.getDate());
@@ -718,6 +719,7 @@ public class VCalendarPanel extends FocusableFlexTable implements
* com.google.gwt.event.dom.client.KeyDownHandler#onKeyDown(com.google.gwt
* .event.dom.client.KeyDownEvent)
*/
+ @Override
public void onKeyDown(KeyDownEvent event) {
handleKeyPress(event);
}
@@ -729,6 +731,7 @@ public class VCalendarPanel extends FocusableFlexTable implements
* com.google.gwt.event.dom.client.KeyPressHandler#onKeyPress(com.google
* .gwt.event.dom.client.KeyPressEvent)
*/
+ @Override
public void onKeyPress(KeyPressEvent event) {
handleKeyPress(event);
}
@@ -1124,6 +1127,7 @@ public class VCalendarPanel extends FocusableFlexTable implements
* com.google.gwt.event.dom.client.MouseOutHandler#onMouseOut(com.google
* .gwt.event.dom.client.MouseOutEvent)
*/
+ @Override
public void onMouseOut(MouseOutEvent event) {
if (mouseTimer != null) {
mouseTimer.cancel();
@@ -1137,6 +1141,7 @@ public class VCalendarPanel extends FocusableFlexTable implements
* com.google.gwt.event.dom.client.MouseDownHandler#onMouseDown(com.google
* .gwt.event.dom.client.MouseDownEvent)
*/
+ @Override
public void onMouseDown(MouseDownEvent event) {
// Allow user to click-n-hold for fast-forward or fast-rewind.
// Timer is first used for a 500ms delay after mousedown. After that has
@@ -1169,6 +1174,7 @@ public class VCalendarPanel extends FocusableFlexTable implements
* com.google.gwt.event.dom.client.MouseUpHandler#onMouseUp(com.google.gwt
* .event.dom.client.MouseUpEvent)
*/
+ @Override
public void onMouseUp(MouseUpEvent event) {
if (mouseTimer != null) {
mouseTimer.cancel();
@@ -1354,6 +1360,7 @@ public class VCalendarPanel extends FocusableFlexTable implements
ListBox lastDropDown = getLastDropDown();
lastDropDown.addKeyDownHandler(new KeyDownHandler() {
+ @Override
public void onKeyDown(KeyDownEvent event) {
boolean shiftKey = event.getNativeEvent().getShiftKey();
if (shiftKey) {
@@ -1439,6 +1446,7 @@ public class VCalendarPanel extends FocusableFlexTable implements
* com.google.gwt.event.dom.client.ChangeHandler#onChange(com.google.gwt
* .event.dom.client.ChangeEvent)
*/
+ @Override
public void onChange(ChangeEvent event) {
/*
* Value from dropdowns gets always set for the value. Like year and
@@ -1589,6 +1597,7 @@ public class VCalendarPanel extends FocusableFlexTable implements
* com.google.gwt.event.dom.client.BlurHandler#onBlur(com.google.gwt.event
* .dom.client.BlurEvent)
*/
+ @Override
public void onBlur(final BlurEvent event) {
if (event.getSource() instanceof VCalendarPanel) {
hasFocus = false;
@@ -1603,6 +1612,7 @@ public class VCalendarPanel extends FocusableFlexTable implements
* com.google.gwt.event.dom.client.FocusHandler#onFocus(com.google.gwt.event
* .dom.client.FocusEvent)
*/
+ @Override
public void onFocus(FocusEvent event) {
if (event.getSource() instanceof VCalendarPanel) {
hasFocus = true;
@@ -1627,6 +1637,7 @@ public class VCalendarPanel extends FocusableFlexTable implements
private static final String SUBPART_DAY = "day";
private static final String SUBPART_MONTH_YEAR_HEADER = "header";
+ @Override
public String getSubPartName(Element subElement) {
if (contains(nextMonth, subElement)) {
return SUBPART_NEXT_MONTH;
@@ -1685,6 +1696,7 @@ public class VCalendarPanel extends FocusableFlexTable implements
return w.getElement().isOrHasChild(subElement);
}
+ @Override
public Element getSubPartElement(String subPart) {
if (SUBPART_NEXT_MONTH.equals(subPart)) {
return nextMonth.getElement();
diff --git a/src/com/vaadin/terminal/gwt/client/ui/datefield/VDateField.java b/src/com/vaadin/terminal/gwt/client/ui/datefield/VDateField.java
index d169b1b47e..614c4febdd 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/datefield/VDateField.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/datefield/VDateField.java
@@ -6,11 +6,9 @@ package com.vaadin.terminal.gwt.client.ui.datefield;
import java.util.Date;
-import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.FlowPanel;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.DateTimeService;
-import com.vaadin.terminal.gwt.client.VTooltip;
import com.vaadin.terminal.gwt.client.ui.Field;
public class VDateField extends FlowPanel implements Field {
@@ -66,15 +64,6 @@ public class VDateField extends FlowPanel implements Field {
public VDateField() {
setStyleName(CLASSNAME);
dts = new DateTimeService();
- sinkEvents(VTooltip.TOOLTIP_EVENTS);
- }
-
- @Override
- public void onBrowserEvent(Event event) {
- super.onBrowserEvent(event);
- if (client != null) {
- client.handleTooltipEvent(event, this);
- }
}
/*
diff --git a/src/com/vaadin/terminal/gwt/client/ui/datefield/VDateFieldCalendar.java b/src/com/vaadin/terminal/gwt/client/ui/datefield/VDateFieldCalendar.java
index 84b3c678eb..e411fb3013 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/datefield/VDateFieldCalendar.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/datefield/VDateFieldCalendar.java
@@ -23,16 +23,19 @@ public class VDateFieldCalendar extends VDateField {
calendarPanel = new VCalendarPanel();
add(calendarPanel);
calendarPanel.setSubmitListener(new SubmitListener() {
+ @Override
public void onSubmit() {
updateValueFromPanel();
}
+ @Override
public void onCancel() {
// TODO Auto-generated method stub
}
});
calendarPanel.setFocusOutListener(new FocusOutListener() {
+ @Override
public boolean onFocusOut(DomEvent<?> event) {
updateValueFromPanel();
return false;
diff --git a/src/com/vaadin/terminal/gwt/client/ui/datefield/VPopupCalendar.java b/src/com/vaadin/terminal/gwt/client/ui/datefield/VPopupCalendar.java
index 7011e5358b..de6ebf29af 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/datefield/VPopupCalendar.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/datefield/VPopupCalendar.java
@@ -66,6 +66,7 @@ public class VPopupCalendar extends VTextualDate implements Field,
calendar = GWT.create(VCalendarPanel.class);
calendar.setFocusOutListener(new FocusOutListener() {
+ @Override
public boolean onFocusOut(DomEvent<?> event) {
event.preventDefault();
closeCalendarPanel();
@@ -74,6 +75,7 @@ public class VPopupCalendar extends VTextualDate implements Field,
});
calendar.setSubmitListener(new SubmitListener() {
+ @Override
public void onSubmit() {
// Update internal value and send valuechange event if immediate
updateValue(calendar.getDate());
@@ -84,6 +86,7 @@ public class VPopupCalendar extends VTextualDate implements Field,
closeCalendarPanel();
}
+ @Override
public void onCancel() {
closeCalendarPanel();
}
@@ -164,6 +167,7 @@ public class VPopupCalendar extends VTextualDate implements Field,
popup.setWidth("");
popup.setHeight("");
popup.setPopupPositionAndShow(new PositionCallback() {
+ @Override
public void setPosition(int offsetWidth, int offsetHeight) {
final int w = offsetWidth;
final int h = offsetHeight;
@@ -232,6 +236,7 @@ public class VPopupCalendar extends VTextualDate implements Field,
* com.google.gwt.event.dom.client.ClickHandler#onClick(com.google.gwt.event
* .dom.client.ClickEvent)
*/
+ @Override
public void onClick(ClickEvent event) {
if (event.getSource() == calendarToggle && isEnabled()) {
openCalendarPanel();
@@ -245,6 +250,7 @@ public class VPopupCalendar extends VTextualDate implements Field,
* com.google.gwt.event.logical.shared.CloseHandler#onClose(com.google.gwt
* .event.logical.shared.CloseEvent)
*/
+ @Override
public void onClose(CloseEvent<PopupPanel> event) {
if (event.getSource() == popup) {
buildDate();
diff --git a/src/com/vaadin/terminal/gwt/client/ui/datefield/VTextualDate.java b/src/com/vaadin/terminal/gwt/client/ui/datefield/VTextualDate.java
index db4eca152a..8c252ddc69 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/datefield/VTextualDate.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/datefield/VTextualDate.java
@@ -14,7 +14,7 @@ import com.google.gwt.event.dom.client.FocusEvent;
import com.google.gwt.event.dom.client.FocusHandler;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.ui.TextBox;
-import com.vaadin.terminal.gwt.client.EventId;
+import com.vaadin.shared.EventId;
import com.vaadin.terminal.gwt.client.Focusable;
import com.vaadin.terminal.gwt.client.LocaleNotLoadedException;
import com.vaadin.terminal.gwt.client.LocaleService;
@@ -50,6 +50,7 @@ public class VTextualDate extends VDateField implements Field, ChangeHandler,
text.addStyleName(CLASSNAME + "-textfield");
text.addChangeHandler(this);
text.addFocusHandler(new FocusHandler() {
+ @Override
public void onFocus(FocusEvent event) {
text.addStyleName(VTextField.CLASSNAME + "-"
+ VTextField.CLASSNAME_FOCUS);
@@ -66,6 +67,7 @@ public class VTextualDate extends VDateField implements Field, ChangeHandler,
}
});
text.addBlurHandler(new BlurHandler() {
+ @Override
public void onBlur(BlurEvent event) {
text.removeStyleName(VTextField.CLASSNAME + "-"
+ VTextField.CLASSNAME_FOCUS);
@@ -168,6 +170,7 @@ public class VTextualDate extends VDateField implements Field, ChangeHandler,
}
}
+ @Override
@SuppressWarnings("deprecation")
public void onChange(ChangeEvent event) {
if (!text.getText().equals("")) {
@@ -291,6 +294,7 @@ public class VTextualDate extends VDateField implements Field, ChangeHandler,
return format.trim();
}
+ @Override
public void focus() {
text.setFocus(true);
}
@@ -315,6 +319,7 @@ public class VTextualDate extends VDateField implements Field, ChangeHandler,
private final String TEXTFIELD_ID = "field";
+ @Override
public Element getSubPartElement(String subPart) {
if (subPart.equals(TEXTFIELD_ID)) {
return text.getElement();
@@ -323,6 +328,7 @@ public class VTextualDate extends VDateField implements Field, ChangeHandler,
return null;
}
+ @Override
public String getSubPartName(Element subElement) {
if (text.getElement().isOrHasChild(subElement)) {
return TEXTFIELD_ID;
diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/DDUtil.java b/src/com/vaadin/terminal/gwt/client/ui/dd/DDUtil.java
index 97f5eb86fd..f9ec8a2f48 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/dd/DDUtil.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/dd/DDUtil.java
@@ -6,6 +6,8 @@ package com.vaadin.terminal.gwt.client.ui.dd;
import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.Window;
+import com.vaadin.shared.ui.dd.HorizontalDropLocation;
+import com.vaadin.shared.ui.dd.VerticalDropLocation;
import com.vaadin.terminal.gwt.client.Util;
public class DDUtil {
diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/VAbstractDropHandler.java b/src/com/vaadin/terminal/gwt/client/ui/dd/VAbstractDropHandler.java
index ce47c7d13a..ce0533ac1f 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/dd/VAbstractDropHandler.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/dd/VAbstractDropHandler.java
@@ -47,6 +47,7 @@ public abstract class VAbstractDropHandler implements VDropHandler {
/**
* Default implementation does nothing.
*/
+ @Override
public void dragOver(VDragEvent drag) {
}
@@ -55,6 +56,7 @@ public abstract class VAbstractDropHandler implements VDropHandler {
* Default implementation does nothing. Implementors should clean possible
* emphasis or drag icons here.
*/
+ @Override
public void dragLeave(VDragEvent drag) {
}
@@ -73,8 +75,10 @@ public abstract class VAbstractDropHandler implements VDropHandler {
* implementation.
*
*/
+ @Override
public void dragEnter(final VDragEvent drag) {
validate(new VAcceptCallback() {
+ @Override
public void accepted(VDragEvent event) {
dragAccepted(drag);
}
@@ -94,6 +98,7 @@ public abstract class VAbstractDropHandler implements VDropHandler {
protected void validate(final VAcceptCallback cb, final VDragEvent event) {
Command checkCriteria = new Command() {
+ @Override
public void execute() {
acceptCriteria.accept(event, criterioUIDL, cb);
}
@@ -109,12 +114,14 @@ public abstract class VAbstractDropHandler implements VDropHandler {
* can't be verified on client or if {@link AcceptCriterion} are met on
* client.
*/
+ @Override
public boolean drop(VDragEvent drag) {
if (acceptCriteria.needsServerSideCheck(drag, criterioUIDL)) {
return true;
} else {
validated = false;
acceptCriteria.accept(drag, criterioUIDL, new VAcceptCallback() {
+ @Override
public void accepted(VDragEvent event) {
validated = true;
}
@@ -129,6 +136,7 @@ public abstract class VAbstractDropHandler implements VDropHandler {
* side counterpart of the Paintable is expected to implement
* {@link DropTarget} interface.
*/
+ @Override
public abstract ComponentConnector getConnector();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/VAcceptAll.java b/src/com/vaadin/terminal/gwt/client/ui/dd/VAcceptAll.java
index a864a93c2a..7ce0d69727 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/dd/VAcceptAll.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/dd/VAcceptAll.java
@@ -7,6 +7,7 @@
package com.vaadin.terminal.gwt.client.ui.dd;
import com.vaadin.event.dd.acceptcriteria.AcceptAll;
+import com.vaadin.shared.ui.dd.AcceptCriterion;
import com.vaadin.terminal.gwt.client.UIDL;
@AcceptCriterion(AcceptAll.class)
diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/VAcceptCriterion.java b/src/com/vaadin/terminal/gwt/client/ui/dd/VAcceptCriterion.java
index 0d71e23903..b1a88166ec 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/dd/VAcceptCriterion.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/dd/VAcceptCriterion.java
@@ -19,6 +19,7 @@ public abstract class VAcceptCriterion {
final VAcceptCallback callback) {
if (needsServerSideCheck(drag, configuration)) {
VDragEventServerCallback acceptCallback = new VDragEventServerCallback() {
+ @Override
public void handleResponse(boolean accepted, UIDL response) {
if (accepted) {
callback.accepted(drag);
diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/VAnd.java b/src/com/vaadin/terminal/gwt/client/ui/dd/VAnd.java
index 19399d7d4a..2f0cdc2a80 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/dd/VAnd.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/dd/VAnd.java
@@ -7,6 +7,7 @@
package com.vaadin.terminal.gwt.client.ui.dd;
import com.vaadin.event.dd.acceptcriteria.And;
+import com.vaadin.shared.ui.dd.AcceptCriterion;
import com.vaadin.terminal.gwt.client.UIDL;
@AcceptCriterion(And.class)
@@ -33,6 +34,7 @@ final public class VAnd extends VAcceptCriterion implements VAcceptCallback {
return true;
}
+ @Override
public void accepted(VDragEvent event) {
b1 = true;
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/VContainsDataFlavor.java b/src/com/vaadin/terminal/gwt/client/ui/dd/VContainsDataFlavor.java
index 3cd341eefd..7c5d9f769a 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/dd/VContainsDataFlavor.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/dd/VContainsDataFlavor.java
@@ -7,6 +7,7 @@
package com.vaadin.terminal.gwt.client.ui.dd;
import com.vaadin.event.dd.acceptcriteria.ContainsDataFlavor;
+import com.vaadin.shared.ui.dd.AcceptCriterion;
import com.vaadin.terminal.gwt.client.UIDL;
@AcceptCriterion(ContainsDataFlavor.class)
diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/VDragAndDropManager.java b/src/com/vaadin/terminal/gwt/client/ui/dd/VDragAndDropManager.java
index 2f404a3028..bc98860716 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/dd/VDragAndDropManager.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/dd/VDragAndDropManager.java
@@ -22,9 +22,10 @@ import com.google.gwt.user.client.Event.NativePreviewHandler;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.shared.MouseEventDetails;
+import com.vaadin.shared.ui.dd.DragEventType;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.ComponentConnector;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
import com.vaadin.terminal.gwt.client.MouseEventDetailsBuilder;
import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.Util;
@@ -48,6 +49,7 @@ public class VDragAndDropManager {
private final class DefaultDragAndDropEventHandler implements
NativePreviewHandler {
+ @Override
public void onPreviewNativeEvent(NativePreviewEvent event) {
NativeEvent nativeEvent = event.getNativeEvent();
@@ -223,10 +225,6 @@ public class VDragAndDropManager {
}
- public enum DragEventType {
- ENTER, LEAVE, OVER, DROP
- }
-
public static final String DD_SERVICE = "DD";
private static VDragAndDropManager instance;
@@ -307,6 +305,7 @@ public class VDragAndDropManager {
final Command startDrag = new Command() {
+ @Override
public void execute() {
isStarted = true;
addActiveDragSourceStyleName();
@@ -352,6 +351,7 @@ public class VDragAndDropManager {
deferredStartRegistration = Event
.addNativePreviewHandler(new NativePreviewHandler() {
+ @Override
public void onPreviewNativeEvent(
NativePreviewEvent event) {
int typeInt = event.getTypeInt();
@@ -509,6 +509,7 @@ public class VDragAndDropManager {
final ApplicationConnection client = currentDropHandler
.getApplicationConnection();
Scheduler.get().scheduleFixedDelay(new RepeatingCommand() {
+ @Override
public boolean execute() {
if (!client.hasActiveRequest()) {
removeActiveDragSourceStyleName(dragSource);
diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/VDragSourceIs.java b/src/com/vaadin/terminal/gwt/client/ui/dd/VDragSourceIs.java
index b6af81085f..ffb923f3e0 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/dd/VDragSourceIs.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/dd/VDragSourceIs.java
@@ -4,6 +4,7 @@
package com.vaadin.terminal.gwt.client.ui.dd;
import com.vaadin.event.dd.acceptcriteria.SourceIs;
+import com.vaadin.shared.ui.dd.AcceptCriterion;
import com.vaadin.terminal.gwt.client.ComponentConnector;
import com.vaadin.terminal.gwt.client.ConnectorMap;
import com.vaadin.terminal.gwt.client.UIDL;
diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/VIsOverId.java b/src/com/vaadin/terminal/gwt/client/ui/dd/VIsOverId.java
index 5dad4873ea..d0055d48dd 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/dd/VIsOverId.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/dd/VIsOverId.java
@@ -6,6 +6,7 @@
*/
package com.vaadin.terminal.gwt.client.ui.dd;
+import com.vaadin.shared.ui.dd.AcceptCriterion;
import com.vaadin.terminal.gwt.client.ComponentConnector;
import com.vaadin.terminal.gwt.client.ConnectorMap;
import com.vaadin.terminal.gwt.client.UIDL;
diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/VItemIdIs.java b/src/com/vaadin/terminal/gwt/client/ui/dd/VItemIdIs.java
index ca4d0e900d..67f323a950 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/dd/VItemIdIs.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/dd/VItemIdIs.java
@@ -6,6 +6,7 @@
*/
package com.vaadin.terminal.gwt.client.ui.dd;
+import com.vaadin.shared.ui.dd.AcceptCriterion;
import com.vaadin.terminal.gwt.client.ComponentConnector;
import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.ui.AbstractSelect;
diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/VLazyInitItemIdentifiers.java b/src/com/vaadin/terminal/gwt/client/ui/dd/VLazyInitItemIdentifiers.java
index e3bed02642..bfda603d58 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/dd/VLazyInitItemIdentifiers.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/dd/VLazyInitItemIdentifiers.java
@@ -8,6 +8,7 @@ package com.vaadin.terminal.gwt.client.ui.dd;
import java.util.HashSet;
+import com.vaadin.shared.ui.dd.AcceptCriterion;
import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.ui.Table;
import com.vaadin.ui.Tree;
@@ -48,6 +49,7 @@ public class VLazyInitItemIdentifiers extends VAcceptCriterion {
VDragEventServerCallback acceptCallback = new VDragEventServerCallback() {
+ @Override
public void handleResponse(boolean accepted, UIDL response) {
hashSet = new HashSet<String>();
String[] stringArrayAttribute = response
diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/VNot.java b/src/com/vaadin/terminal/gwt/client/ui/dd/VNot.java
index e4d2dff606..8355afc625 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/dd/VNot.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/dd/VNot.java
@@ -7,6 +7,7 @@
package com.vaadin.terminal.gwt.client.ui.dd;
import com.vaadin.event.dd.acceptcriteria.Not;
+import com.vaadin.shared.ui.dd.AcceptCriterion;
import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.VConsole;
@@ -33,6 +34,7 @@ final public class VNot extends VAcceptCriterion {
b1 = false;
VAcceptCallback accept1cb = new VAcceptCallback() {
+ @Override
public void accepted(VDragEvent event) {
b1 = true;
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/VOr.java b/src/com/vaadin/terminal/gwt/client/ui/dd/VOr.java
index 91ba4bf0c4..46bf28b42a 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/dd/VOr.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/dd/VOr.java
@@ -7,6 +7,7 @@
package com.vaadin.terminal.gwt.client.ui.dd;
import com.vaadin.event.dd.acceptcriteria.Or;
+import com.vaadin.shared.ui.dd.AcceptCriterion;
import com.vaadin.terminal.gwt.client.UIDL;
/**
@@ -41,6 +42,7 @@ final public class VOr extends VAcceptCriterion implements VAcceptCallback {
return false; // not used here
}
+ @Override
public void accepted(VDragEvent event) {
accepted = true;
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/VServerAccept.java b/src/com/vaadin/terminal/gwt/client/ui/dd/VServerAccept.java
index 64c2da5320..42d4d90ae4 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/dd/VServerAccept.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/dd/VServerAccept.java
@@ -7,6 +7,7 @@
package com.vaadin.terminal.gwt.client.ui.dd;
import com.vaadin.event.dd.acceptcriteria.ServerSideCriterion;
+import com.vaadin.shared.ui.dd.AcceptCriterion;
import com.vaadin.terminal.gwt.client.UIDL;
@AcceptCriterion(ServerSideCriterion.class)
@@ -16,6 +17,7 @@ final public class VServerAccept extends VAcceptCriterion {
final VAcceptCallback callback) {
VDragEventServerCallback acceptCallback = new VDragEventServerCallback() {
+ @Override
public void handleResponse(boolean accepted, UIDL response) {
if (accepted) {
callback.accepted(drag);
diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/VSourceIsTarget.java b/src/com/vaadin/terminal/gwt/client/ui/dd/VSourceIsTarget.java
index 2365eabe22..dcb2f405fa 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/dd/VSourceIsTarget.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/dd/VSourceIsTarget.java
@@ -7,6 +7,7 @@
package com.vaadin.terminal.gwt.client.ui.dd;
import com.vaadin.event.dd.acceptcriteria.SourceIsTarget;
+import com.vaadin.shared.ui.dd.AcceptCriterion;
import com.vaadin.terminal.gwt.client.ComponentConnector;
import com.vaadin.terminal.gwt.client.UIDL;
diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/VTargetDetailIs.java b/src/com/vaadin/terminal/gwt/client/ui/dd/VTargetDetailIs.java
index 610d555745..e67d81387c 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/dd/VTargetDetailIs.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/dd/VTargetDetailIs.java
@@ -7,6 +7,7 @@
package com.vaadin.terminal.gwt.client.ui.dd;
import com.vaadin.event.dd.acceptcriteria.TargetDetailIs;
+import com.vaadin.shared.ui.dd.AcceptCriterion;
import com.vaadin.terminal.gwt.client.UIDL;
@AcceptCriterion(TargetDetailIs.class)
diff --git a/src/com/vaadin/terminal/gwt/client/ui/dd/VTargetInSubtree.java b/src/com/vaadin/terminal/gwt/client/ui/dd/VTargetInSubtree.java
index 56478b2b95..14bca0ed91 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/dd/VTargetInSubtree.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/dd/VTargetInSubtree.java
@@ -7,6 +7,7 @@
package com.vaadin.terminal.gwt.client.ui.dd;
import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.shared.ui.dd.AcceptCriterion;
import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.ui.tree.VTree;
import com.vaadin.terminal.gwt.client.ui.tree.VTree.TreeNode;
diff --git a/src/com/vaadin/terminal/gwt/client/ui/draganddropwrapper/DragAndDropWrapperConnector.java b/src/com/vaadin/terminal/gwt/client/ui/draganddropwrapper/DragAndDropWrapperConnector.java
index 2a78cc4433..6914b451fa 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/draganddropwrapper/DragAndDropWrapperConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/draganddropwrapper/DragAndDropWrapperConnector.java
@@ -6,10 +6,10 @@ package com.vaadin.terminal.gwt.client.ui.draganddropwrapper;
import java.util.HashMap;
import java.util.Set;
+import com.vaadin.shared.ui.Connect;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.Paintable;
import com.vaadin.terminal.gwt.client.UIDL;
-import com.vaadin.terminal.gwt.client.ui.Connect;
import com.vaadin.terminal.gwt.client.ui.customcomponent.CustomComponentConnector;
import com.vaadin.ui.DragAndDropWrapper;
@@ -17,6 +17,7 @@ import com.vaadin.ui.DragAndDropWrapper;
public class DragAndDropWrapperConnector extends CustomComponentConnector
implements Paintable {
+ @Override
public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
getWidget().client = client;
if (isRealUpdate(uidl) && !uidl.hasAttribute("hidden")) {
diff --git a/src/com/vaadin/terminal/gwt/client/ui/draganddropwrapper/VDragAndDropWrapper.java b/src/com/vaadin/terminal/gwt/client/ui/draganddropwrapper/VDragAndDropWrapper.java
index 4c36e92bbb..e77055764e 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/draganddropwrapper/VDragAndDropWrapper.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/draganddropwrapper/VDragAndDropWrapper.java
@@ -22,6 +22,8 @@ import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.xhr.client.ReadyStateChangeHandler;
import com.google.gwt.xhr.client.XMLHttpRequest;
+import com.vaadin.shared.ui.dd.HorizontalDropLocation;
+import com.vaadin.shared.ui.dd.VerticalDropLocation;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.ComponentConnector;
import com.vaadin.terminal.gwt.client.ConnectorMap;
@@ -29,11 +31,9 @@ import com.vaadin.terminal.gwt.client.LayoutManager;
import com.vaadin.terminal.gwt.client.MouseEventDetailsBuilder;
import com.vaadin.terminal.gwt.client.Util;
import com.vaadin.terminal.gwt.client.VConsole;
-import com.vaadin.terminal.gwt.client.VTooltip;
import com.vaadin.terminal.gwt.client.ValueMap;
import com.vaadin.terminal.gwt.client.ui.customcomponent.VCustomComponent;
import com.vaadin.terminal.gwt.client.ui.dd.DDUtil;
-import com.vaadin.terminal.gwt.client.ui.dd.HorizontalDropLocation;
import com.vaadin.terminal.gwt.client.ui.dd.VAbstractDropHandler;
import com.vaadin.terminal.gwt.client.ui.dd.VAcceptCallback;
import com.vaadin.terminal.gwt.client.ui.dd.VDragAndDropManager;
@@ -43,7 +43,6 @@ import com.vaadin.terminal.gwt.client.ui.dd.VHasDropHandler;
import com.vaadin.terminal.gwt.client.ui.dd.VHtml5DragEvent;
import com.vaadin.terminal.gwt.client.ui.dd.VHtml5File;
import com.vaadin.terminal.gwt.client.ui.dd.VTransferable;
-import com.vaadin.terminal.gwt.client.ui.dd.VerticalDropLocation;
/**
*
@@ -64,12 +63,12 @@ public class VDragAndDropWrapper extends VCustomComponent implements
public VDragAndDropWrapper() {
super();
- sinkEvents(VTooltip.TOOLTIP_EVENTS);
hookHtml5Events(getElement());
setStyleName(CLASSNAME);
addDomHandler(new MouseDownHandler() {
+ @Override
public void onMouseDown(MouseDownEvent event) {
if (startDrag(event.getNativeEvent())) {
event.preventDefault(); // prevent text selection
@@ -79,6 +78,7 @@ public class VDragAndDropWrapper extends VCustomComponent implements
addDomHandler(new TouchStartHandler() {
+ @Override
public void onTouchStart(TouchStartEvent event) {
if (startDrag(event.getNativeEvent())) {
/*
@@ -92,16 +92,6 @@ public class VDragAndDropWrapper extends VCustomComponent implements
sinkEvents(Event.TOUCHEVENTS);
}
- @Override
- public void onBrowserEvent(Event event) {
- super.onBrowserEvent(event);
-
- if (hasTooltip && client != null) {
- // Override child tooltips if the wrapper has a tooltip defined
- client.handleTooltipEvent(event, this);
- }
- }
-
/**
* Starts a drag and drop operation from mousedown or touchstart event if
* required conditions are met.
@@ -178,6 +168,7 @@ public class VDragAndDropWrapper extends VCustomComponent implements
private ReadyStateChangeHandler readyStateChangeHandler = new ReadyStateChangeHandler() {
+ @Override
public void onReadyStateChange(XMLHttpRequest xhr) {
if (xhr.getReadyState() == XMLHttpRequest.DONE) {
// visit server for possible
@@ -194,6 +185,7 @@ public class VDragAndDropWrapper extends VCustomComponent implements
void startNextUpload() {
Scheduler.get().scheduleDeferred(new Command() {
+ @Override
public void execute() {
if (!uploading) {
if (fileIds.size() > 0) {
@@ -425,6 +417,7 @@ public class VDragAndDropWrapper extends VCustomComponent implements
files.add(file);
}
+ @Override
public VDropHandler getDropHandler() {
return dropHandler;
}
@@ -463,6 +456,7 @@ public class VDragAndDropWrapper extends VCustomComponent implements
currentlyValid = false;
validate(new VAcceptCallback() {
+ @Override
public void accepted(VDragEvent event) {
dragAccepted(drag);
}
@@ -507,6 +501,7 @@ public class VDragAndDropWrapper extends VCustomComponent implements
VDragAndDropWrapper.this);
}
+ @Override
public ApplicationConnection getApplicationConnection() {
return client;
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/embedded/EmbeddedConnector.java b/src/com/vaadin/terminal/gwt/client/ui/embedded/EmbeddedConnector.java
index af3ad67db4..a1851d9c84 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/embedded/EmbeddedConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/embedded/EmbeddedConnector.java
@@ -15,8 +15,10 @@ import com.google.gwt.dom.client.Style;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.Event;
+import com.vaadin.shared.MouseEventDetails;
+import com.vaadin.shared.ui.Connect;
+import com.vaadin.shared.ui.embedded.EmbeddedServerRpc;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
import com.vaadin.terminal.gwt.client.Paintable;
import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.VConsole;
@@ -24,7 +26,6 @@ import com.vaadin.terminal.gwt.client.VTooltip;
import com.vaadin.terminal.gwt.client.communication.RpcProxy;
import com.vaadin.terminal.gwt.client.ui.AbstractComponentConnector;
import com.vaadin.terminal.gwt.client.ui.ClickEventHandler;
-import com.vaadin.terminal.gwt.client.ui.Connect;
import com.vaadin.ui.Embedded;
@Connect(Embedded.class)
@@ -41,6 +42,7 @@ public class EmbeddedConnector extends AbstractComponentConnector implements
rpc = RpcProxy.create(EmbeddedServerRpc.class, this);
}
+ @Override
public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
if (!isRealUpdate(uidl)) {
return;
@@ -54,6 +56,16 @@ public class EmbeddedConnector extends AbstractComponentConnector implements
clickEventHandler.handleEventHandlerRegistration();
if (uidl.hasAttribute("type")) {
+ // remove old style name related to type
+ if (getWidget().type != null) {
+ getWidget().removeStyleName(
+ VEmbedded.CLASSNAME + "-" + getWidget().type);
+ }
+ // remove old style name related to mime type
+ if (getWidget().mimetype != null) {
+ getWidget().removeStyleName(
+ VEmbedded.CLASSNAME + "-" + getWidget().mimetype);
+ }
getWidget().type = uidl.getStringAttribute("type");
if (getWidget().type.equals("image")) {
getWidget().addStyleName(VEmbedded.CLASSNAME + "-image");
@@ -118,13 +130,25 @@ public class EmbeddedConnector extends AbstractComponentConnector implements
VConsole.log("Unknown Embedded type '" + getWidget().type + "'");
}
} else if (uidl.hasAttribute("mimetype")) {
+ // remove old style name related to type
+ if (getWidget().type != null) {
+ getWidget().removeStyleName(
+ VEmbedded.CLASSNAME + "-" + getWidget().type);
+ }
+ // remove old style name related to mime type
+ if (getWidget().mimetype != null) {
+ getWidget().removeStyleName(
+ VEmbedded.CLASSNAME + "-" + getWidget().mimetype);
+ }
final String mime = uidl.getStringAttribute("mimetype");
if (mime.equals("application/x-shockwave-flash")) {
+ getWidget().mimetype = "flash";
// Handle embedding of Flash
getWidget().addStyleName(VEmbedded.CLASSNAME + "-flash");
getWidget().setHTML(getWidget().createFlashEmbed(uidl));
} else if (mime.equals("image/svg+xml")) {
+ getWidget().mimetype = "svg";
getWidget().addStyleName(VEmbedded.CLASSNAME + "-svg");
String data;
Map<String, String> parameters = VEmbedded.getParameters(uidl);
diff --git a/src/com/vaadin/terminal/gwt/client/ui/embedded/EmbeddedServerRpc.java b/src/com/vaadin/terminal/gwt/client/ui/embedded/EmbeddedServerRpc.java
deleted file mode 100644
index 7f36c812bc..0000000000
--- a/src/com/vaadin/terminal/gwt/client/ui/embedded/EmbeddedServerRpc.java
+++ /dev/null
@@ -1,10 +0,0 @@
-/*
-@VaadinApache2LicenseForJavaFiles@
- */
-package com.vaadin.terminal.gwt.client.ui.embedded;
-
-import com.vaadin.terminal.gwt.client.communication.ServerRpc;
-import com.vaadin.terminal.gwt.client.ui.ClickRpc;
-
-public interface EmbeddedServerRpc extends ClickRpc, ServerRpc {
-} \ No newline at end of file
diff --git a/src/com/vaadin/terminal/gwt/client/ui/embedded/VEmbedded.java b/src/com/vaadin/terminal/gwt/client/ui/embedded/VEmbedded.java
index 203e7362f3..1d2a5a156a 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/embedded/VEmbedded.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/embedded/VEmbedded.java
@@ -26,6 +26,7 @@ public class VEmbedded extends HTML {
protected Element browserElement;
protected String type;
+ protected String mimetype;
protected ApplicationConnection client;
@@ -232,8 +233,6 @@ public class VEmbedded extends HTML {
VConsole.log("Embeddable onload");
Util.notifyParentOfSizeChange(this, true);
}
-
- client.handleTooltipEvent(event, this);
}
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/form/FormConnector.java b/src/com/vaadin/terminal/gwt/client/ui/form/FormConnector.java
index 981c753dd1..e31de1f85d 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/form/FormConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/form/FormConnector.java
@@ -6,13 +6,14 @@ package com.vaadin.terminal.gwt.client.ui.form;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.KeyDownEvent;
import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.shared.ui.Connect;
+import com.vaadin.shared.ui.form.FormState;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.ComponentConnector;
import com.vaadin.terminal.gwt.client.LayoutManager;
import com.vaadin.terminal.gwt.client.Paintable;
import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.ui.AbstractComponentContainerConnector;
-import com.vaadin.terminal.gwt.client.ui.Connect;
import com.vaadin.terminal.gwt.client.ui.Icon;
import com.vaadin.terminal.gwt.client.ui.ShortcutActionHandler;
import com.vaadin.terminal.gwt.client.ui.layout.ElementResizeEvent;
@@ -25,6 +26,7 @@ public class FormConnector extends AbstractComponentContainerConnector
implements Paintable, MayScrollChildren {
private final ElementResizeListener footerResizeListener = new ElementResizeListener() {
+ @Override
public void onElementResize(ElementResizeEvent e) {
VForm form = getWidget();
@@ -57,6 +59,7 @@ public class FormConnector extends AbstractComponentContainerConnector
return false;
}
+ @Override
public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
getWidget().client = client;
getWidget().id = uidl.getId();
@@ -180,6 +183,7 @@ public class FormConnector extends AbstractComponentContainerConnector
}
}
+ @Override
public void updateCaption(ComponentConnector component) {
// NOP form don't render caption for neither field layout nor footer
// layout
diff --git a/src/com/vaadin/terminal/gwt/client/ui/form/VForm.java b/src/com/vaadin/terminal/gwt/client/ui/form/VForm.java
index 81f24a8e7e..823b0e83ae 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/form/VForm.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/form/VForm.java
@@ -62,6 +62,7 @@ public class VForm extends ComplexPanel implements KeyDownHandler {
fieldSet.appendChild(footerContainer);
}
+ @Override
public void onKeyDown(KeyDownEvent event) {
shortcutHandler.handleKeyboardEvent(Event.as(event.getNativeEvent()));
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/formlayout/FormLayoutConnector.java b/src/com/vaadin/terminal/gwt/client/ui/formlayout/FormLayoutConnector.java
index ca21947a6c..567513d7fe 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/formlayout/FormLayoutConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/formlayout/FormLayoutConnector.java
@@ -3,18 +3,21 @@
*/
package com.vaadin.terminal.gwt.client.ui.formlayout;
+import com.google.gwt.dom.client.Element;
import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.shared.ui.Connect;
+import com.vaadin.shared.ui.VMarginInfo;
+import com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState;
import com.vaadin.terminal.gwt.client.ComponentConnector;
import com.vaadin.terminal.gwt.client.ConnectorHierarchyChangeEvent;
+import com.vaadin.terminal.gwt.client.TooltipInfo;
+import com.vaadin.terminal.gwt.client.Util;
import com.vaadin.terminal.gwt.client.communication.StateChangeEvent;
import com.vaadin.terminal.gwt.client.ui.AbstractFieldConnector;
import com.vaadin.terminal.gwt.client.ui.AbstractLayoutConnector;
-import com.vaadin.terminal.gwt.client.ui.Connect;
-import com.vaadin.terminal.gwt.client.ui.VMarginInfo;
import com.vaadin.terminal.gwt.client.ui.formlayout.VFormLayout.Caption;
import com.vaadin.terminal.gwt.client.ui.formlayout.VFormLayout.ErrorFlag;
import com.vaadin.terminal.gwt.client.ui.formlayout.VFormLayout.VFormLayoutTable;
-import com.vaadin.terminal.gwt.client.ui.orderedlayout.AbstractOrderedLayoutState;
import com.vaadin.ui.FormLayout;
@Connect(FormLayout.class)
@@ -76,6 +79,7 @@ public class FormLayoutConnector extends AbstractLayoutConnector {
}
+ @Override
public void updateCaption(ComponentConnector component) {
getWidget().table.updateCaption(component.getWidget(),
component.getState(), component.isEnabled());
@@ -96,4 +100,36 @@ public class FormLayoutConnector extends AbstractLayoutConnector {
return (VFormLayout) super.getWidget();
}
+ @Override
+ public TooltipInfo getTooltipInfo(Element element) {
+ TooltipInfo info = null;
+
+ if (element != getWidget().getElement()) {
+ Object node = Util.findWidget(
+ (com.google.gwt.user.client.Element) element,
+ VFormLayout.Caption.class);
+
+ if (node != null) {
+ VFormLayout.Caption caption = (VFormLayout.Caption) node;
+ info = caption.getOwner().getTooltipInfo(element);
+ } else {
+
+ node = Util.findWidget(
+ (com.google.gwt.user.client.Element) element,
+ VFormLayout.ErrorFlag.class);
+
+ if (node != null) {
+ VFormLayout.ErrorFlag flag = (VFormLayout.ErrorFlag) node;
+ info = flag.getOwner().getTooltipInfo(element);
+ }
+ }
+ }
+
+ if (info == null) {
+ info = super.getTooltipInfo(element);
+ }
+
+ return info;
+ }
+
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/formlayout/VFormLayout.java b/src/com/vaadin/terminal/gwt/client/ui/formlayout/VFormLayout.java
index 8a859c409c..9ecab6352c 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/formlayout/VFormLayout.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/formlayout/VFormLayout.java
@@ -12,21 +12,20 @@ import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
-import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.shared.ComponentState;
+import com.vaadin.shared.ui.VMarginInfo;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.BrowserInfo;
import com.vaadin.terminal.gwt.client.ComponentConnector;
-import com.vaadin.terminal.gwt.client.ComponentState;
import com.vaadin.terminal.gwt.client.Focusable;
import com.vaadin.terminal.gwt.client.StyleConstants;
import com.vaadin.terminal.gwt.client.VTooltip;
import com.vaadin.terminal.gwt.client.ui.AbstractFieldConnector;
import com.vaadin.terminal.gwt.client.ui.Icon;
-import com.vaadin.terminal.gwt.client.ui.VMarginInfo;
/**
* Two col Layout that places caption on left col and field on right col
@@ -88,6 +87,7 @@ public class VFormLayout extends SimplePanel {
* com.google.gwt.event.dom.client.ClickHandler#onClick(com.google.gwt
* .event.dom.client.ClickEvent)
*/
+ @Override
public void onClick(ClickEvent event) {
Caption caption = (Caption) event.getSource();
if (caption.getOwner() != null) {
@@ -215,8 +215,6 @@ public class VFormLayout extends SimplePanel {
public Caption(ComponentConnector component) {
super();
owner = component;
-
- sinkEvents(VTooltip.TOOLTIP_EVENTS);
}
private void setStyles(String[] styles) {
@@ -324,12 +322,6 @@ public class VFormLayout extends SimplePanel {
public ComponentConnector getOwner() {
return owner;
}
-
- @Override
- public void onBrowserEvent(Event event) {
- super.onBrowserEvent(event);
- owner.getConnection().handleTooltipEvent(event, owner);
- }
}
class ErrorFlag extends HTML {
@@ -345,6 +337,10 @@ public class VFormLayout extends SimplePanel {
this.owner = owner;
}
+ public ComponentConnector getOwner() {
+ return owner;
+ }
+
public void updateError(String errorMessage, boolean hideErrors) {
boolean showError = null != errorMessage;
if (hideErrors) {
@@ -366,13 +362,5 @@ public class VFormLayout extends SimplePanel {
}
}
- @Override
- public void onBrowserEvent(Event event) {
- super.onBrowserEvent(event);
- if (owner != null) {
- owner.getConnection().handleTooltipEvent(event, owner);
- }
- }
-
}
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/gridlayout/GridLayoutConnector.java b/src/com/vaadin/terminal/gwt/client/ui/gridlayout/GridLayoutConnector.java
index 2cd82313c2..07e481d31d 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/gridlayout/GridLayoutConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/gridlayout/GridLayoutConnector.java
@@ -7,6 +7,12 @@ import java.util.Iterator;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.shared.ui.AlignmentInfo;
+import com.vaadin.shared.ui.Connect;
+import com.vaadin.shared.ui.LayoutClickRpc;
+import com.vaadin.shared.ui.VMarginInfo;
+import com.vaadin.shared.ui.gridlayout.GridLayoutServerRpc;
+import com.vaadin.shared.ui.gridlayout.GridLayoutState;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.ComponentConnector;
import com.vaadin.terminal.gwt.client.ConnectorHierarchyChangeEvent;
@@ -18,11 +24,7 @@ import com.vaadin.terminal.gwt.client.VCaption;
import com.vaadin.terminal.gwt.client.communication.RpcProxy;
import com.vaadin.terminal.gwt.client.communication.StateChangeEvent;
import com.vaadin.terminal.gwt.client.ui.AbstractComponentContainerConnector;
-import com.vaadin.terminal.gwt.client.ui.AlignmentInfo;
-import com.vaadin.terminal.gwt.client.ui.Connect;
import com.vaadin.terminal.gwt.client.ui.LayoutClickEventHandler;
-import com.vaadin.terminal.gwt.client.ui.LayoutClickRpc;
-import com.vaadin.terminal.gwt.client.ui.VMarginInfo;
import com.vaadin.terminal.gwt.client.ui.gridlayout.VGridLayout.Cell;
import com.vaadin.terminal.gwt.client.ui.layout.VLayoutSlot;
import com.vaadin.ui.GridLayout;
@@ -51,6 +53,7 @@ public class GridLayoutConnector extends AbstractComponentContainerConnector
@Override
public void init() {
+ super.init();
rpc = RpcProxy.create(GridLayoutServerRpc.class, this);
getLayoutManager().registerDependency(this,
getWidget().spacingMeasureElement);
@@ -82,6 +85,7 @@ public class GridLayoutConnector extends AbstractComponentContainerConnector
}
+ @Override
public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
VGridLayout layout = getWidget();
layout.client = client;
@@ -185,6 +189,7 @@ public class GridLayoutConnector extends AbstractComponentContainerConnector
}
+ @Override
public void updateCaption(ComponentConnector childConnector) {
if (!childConnector.delegateCaptionHandling()) {
// Check not required by interface but by workarounds in this class
@@ -223,10 +228,12 @@ public class GridLayoutConnector extends AbstractComponentContainerConnector
return (VGridLayout) super.getWidget();
}
+ @Override
public void layoutVertically() {
getWidget().updateHeight();
}
+ @Override
public void layoutHorizontally() {
getWidget().updateWidth();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/gridlayout/GridLayoutServerRpc.java b/src/com/vaadin/terminal/gwt/client/ui/gridlayout/GridLayoutServerRpc.java
deleted file mode 100644
index cd8df297ec..0000000000
--- a/src/com/vaadin/terminal/gwt/client/ui/gridlayout/GridLayoutServerRpc.java
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
-@VaadinApache2LicenseForJavaFiles@
- */
-package com.vaadin.terminal.gwt.client.ui.gridlayout;
-
-import com.vaadin.terminal.gwt.client.communication.ServerRpc;
-import com.vaadin.terminal.gwt.client.ui.LayoutClickRpc;
-
-public interface GridLayoutServerRpc extends LayoutClickRpc, ServerRpc {
-
-} \ No newline at end of file
diff --git a/src/com/vaadin/terminal/gwt/client/ui/gridlayout/VGridLayout.java b/src/com/vaadin/terminal/gwt/client/ui/gridlayout/VGridLayout.java
index 7629e09cac..1ea84d46cd 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/gridlayout/VGridLayout.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/gridlayout/VGridLayout.java
@@ -16,6 +16,8 @@ import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.ui.ComplexPanel;
import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.shared.ui.AlignmentInfo;
+import com.vaadin.shared.ui.VMarginInfo;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.ComponentConnector;
import com.vaadin.terminal.gwt.client.ConnectorMap;
@@ -23,8 +25,6 @@ import com.vaadin.terminal.gwt.client.LayoutManager;
import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.Util;
import com.vaadin.terminal.gwt.client.VCaption;
-import com.vaadin.terminal.gwt.client.ui.AlignmentInfo;
-import com.vaadin.terminal.gwt.client.ui.VMarginInfo;
import com.vaadin.terminal.gwt.client.ui.layout.ComponentConnectorLayoutSlot;
import com.vaadin.terminal.gwt.client.ui.layout.VLayoutSlot;
diff --git a/src/com/vaadin/terminal/gwt/client/ui/helloworldfeature/GreetAgainRpc.java b/src/com/vaadin/terminal/gwt/client/ui/helloworldfeature/GreetAgainRpc.java
deleted file mode 100644
index 0bfb8f3c32..0000000000
--- a/src/com/vaadin/terminal/gwt/client/ui/helloworldfeature/GreetAgainRpc.java
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
-@VaadinApache2LicenseForJavaFiles@
- */
-package com.vaadin.terminal.gwt.client.ui.helloworldfeature;
-
-import com.vaadin.terminal.gwt.client.communication.ClientRpc;
-
-public interface GreetAgainRpc extends ClientRpc {
-
- public void greetAgain();
-
-}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/helloworldfeature/HelloWorldExtensionConnector.java b/src/com/vaadin/terminal/gwt/client/ui/helloworldfeature/HelloWorldExtensionConnector.java
deleted file mode 100644
index ff444fece5..0000000000
--- a/src/com/vaadin/terminal/gwt/client/ui/helloworldfeature/HelloWorldExtensionConnector.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
-@VaadinApache2LicenseForJavaFiles@
- */
-package com.vaadin.terminal.gwt.client.ui.helloworldfeature;
-
-import com.google.gwt.user.client.Window;
-import com.vaadin.terminal.gwt.client.ServerConnector;
-import com.vaadin.terminal.gwt.client.Util;
-import com.vaadin.terminal.gwt.client.VConsole;
-import com.vaadin.terminal.gwt.client.communication.RpcProxy;
-import com.vaadin.terminal.gwt.client.ui.AbstractConnector;
-import com.vaadin.terminal.gwt.client.ui.Connect;
-import com.vaadin.ui.HelloWorldExtension;
-
-@Connect(HelloWorldExtension.class)
-public class HelloWorldExtensionConnector extends AbstractConnector {
- HelloWorldRpc rpc = RpcProxy.create(HelloWorldRpc.class, this);
-
- @Override
- public HelloWorldState getState() {
- return (HelloWorldState) super.getState();
- }
-
- @Override
- protected void init() {
- registerRpc(GreetAgainRpc.class, new GreetAgainRpc() {
- public void greetAgain() {
- greet();
- }
- });
- }
-
- @Override
- public void setParent(ServerConnector parent) {
- super.setParent(parent);
- greet();
- }
-
- private void greet() {
- String msg = getState().getGreeting() + " from "
- + Util.getConnectorString(this) + " attached to "
- + Util.getConnectorString(getParent());
- VConsole.log(msg);
-
- String response = Window.prompt(msg, "");
- rpc.onMessageSent(response);
- }
-}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/helloworldfeature/HelloWorldRpc.java b/src/com/vaadin/terminal/gwt/client/ui/helloworldfeature/HelloWorldRpc.java
deleted file mode 100644
index 0289713390..0000000000
--- a/src/com/vaadin/terminal/gwt/client/ui/helloworldfeature/HelloWorldRpc.java
+++ /dev/null
@@ -1,10 +0,0 @@
-/*
-@VaadinApache2LicenseForJavaFiles@
- */
-package com.vaadin.terminal.gwt.client.ui.helloworldfeature;
-
-import com.vaadin.terminal.gwt.client.communication.ServerRpc;
-
-public interface HelloWorldRpc extends ServerRpc {
- public void onMessageSent(String message);
-}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/helloworldfeature/HelloWorldState.java b/src/com/vaadin/terminal/gwt/client/ui/helloworldfeature/HelloWorldState.java
deleted file mode 100644
index 9524a5e9aa..0000000000
--- a/src/com/vaadin/terminal/gwt/client/ui/helloworldfeature/HelloWorldState.java
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
-@VaadinApache2LicenseForJavaFiles@
- */
-package com.vaadin.terminal.gwt.client.ui.helloworldfeature;
-
-import com.vaadin.terminal.gwt.client.communication.SharedState;
-
-public class HelloWorldState extends SharedState {
- private String greeting = "Hello world";
-
- public String getGreeting() {
- return greeting;
- }
-
- public void setGreeting(String greeting) {
- this.greeting = greeting;
- }
-}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/label/ContentMode.java b/src/com/vaadin/terminal/gwt/client/ui/label/ContentMode.java
deleted file mode 100644
index 4892c7e6bd..0000000000
--- a/src/com/vaadin/terminal/gwt/client/ui/label/ContentMode.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
-@VaadinApache2LicenseForJavaFiles@
- */
-package com.vaadin.terminal.gwt.client.ui.label;
-
-/**
- * Content modes defining how the client should interpret a Label's value.
- *
- * @since 7.0.0
- */
-public enum ContentMode {
- /**
- * Content mode, where the label contains only plain text. The getValue()
- * result is coded to XML when painting.
- */
- TEXT,
-
- /**
- * Content mode, where the label contains preformatted text.
- */
- PREFORMATTED,
-
- /**
- * Content mode, where the label contains XHTML.
- */
- XHTML,
-
- /**
- * Content mode, where the label contains well-formed or well-balanced XML.
- * Each of the root elements must have their default namespace specified.
- *
- * @deprecated Use {@link #XHTML}
- */
- @Deprecated
- XML,
-
- /**
- * Content mode, where the label contains RAW output. Output is not required
- * to comply to with XML. In Web Adapter output is inserted inside the
- * resulting HTML document as-is. This is useful for some specific purposes
- * where possibly broken HTML content needs to be shown, but in most cases
- * XHTML mode should be preferred.
- *
- * @deprecated Use {@link #XHTML}, {@link #TEXT} or {@link #PREFORMATTED}.
- */
- @Deprecated
- RAW;
-}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/label/LabelConnector.java b/src/com/vaadin/terminal/gwt/client/ui/label/LabelConnector.java
index e64f9fffea..4c6c71e037 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/label/LabelConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/label/LabelConnector.java
@@ -5,11 +5,12 @@ package com.vaadin.terminal.gwt.client.ui.label;
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.PreElement;
+import com.vaadin.shared.ui.Connect;
+import com.vaadin.shared.ui.Connect.LoadStyle;
+import com.vaadin.shared.ui.label.LabelState;
import com.vaadin.terminal.gwt.client.Util;
import com.vaadin.terminal.gwt.client.communication.StateChangeEvent;
import com.vaadin.terminal.gwt.client.ui.AbstractComponentConnector;
-import com.vaadin.terminal.gwt.client.ui.Connect;
-import com.vaadin.terminal.gwt.client.ui.Connect.LoadStyle;
import com.vaadin.ui.Label;
@Connect(value = Label.class, loadStyle = LoadStyle.EAGER)
diff --git a/src/com/vaadin/terminal/gwt/client/ui/label/VLabel.java b/src/com/vaadin/terminal/gwt/client/ui/label/VLabel.java
index f47b8437b7..f0c170c6b0 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/label/VLabel.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/label/VLabel.java
@@ -28,7 +28,6 @@ public class VLabel extends HTML {
public VLabel(String text) {
super(text);
setStyleName(CLASSNAME);
- sinkEvents(VTooltip.TOOLTIP_EVENTS);
}
@Override
@@ -39,9 +38,6 @@ public class VLabel extends HTML {
event.stopPropagation();
return;
}
- if (connection != null) {
- connection.handleTooltipEvent(event, this);
- }
}
@Override
diff --git a/src/com/vaadin/terminal/gwt/client/ui/layout/LayoutDependencyTree.java b/src/com/vaadin/terminal/gwt/client/ui/layout/LayoutDependencyTree.java
index 18843057f3..cb0ed697c9 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/layout/LayoutDependencyTree.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/layout/LayoutDependencyTree.java
@@ -10,9 +10,9 @@ import java.util.HashSet;
import java.util.Map;
import java.util.Set;
+import com.vaadin.shared.ComponentState;
import com.vaadin.terminal.gwt.client.ComponentConnector;
import com.vaadin.terminal.gwt.client.ComponentContainerConnector;
-import com.vaadin.terminal.gwt.client.ComponentState;
import com.vaadin.terminal.gwt.client.ServerConnector;
import com.vaadin.terminal.gwt.client.Util;
import com.vaadin.terminal.gwt.client.VConsole;
diff --git a/src/com/vaadin/terminal/gwt/client/ui/layout/VLayoutSlot.java b/src/com/vaadin/terminal/gwt/client/ui/layout/VLayoutSlot.java
index 034fe35649..5b2b1fc49b 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/layout/VLayoutSlot.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/layout/VLayoutSlot.java
@@ -10,8 +10,8 @@ import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.shared.ui.AlignmentInfo;
import com.vaadin.terminal.gwt.client.VCaption;
-import com.vaadin.terminal.gwt.client.ui.AlignmentInfo;
public abstract class VLayoutSlot {
diff --git a/src/com/vaadin/terminal/gwt/client/ui/link/LinkConnector.java b/src/com/vaadin/terminal/gwt/client/ui/link/LinkConnector.java
index c002d2dd50..5ef641470d 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/link/LinkConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/link/LinkConnector.java
@@ -5,11 +5,11 @@
package com.vaadin.terminal.gwt.client.ui.link;
import com.google.gwt.user.client.DOM;
+import com.vaadin.shared.ui.Connect;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.Paintable;
import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.ui.AbstractComponentConnector;
-import com.vaadin.terminal.gwt.client.ui.Connect;
import com.vaadin.terminal.gwt.client.ui.Icon;
import com.vaadin.ui.Link;
@@ -22,6 +22,7 @@ public class LinkConnector extends AbstractComponentConnector implements
return false;
}
+ @Override
public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
if (!isRealUpdate(uidl)) {
diff --git a/src/com/vaadin/terminal/gwt/client/ui/link/VLink.java b/src/com/vaadin/terminal/gwt/client/ui/link/VLink.java
index 68fe5d9292..4df3220ef1 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/link/VLink.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/link/VLink.java
@@ -13,7 +13,6 @@ import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.HTML;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.Util;
-import com.vaadin.terminal.gwt.client.VTooltip;
import com.vaadin.terminal.gwt.client.ui.Icon;
public class VLink extends HTML implements ClickHandler {
@@ -51,10 +50,10 @@ public class VLink extends HTML implements ClickHandler {
getElement().appendChild(anchor);
anchor.appendChild(captionElement);
addClickHandler(this);
- sinkEvents(VTooltip.TOOLTIP_EVENTS);
setStyleName(CLASSNAME);
}
+ @Override
public void onClick(ClickEvent event) {
if (enabled) {
if (target == null) {
@@ -101,9 +100,6 @@ public class VLink extends HTML implements ClickHandler {
if (event.getTypeInt() == Event.ONLOAD) {
Util.notifyParentOfSizeChange(this, true);
}
- if (client != null) {
- client.handleTooltipEvent(event, this);
- }
if (target == captionElement || target == anchor
|| (icon != null && target == icon.getElement())) {
super.onBrowserEvent(event);
diff --git a/src/com/vaadin/terminal/gwt/client/ui/listselect/ListSelectConnector.java b/src/com/vaadin/terminal/gwt/client/ui/listselect/ListSelectConnector.java
index 8a4553d983..678847226b 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/listselect/ListSelectConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/listselect/ListSelectConnector.java
@@ -4,7 +4,7 @@
package com.vaadin.terminal.gwt.client.ui.listselect;
-import com.vaadin.terminal.gwt.client.ui.Connect;
+import com.vaadin.shared.ui.Connect;
import com.vaadin.terminal.gwt.client.ui.optiongroup.OptionGroupBaseConnector;
import com.vaadin.ui.ListSelect;
diff --git a/src/com/vaadin/terminal/gwt/client/ui/listselect/TooltipListBox.java b/src/com/vaadin/terminal/gwt/client/ui/listselect/TooltipListBox.java
deleted file mode 100644
index abecd844da..0000000000
--- a/src/com/vaadin/terminal/gwt/client/ui/listselect/TooltipListBox.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-@VaadinApache2LicenseForJavaFiles@
- */
-package com.vaadin.terminal.gwt.client.ui.listselect;
-
-import com.google.gwt.user.client.Event;
-import com.google.gwt.user.client.ui.ListBox;
-import com.google.gwt.user.client.ui.Widget;
-import com.vaadin.terminal.gwt.client.ApplicationConnection;
-import com.vaadin.terminal.gwt.client.VTooltip;
-
-/**
- * Extended ListBox to listen tooltip events and forward them to generic
- * handler.
- */
-public class TooltipListBox extends ListBox {
- private ApplicationConnection client;
- private Widget widget;
-
- public TooltipListBox(boolean isMultiselect) {
- super(isMultiselect);
- sinkEvents(VTooltip.TOOLTIP_EVENTS);
- }
-
- public void setClient(ApplicationConnection client) {
- this.client = client;
- }
-
- public void setSelect(Widget widget) {
- this.widget = widget;
- }
-
- @Override
- public void onBrowserEvent(Event event) {
- super.onBrowserEvent(event);
- if (client != null) {
- client.handleTooltipEvent(event, widget);
- }
- }
-
-} \ No newline at end of file
diff --git a/src/com/vaadin/terminal/gwt/client/ui/listselect/VListSelect.java b/src/com/vaadin/terminal/gwt/client/ui/listselect/VListSelect.java
index e338897841..6f3f876fb7 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/listselect/VListSelect.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/listselect/VListSelect.java
@@ -8,6 +8,7 @@ import java.util.ArrayList;
import java.util.Iterator;
import com.google.gwt.event.dom.client.ChangeEvent;
+import com.google.gwt.user.client.ui.ListBox;
import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.ui.optiongroup.VOptionGroupBase;
@@ -17,23 +18,25 @@ public class VListSelect extends VOptionGroupBase {
private static final int VISIBLE_COUNT = 10;
- protected TooltipListBox select;
+ protected ListBox select;
private int lastSelectedIndex = -1;
public VListSelect() {
- super(new TooltipListBox(true), CLASSNAME);
- select = (TooltipListBox) optionsContainer;
- select.setSelect(this);
+ super(new ListBox(true), CLASSNAME);
+ select = getOptionsContainer();
select.addChangeHandler(this);
select.addClickHandler(this);
select.setStyleName(CLASSNAME + "-select");
select.setVisibleItemCount(VISIBLE_COUNT);
}
+ protected ListBox getOptionsContainer() {
+ return (ListBox) optionsContainer;
+ }
+
@Override
protected void buildOptions(UIDL uidl) {
- select.setClient(client);
select.setMultipleSelect(isMultiselect());
select.setEnabled(!isDisabled() && !isReadonly());
select.clear();
@@ -99,9 +102,10 @@ public class VListSelect extends VOptionGroupBase {
@Override
protected void setTabIndex(int tabIndex) {
- ((TooltipListBox) optionsContainer).setTabIndex(tabIndex);
+ getOptionsContainer().setTabIndex(tabIndex);
}
+ @Override
public void focus() {
select.setFocus(true);
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/menubar/MenuBar.java b/src/com/vaadin/terminal/gwt/client/ui/menubar/MenuBar.java
index 7bee870387..5cb3fb83b4 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/menubar/MenuBar.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/menubar/MenuBar.java
@@ -246,6 +246,7 @@ public class MenuBar extends Widget implements PopupListener {
}
}
+ @Override
public void onPopupClosed(PopupPanel sender, boolean autoClosed) {
// If the menu popup was auto-closed, close all of its parents as well.
if (autoClosed) {
diff --git a/src/com/vaadin/terminal/gwt/client/ui/menubar/MenuBarConnector.java b/src/com/vaadin/terminal/gwt/client/ui/menubar/MenuBarConnector.java
index d1f77aa0ff..2a8923bbc0 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/menubar/MenuBarConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/menubar/MenuBarConnector.java
@@ -7,14 +7,16 @@ import java.util.Iterator;
import java.util.Stack;
import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.Element;
import com.google.gwt.user.client.Command;
+import com.vaadin.shared.ui.Connect;
+import com.vaadin.shared.ui.Connect.LoadStyle;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.Paintable;
+import com.vaadin.terminal.gwt.client.TooltipInfo;
import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.Util;
import com.vaadin.terminal.gwt.client.ui.AbstractComponentConnector;
-import com.vaadin.terminal.gwt.client.ui.Connect;
-import com.vaadin.terminal.gwt.client.ui.Connect.LoadStyle;
import com.vaadin.terminal.gwt.client.ui.Icon;
import com.vaadin.terminal.gwt.client.ui.SimpleManagedLayout;
import com.vaadin.terminal.gwt.client.ui.menubar.VMenuBar.CustomMenuItem;
@@ -29,6 +31,7 @@ public class MenuBarConnector extends AbstractComponentConnector implements
* This method is called when the page is loaded for the first time, and
* every time UI changes in the component are received from the server.
*/
+ @Override
public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
if (!isRealUpdate(uidl)) {
return;
@@ -105,6 +108,7 @@ public class MenuBarConnector extends AbstractComponentConnector implements
// Construct a command that fires onMenuClick(int) with the
// item's id-number
cmd = new Command() {
+ @Override
public void execute() {
getWidget().hostReference.onMenuClick(itemId);
}
@@ -120,6 +124,7 @@ public class MenuBarConnector extends AbstractComponentConnector implements
iteratorStack.push(itr);
itr = item.getChildIterator();
currentMenu = new VMenuBar(true, currentMenu);
+ client.getVTooltip().connectHandlersToWidget(currentMenu);
// this is the top-level style that also propagates to items -
// any item specific styles are set above in
// currentItem.updateFromUIDL(item, client)
@@ -157,7 +162,30 @@ public class MenuBarConnector extends AbstractComponentConnector implements
return (VMenuBar) super.getWidget();
}
+ @Override
public void layout() {
getWidget().iLayout();
}
+
+ @Override
+ public TooltipInfo getTooltipInfo(Element element) {
+ TooltipInfo info = null;
+
+ // Check content of widget to find tooltip for element
+ if (element != getWidget().getElement()) {
+
+ CustomMenuItem item = getWidget().getMenuItemWithElement(
+ (com.google.gwt.user.client.Element) element);
+ if (item != null) {
+ info = item.getTooltip();
+ }
+ }
+
+ // Use default tooltip if nothing found from DOM three
+ if (info == null) {
+ info = super.getTooltipInfo(element);
+ }
+
+ return info;
+ }
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/menubar/MenuItem.java b/src/com/vaadin/terminal/gwt/client/ui/menubar/MenuItem.java
index af79ba7c5e..7f150d9a5f 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/menubar/MenuItem.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/menubar/MenuItem.java
@@ -121,6 +121,7 @@ public class MenuItem extends UIObject implements HasHTML {
return command;
}
+ @Override
public String getHTML() {
return DOM.getInnerHTML(getElement());
}
@@ -143,6 +144,7 @@ public class MenuItem extends UIObject implements HasHTML {
return subMenu;
}
+ @Override
public String getText() {
return DOM.getInnerText(getElement());
}
@@ -157,6 +159,7 @@ public class MenuItem extends UIObject implements HasHTML {
command = cmd;
}
+ @Override
public void setHTML(String html) {
DOM.setInnerHTML(getElement(), html);
}
@@ -171,6 +174,7 @@ public class MenuItem extends UIObject implements HasHTML {
this.subMenu = subMenu;
}
+ @Override
public void setText(String text) {
DOM.setInnerText(getElement(), text);
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/menubar/VMenuBar.java b/src/com/vaadin/terminal/gwt/client/ui/menubar/VMenuBar.java
index e48483cb02..47bda81362 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/menubar/VMenuBar.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/menubar/VMenuBar.java
@@ -36,7 +36,6 @@ import com.vaadin.terminal.gwt.client.LayoutManager;
import com.vaadin.terminal.gwt.client.TooltipInfo;
import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.Util;
-import com.vaadin.terminal.gwt.client.VTooltip;
import com.vaadin.terminal.gwt.client.ui.Icon;
import com.vaadin.terminal.gwt.client.ui.SimpleFocusablePanel;
import com.vaadin.terminal.gwt.client.ui.SubPartAware;
@@ -89,11 +88,10 @@ public class VMenuBar extends SimpleFocusablePanel implements
boolean enabled = true;
- private String width = "notinited";
-
private VLazyExecutor iconLoadedExecutioner = new VLazyExecutor(100,
new ScheduledCommand() {
+ @Override
public void execute() {
iLayout(true);
}
@@ -140,8 +138,6 @@ public class VMenuBar extends SimpleFocusablePanel implements
sinkEvents(Event.ONCLICK | Event.ONMOUSEOVER | Event.ONMOUSEOUT
| Event.ONLOAD);
-
- sinkEvents(VTooltip.TOOLTIP_EVENTS);
}
@Override
@@ -340,15 +336,6 @@ public class VMenuBar extends SimpleFocusablePanel implements
}
}
- // Handle tooltips
- if (targetItem == null && client != null) {
- // Handle root menubar tooltips
- client.handleTooltipEvent(e, this);
- } else if (targetItem != null) {
- // Handle item tooltips
- targetItem.onBrowserEvent(e);
- }
-
if (targetItem != null) {
switch (DOM.eventGetType(e)) {
@@ -537,6 +524,22 @@ public class VMenuBar extends SimpleFocusablePanel implements
final int shadowSpace = 10;
popup = new VOverlay(true, false, true);
+
+ // Setting owner and handlers to support tooltips. Needed for tooltip
+ // handling of overlay widgets (will direct queries to parent menu)
+ if (parentMenu == null) {
+ popup.setOwner(this);
+ } else {
+ VMenuBar parent = parentMenu;
+ while (parent.getParentMenu() != null) {
+ parent = parent.getParentMenu();
+ }
+ popup.setOwner(parent);
+ }
+ if (client != null) {
+ client.getVTooltip().connectHandlersToWidget(popup);
+ }
+
popup.setStyleName(CLASSNAME + "-popup");
popup.setWidget(item.getSubMenu());
popup.addCloseHandler(this);
@@ -600,7 +603,7 @@ public class VMenuBar extends SimpleFocusablePanel implements
// popup
style.setWidth(contentWidth + Util.getNativeScrollbarSize(),
Unit.PX);
- popup.updateShadowSizeAndPosition();
+ popup.sizeOrPositionUpdated();
}
}
return top;
@@ -633,6 +636,7 @@ public class VMenuBar extends SimpleFocusablePanel implements
/**
* Listener method, fired when this menu is closed
*/
+ @Override
public void onClose(CloseEvent<PopupPanel> event) {
hideChildren();
if (event.isAutoClosed()) {
@@ -720,9 +724,7 @@ public class VMenuBar extends SimpleFocusablePanel implements
* A class to hold information on menu items
*
*/
- protected static class CustomMenuItem extends Widget implements HasHTML {
-
- private ApplicationConnection client;
+ public static class CustomMenuItem extends Widget implements HasHTML {
protected String html = null;
protected Command command = null;
@@ -732,6 +734,7 @@ public class VMenuBar extends SimpleFocusablePanel implements
protected boolean isSeparator = false;
protected boolean checkable = false;
protected boolean checked = false;
+ protected String description = null;
/**
* Default menu item {@link Widget} constructor for GWT.create().
@@ -761,7 +764,6 @@ public class VMenuBar extends SimpleFocusablePanel implements
setSelected(false);
setStyleName(CLASSNAME + "-menuitem");
- sinkEvents(VTooltip.TOOLTIP_EVENTS);
}
public void setSelected(boolean selected) {
@@ -849,10 +851,12 @@ public class VMenuBar extends SimpleFocusablePanel implements
return command;
}
+ @Override
public String getHTML() {
return html;
}
+ @Override
public void setHTML(String html) {
this.html = html;
DOM.setInnerHTML(getElement(), html);
@@ -862,10 +866,12 @@ public class VMenuBar extends SimpleFocusablePanel implements
Util.sinkOnloadForImages(getElement());
}
+ @Override
public String getText() {
return html;
}
+ @Override
public void setText(String text) {
setHTML(Util.escapeHTML(text));
}
@@ -898,7 +904,6 @@ public class VMenuBar extends SimpleFocusablePanel implements
}
public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
- this.client = client;
setSeparator(uidl.hasAttribute("separator"));
setEnabled(!uidl.hasAttribute(ATTRIBUTE_ITEM_DISABLED));
@@ -918,32 +923,17 @@ public class VMenuBar extends SimpleFocusablePanel implements
}
if (uidl.hasAttribute(ATTRIBUTE_ITEM_DESCRIPTION)) {
- String description = uidl
+ description = uidl
.getStringAttribute(ATTRIBUTE_ITEM_DESCRIPTION);
- TooltipInfo info = new TooltipInfo(description);
-
- VMenuBar root = findRootMenu();
- client.registerTooltip(root, this, info);
}
}
- @Override
- public void onBrowserEvent(Event event) {
- super.onBrowserEvent(event);
- if (client != null) {
- client.handleTooltipEvent(event, findRootMenu(), this);
+ public TooltipInfo getTooltip() {
+ if (description == null) {
+ return null;
}
- }
- private VMenuBar findRootMenu() {
- VMenuBar menubar = getParentMenu();
-
- // Traverse up until root menu is found
- while (menubar.getParentMenu() != null) {
- menubar = menubar.getParentMenu();
- }
-
- return menubar;
+ return new TooltipInfo(description);
}
/**
@@ -1064,6 +1054,7 @@ public class VMenuBar extends SimpleFocusablePanel implements
* com.google.gwt.event.dom.client.KeyPressHandler#onKeyPress(com.google
* .gwt.event.dom.client.KeyPressEvent)
*/
+ @Override
public void onKeyPress(KeyPressEvent event) {
if (handleNavigation(event.getNativeEvent().getKeyCode(),
event.isControlKeyDown() || event.isMetaKeyDown(),
@@ -1079,6 +1070,7 @@ public class VMenuBar extends SimpleFocusablePanel implements
* com.google.gwt.event.dom.client.KeyDownHandler#onKeyDown(com.google.gwt
* .event.dom.client.KeyDownEvent)
*/
+ @Override
public void onKeyDown(KeyDownEvent event) {
if (handleNavigation(event.getNativeEvent().getKeyCode(),
event.isControlKeyDown() || event.isMetaKeyDown(),
@@ -1399,12 +1391,14 @@ public class VMenuBar extends SimpleFocusablePanel implements
* com.google.gwt.event.dom.client.FocusHandler#onFocus(com.google.gwt.event
* .dom.client.FocusEvent)
*/
+ @Override
public void onFocus(FocusEvent event) {
}
private final String SUBPART_PREFIX = "item";
+ @Override
public Element getSubPartElement(String subPart) {
int index = Integer
.parseInt(subPart.substring(SUBPART_PREFIX.length()));
@@ -1413,6 +1407,7 @@ public class VMenuBar extends SimpleFocusablePanel implements
return item.getElement();
}
+ @Override
public String getSubPartName(Element subElement) {
if (!getElement().isOrHasChild(subElement)) {
return null;
@@ -1435,4 +1430,28 @@ public class VMenuBar extends SimpleFocusablePanel implements
return null;
}
+ /**
+ * Get menu item with given DOM element
+ *
+ * @param element
+ * Element used in search
+ * @return Menu item or null if not found
+ */
+ public CustomMenuItem getMenuItemWithElement(Element element) {
+ for (int i = 0; i < items.size(); i++) {
+ CustomMenuItem item = items.get(i);
+ if (DOM.isOrHasChild(item.getElement(), element)) {
+ return item;
+ }
+
+ if (item.getSubMenu() != null) {
+ item = item.getSubMenu().getMenuItemWithElement(element);
+ if (item != null) {
+ return item;
+ }
+ }
+ }
+
+ return null;
+ }
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/nativebutton/NativeButtonConnector.java b/src/com/vaadin/terminal/gwt/client/ui/nativebutton/NativeButtonConnector.java
index c010fba711..73de87c276 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/nativebutton/NativeButtonConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/nativebutton/NativeButtonConnector.java
@@ -9,15 +9,15 @@ import com.google.gwt.event.dom.client.FocusEvent;
import com.google.gwt.event.dom.client.FocusHandler;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.DOM;
+import com.vaadin.shared.communication.FieldRpc.FocusAndBlurServerRpc;
+import com.vaadin.shared.ui.Connect;
+import com.vaadin.shared.ui.button.ButtonServerRpc;
+import com.vaadin.shared.ui.button.ButtonState;
import com.vaadin.terminal.gwt.client.EventHelper;
-import com.vaadin.terminal.gwt.client.communication.FieldRpc.FocusAndBlurServerRpc;
import com.vaadin.terminal.gwt.client.communication.RpcProxy;
import com.vaadin.terminal.gwt.client.communication.StateChangeEvent;
import com.vaadin.terminal.gwt.client.ui.AbstractComponentConnector;
-import com.vaadin.terminal.gwt.client.ui.Connect;
import com.vaadin.terminal.gwt.client.ui.Icon;
-import com.vaadin.terminal.gwt.client.ui.button.ButtonServerRpc;
-import com.vaadin.terminal.gwt.client.ui.button.ButtonState;
import com.vaadin.ui.NativeButton;
@Connect(NativeButton.class)
@@ -107,12 +107,14 @@ public class NativeButtonConnector extends AbstractComponentConnector implements
return (ButtonState) super.getState();
}
+ @Override
public void onFocus(FocusEvent event) {
// EventHelper.updateFocusHandler ensures that this is called only when
// there is a listener on server side
focusBlurRpc.focus();
}
+ @Override
public void onBlur(BlurEvent event) {
// EventHelper.updateFocusHandler ensures that this is called only when
// there is a listener on server side
diff --git a/src/com/vaadin/terminal/gwt/client/ui/nativebutton/VNativeButton.java b/src/com/vaadin/terminal/gwt/client/ui/nativebutton/VNativeButton.java
index dd6e741126..d58fd2a995 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/nativebutton/VNativeButton.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/nativebutton/VNativeButton.java
@@ -10,14 +10,13 @@ import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.Button;
+import com.vaadin.shared.MouseEventDetails;
+import com.vaadin.shared.ui.button.ButtonServerRpc;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.BrowserInfo;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
import com.vaadin.terminal.gwt.client.MouseEventDetailsBuilder;
import com.vaadin.terminal.gwt.client.Util;
-import com.vaadin.terminal.gwt.client.VTooltip;
import com.vaadin.terminal.gwt.client.ui.Icon;
-import com.vaadin.terminal.gwt.client.ui.button.ButtonServerRpc;
public class VNativeButton extends Button implements ClickHandler {
@@ -54,7 +53,6 @@ public class VNativeButton extends Button implements ClickHandler {
addClickHandler(this);
- sinkEvents(VTooltip.TOOLTIP_EVENTS);
sinkEvents(Event.ONMOUSEDOWN);
sinkEvents(Event.ONMOUSEUP);
}
@@ -87,10 +85,6 @@ public class VNativeButton extends Button implements ClickHandler {
}
clickPending = false;
}
-
- if (client != null) {
- client.handleTooltipEvent(event, this);
- }
}
@Override
@@ -106,6 +100,7 @@ public class VNativeButton extends Button implements ClickHandler {
* com.google.gwt.event.dom.client.ClickHandler#onClick(com.google.gwt.event
* .dom.client.ClickEvent)
*/
+ @Override
public void onClick(ClickEvent event) {
if (paintableId == null || client == null) {
return;
diff --git a/src/com/vaadin/terminal/gwt/client/ui/nativeselect/NativeSelectConnector.java b/src/com/vaadin/terminal/gwt/client/ui/nativeselect/NativeSelectConnector.java
index 8f57e0c37f..8a00afa056 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/nativeselect/NativeSelectConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/nativeselect/NativeSelectConnector.java
@@ -4,7 +4,7 @@
package com.vaadin.terminal.gwt.client.ui.nativeselect;
-import com.vaadin.terminal.gwt.client.ui.Connect;
+import com.vaadin.shared.ui.Connect;
import com.vaadin.terminal.gwt.client.ui.optiongroup.OptionGroupBaseConnector;
import com.vaadin.ui.NativeSelect;
diff --git a/src/com/vaadin/terminal/gwt/client/ui/nativeselect/VNativeSelect.java b/src/com/vaadin/terminal/gwt/client/ui/nativeselect/VNativeSelect.java
index 54f5e9aff5..ea5292724d 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/nativeselect/VNativeSelect.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/nativeselect/VNativeSelect.java
@@ -8,32 +8,34 @@ import java.util.ArrayList;
import java.util.Iterator;
import com.google.gwt.event.dom.client.ChangeEvent;
+import com.google.gwt.user.client.ui.ListBox;
import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.ui.Field;
-import com.vaadin.terminal.gwt.client.ui.listselect.TooltipListBox;
import com.vaadin.terminal.gwt.client.ui.optiongroup.VOptionGroupBase;
public class VNativeSelect extends VOptionGroupBase implements Field {
public static final String CLASSNAME = "v-select";
- protected TooltipListBox select;
+ protected ListBox select;
private boolean firstValueIsTemporaryNullItem = false;
public VNativeSelect() {
- super(new TooltipListBox(false), CLASSNAME);
- select = (TooltipListBox) optionsContainer;
- select.setSelect(this);
+ super(new ListBox(false), CLASSNAME);
+ select = getOptionsContainer();
select.setVisibleItemCount(1);
select.addChangeHandler(this);
select.setStyleName(CLASSNAME + "-select");
}
+ protected ListBox getOptionsContainer() {
+ return (ListBox) optionsContainer;
+ }
+
@Override
protected void buildOptions(UIDL uidl) {
- select.setClient(client);
select.setEnabled(!isDisabled() && !isReadonly());
select.clear();
firstValueIsTemporaryNullItem = false;
@@ -103,9 +105,10 @@ public class VNativeSelect extends VOptionGroupBase implements Field {
@Override
protected void setTabIndex(int tabIndex) {
- ((TooltipListBox) optionsContainer).setTabIndex(tabIndex);
+ getOptionsContainer().setTabIndex(tabIndex);
}
+ @Override
public void focus() {
select.setFocus(true);
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/notification/VNotification.java b/src/com/vaadin/terminal/gwt/client/ui/notification/VNotification.java
index fb853b8a55..1309155443 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/notification/VNotification.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/notification/VNotification.java
@@ -163,6 +163,7 @@ public class VNotification extends VOverlay {
super.show();
notifications.add(this);
setPosition(position);
+ sizeOrPositionUpdated();
/**
* Android 4 fails to render notifications correctly without a little
* nudge (#8551)
diff --git a/src/com/vaadin/terminal/gwt/client/ui/optiongroup/OptionGroupBaseConnector.java b/src/com/vaadin/terminal/gwt/client/ui/optiongroup/OptionGroupBaseConnector.java
index 3658126a97..a4dd72906d 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/optiongroup/OptionGroupBaseConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/optiongroup/OptionGroupBaseConnector.java
@@ -14,6 +14,7 @@ import com.vaadin.terminal.gwt.client.ui.textfield.VTextField;
public abstract class OptionGroupBaseConnector extends AbstractFieldConnector
implements Paintable {
+ @Override
public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
// Save details
diff --git a/src/com/vaadin/terminal/gwt/client/ui/optiongroup/OptionGroupConnector.java b/src/com/vaadin/terminal/gwt/client/ui/optiongroup/OptionGroupConnector.java
index e6064bd03f..caf85348d4 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/optiongroup/OptionGroupConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/optiongroup/OptionGroupConnector.java
@@ -9,10 +9,10 @@ import java.util.ArrayList;
import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.shared.EventId;
+import com.vaadin.shared.ui.Connect;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
-import com.vaadin.terminal.gwt.client.EventId;
import com.vaadin.terminal.gwt.client.UIDL;
-import com.vaadin.terminal.gwt.client.ui.Connect;
import com.vaadin.ui.OptionGroup;
@Connect(OptionGroup.class)
diff --git a/src/com/vaadin/terminal/gwt/client/ui/optiongroup/VOptionGroup.java b/src/com/vaadin/terminal/gwt/client/ui/optiongroup/VOptionGroup.java
index d6e6949242..a6cdf7e888 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/optiongroup/VOptionGroup.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/optiongroup/VOptionGroup.java
@@ -25,8 +25,8 @@ import com.google.gwt.user.client.ui.Focusable;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.RadioButton;
import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.shared.EventId;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
-import com.vaadin.terminal.gwt.client.EventId;
import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.Util;
import com.vaadin.terminal.gwt.client.ui.Icon;
@@ -51,6 +51,7 @@ public class VOptionGroup extends VOptionGroupBase implements FocusHandler,
protected List<HandlerRegistration> blurHandlers = null;
private final LoadHandler iconLoadHandler = new LoadHandler() {
+ @Override
public void onLoad(LoadEvent event) {
Util.notifyParentOfSizeChange(VOptionGroup.this, true);
}
@@ -154,6 +155,7 @@ public class VOptionGroup extends VOptionGroupBase implements FocusHandler,
}
}
+ @Override
public void focus() {
Iterator<Widget> iterator = panel.iterator();
if (iterator.hasNext()) {
@@ -161,6 +163,7 @@ public class VOptionGroup extends VOptionGroupBase implements FocusHandler,
}
}
+ @Override
public void onFocus(FocusEvent arg0) {
if (!blurOccured) {
// no blur occured before this focus event
@@ -178,10 +181,12 @@ public class VOptionGroup extends VOptionGroupBase implements FocusHandler,
}
}
+ @Override
public void onBlur(BlurEvent arg0) {
blurOccured = true;
if (sendBlurEvents) {
Scheduler.get().scheduleDeferred(new Command() {
+ @Override
public void execute() {
// check whether blurOccured still is true and then send the
// event out to the server
diff --git a/src/com/vaadin/terminal/gwt/client/ui/optiongroup/VOptionGroupBase.java b/src/com/vaadin/terminal/gwt/client/ui/optiongroup/VOptionGroupBase.java
index a512f024b8..d128d7deb1 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/optiongroup/VOptionGroupBase.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/optiongroup/VOptionGroupBase.java
@@ -126,6 +126,7 @@ public abstract class VOptionGroupBase extends Composite implements Field,
abstract protected void setTabIndex(int tabIndex);
+ @Override
public void onClick(ClickEvent event) {
if (event.getSource() == newItemButton
&& !newItemField.getText().equals("")) {
@@ -135,6 +136,7 @@ public abstract class VOptionGroupBase extends Composite implements Field,
}
}
+ @Override
public void onChange(ChangeEvent event) {
if (multiselect) {
client.updateVariable(paintableId, "selected", getSelectedItems(),
@@ -145,6 +147,7 @@ public abstract class VOptionGroupBase extends Composite implements Field,
}
}
+ @Override
public void onKeyPress(KeyPressEvent event) {
if (event.getSource() == newItemField
&& event.getCharCode() == KeyCodes.KEY_ENTER) {
diff --git a/src/com/vaadin/terminal/gwt/client/ui/orderedlayout/AbstractOrderedLayoutConnector.java b/src/com/vaadin/terminal/gwt/client/ui/orderedlayout/AbstractOrderedLayoutConnector.java
index 9a89553fd2..e1bf217691 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/orderedlayout/AbstractOrderedLayoutConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/orderedlayout/AbstractOrderedLayoutConnector.java
@@ -9,6 +9,11 @@ import com.google.gwt.dom.client.Style;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.shared.ui.AlignmentInfo;
+import com.vaadin.shared.ui.LayoutClickRpc;
+import com.vaadin.shared.ui.VMarginInfo;
+import com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutServerRpc;
+import com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState;
import com.vaadin.terminal.gwt.client.ComponentConnector;
import com.vaadin.terminal.gwt.client.ConnectorHierarchyChangeEvent;
import com.vaadin.terminal.gwt.client.DirectionalManagedLayout;
@@ -18,10 +23,7 @@ import com.vaadin.terminal.gwt.client.VCaption;
import com.vaadin.terminal.gwt.client.communication.RpcProxy;
import com.vaadin.terminal.gwt.client.communication.StateChangeEvent;
import com.vaadin.terminal.gwt.client.ui.AbstractLayoutConnector;
-import com.vaadin.terminal.gwt.client.ui.AlignmentInfo;
import com.vaadin.terminal.gwt.client.ui.LayoutClickEventHandler;
-import com.vaadin.terminal.gwt.client.ui.LayoutClickRpc;
-import com.vaadin.terminal.gwt.client.ui.VMarginInfo;
import com.vaadin.terminal.gwt.client.ui.layout.ComponentConnectorLayoutSlot;
import com.vaadin.terminal.gwt.client.ui.layout.VLayoutSlot;
@@ -48,6 +50,7 @@ public abstract class AbstractOrderedLayoutConnector extends
@Override
public void init() {
+ super.init();
rpc = RpcProxy.create(AbstractOrderedLayoutServerRpc.class, this);
getLayoutManager().registerDependency(this,
getWidget().spacingMeasureElement);
@@ -72,6 +75,7 @@ public abstract class AbstractOrderedLayoutConnector extends
return (AbstractOrderedLayoutState) super.getState();
}
+ @Override
public void updateCaption(ComponentConnector component) {
VMeasuringOrderedLayout layout = getWidget();
if (VCaption.isNeeded(component.getState())) {
@@ -262,6 +266,7 @@ public abstract class AbstractOrderedLayoutConnector extends
}
}
+ @Override
public void layoutHorizontally() {
if (getWidget().isVertical) {
layoutSecondaryDirection();
@@ -270,6 +275,7 @@ public abstract class AbstractOrderedLayoutConnector extends
}
}
+ @Override
public void layoutVertically() {
if (getWidget().isVertical) {
layoutPrimaryDirection();
diff --git a/src/com/vaadin/terminal/gwt/client/ui/orderedlayout/AbstractOrderedLayoutServerRpc.java b/src/com/vaadin/terminal/gwt/client/ui/orderedlayout/AbstractOrderedLayoutServerRpc.java
deleted file mode 100644
index 5a29eacada..0000000000
--- a/src/com/vaadin/terminal/gwt/client/ui/orderedlayout/AbstractOrderedLayoutServerRpc.java
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
-@VaadinApache2LicenseForJavaFiles@
- */
-package com.vaadin.terminal.gwt.client.ui.orderedlayout;
-
-import com.vaadin.terminal.gwt.client.communication.ServerRpc;
-import com.vaadin.terminal.gwt.client.ui.LayoutClickRpc;
-
-public interface AbstractOrderedLayoutServerRpc extends LayoutClickRpc,
- ServerRpc {
-
-} \ No newline at end of file
diff --git a/src/com/vaadin/terminal/gwt/client/ui/orderedlayout/HorizontalLayoutConnector.java b/src/com/vaadin/terminal/gwt/client/ui/orderedlayout/HorizontalLayoutConnector.java
index 3b0014c0f0..459bd474d1 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/orderedlayout/HorizontalLayoutConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/orderedlayout/HorizontalLayoutConnector.java
@@ -3,8 +3,8 @@
*/
package com.vaadin.terminal.gwt.client.ui.orderedlayout;
-import com.vaadin.terminal.gwt.client.ui.Connect;
-import com.vaadin.terminal.gwt.client.ui.Connect.LoadStyle;
+import com.vaadin.shared.ui.Connect;
+import com.vaadin.shared.ui.Connect.LoadStyle;
import com.vaadin.ui.HorizontalLayout;
@Connect(value = HorizontalLayout.class, loadStyle = LoadStyle.EAGER)
diff --git a/src/com/vaadin/terminal/gwt/client/ui/orderedlayout/VMeasuringOrderedLayout.java b/src/com/vaadin/terminal/gwt/client/ui/orderedlayout/VMeasuringOrderedLayout.java
index de55ca98e6..4bb1c66e86 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/orderedlayout/VMeasuringOrderedLayout.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/orderedlayout/VMeasuringOrderedLayout.java
@@ -15,8 +15,8 @@ import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.ui.ComplexPanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.user.client.ui.WidgetCollection;
+import com.vaadin.shared.ui.VMarginInfo;
import com.vaadin.terminal.gwt.client.VCaption;
-import com.vaadin.terminal.gwt.client.ui.VMarginInfo;
import com.vaadin.terminal.gwt.client.ui.layout.VLayoutSlot;
public class VMeasuringOrderedLayout extends ComplexPanel {
diff --git a/src/com/vaadin/terminal/gwt/client/ui/orderedlayout/VerticalLayoutConnector.java b/src/com/vaadin/terminal/gwt/client/ui/orderedlayout/VerticalLayoutConnector.java
index 42a762864e..a481283156 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/orderedlayout/VerticalLayoutConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/orderedlayout/VerticalLayoutConnector.java
@@ -3,8 +3,8 @@
*/
package com.vaadin.terminal.gwt.client.ui.orderedlayout;
-import com.vaadin.terminal.gwt.client.ui.Connect;
-import com.vaadin.terminal.gwt.client.ui.Connect.LoadStyle;
+import com.vaadin.shared.ui.Connect;
+import com.vaadin.shared.ui.Connect.LoadStyle;
import com.vaadin.ui.VerticalLayout;
@Connect(value = VerticalLayout.class, loadStyle = LoadStyle.EAGER)
diff --git a/src/com/vaadin/terminal/gwt/client/ui/panel/PanelConnector.java b/src/com/vaadin/terminal/gwt/client/ui/panel/PanelConnector.java
index d9096526f3..fd4761de5e 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/panel/PanelConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/panel/PanelConnector.java
@@ -7,17 +7,19 @@ import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.dom.client.Style;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.shared.MouseEventDetails;
+import com.vaadin.shared.ui.Connect;
+import com.vaadin.shared.ui.panel.PanelServerRpc;
+import com.vaadin.shared.ui.panel.PanelState;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.ComponentConnector;
import com.vaadin.terminal.gwt.client.ConnectorHierarchyChangeEvent;
import com.vaadin.terminal.gwt.client.LayoutManager;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
import com.vaadin.terminal.gwt.client.Paintable;
import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.communication.RpcProxy;
import com.vaadin.terminal.gwt.client.ui.AbstractComponentContainerConnector;
import com.vaadin.terminal.gwt.client.ui.ClickEventHandler;
-import com.vaadin.terminal.gwt.client.ui.Connect;
import com.vaadin.terminal.gwt.client.ui.PostLayoutListener;
import com.vaadin.terminal.gwt.client.ui.ShortcutActionHandler;
import com.vaadin.terminal.gwt.client.ui.SimpleManagedLayout;
@@ -46,6 +48,7 @@ public class PanelConnector extends AbstractComponentContainerConnector
@Override
public void init() {
+ super.init();
rpc = RpcProxy.create(PanelServerRpc.class, this);
VPanel panel = getWidget();
LayoutManager layoutManager = getLayoutManager();
@@ -70,6 +73,7 @@ public class PanelConnector extends AbstractComponentContainerConnector
return false;
}
+ @Override
public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
if (isRealUpdate(uidl)) {
@@ -164,6 +168,7 @@ public class PanelConnector extends AbstractComponentContainerConnector
getWidget().contentNode.setTabIndex(getState().getTabIndex());
}
+ @Override
public void updateCaption(ComponentConnector component) {
// NOP: layouts caption, errors etc not rendered in Panel
}
@@ -173,6 +178,7 @@ public class PanelConnector extends AbstractComponentContainerConnector
return (VPanel) super.getWidget();
}
+ @Override
public void layout() {
updateSizes();
}
@@ -199,6 +205,7 @@ public class PanelConnector extends AbstractComponentContainerConnector
panel.scrollLeft = panel.contentNode.getScrollLeft();
}
+ @Override
public void postLayout() {
VPanel panel = getWidget();
if (uidlScrollTop != null) {
diff --git a/src/com/vaadin/terminal/gwt/client/ui/panel/PanelServerRpc.java b/src/com/vaadin/terminal/gwt/client/ui/panel/PanelServerRpc.java
deleted file mode 100644
index 9b59344aec..0000000000
--- a/src/com/vaadin/terminal/gwt/client/ui/panel/PanelServerRpc.java
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
-@VaadinApache2LicenseForJavaFiles@
- */
-package com.vaadin.terminal.gwt.client.ui.panel;
-
-import com.vaadin.terminal.gwt.client.communication.ServerRpc;
-import com.vaadin.terminal.gwt.client.ui.ClickRpc;
-
-public interface PanelServerRpc extends ClickRpc, ServerRpc {
-
-} \ No newline at end of file
diff --git a/src/com/vaadin/terminal/gwt/client/ui/panel/VPanel.java b/src/com/vaadin/terminal/gwt/client/ui/panel/VPanel.java
index 6a06367acd..8764d61c3a 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/panel/VPanel.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/panel/VPanel.java
@@ -100,6 +100,7 @@ public class VPanel extends SimplePanel implements ShortcutActionHandlerOwner,
* @see com.vaadin.terminal.gwt.client.Focusable#focus()
*/
+ @Override
public void focus() {
setFocus(true);
@@ -167,13 +168,10 @@ public class VPanel extends SimplePanel implements ShortcutActionHandlerOwner,
client.updateVariable(id, "scrollTop", scrollTop, false);
client.updateVariable(id, "scrollLeft", scrollLeft, false);
}
- } else if (captionNode.isOrHasChild(target)) {
- if (client != null) {
- client.handleTooltipEvent(event, this);
- }
}
}
+ @Override
public ShortcutActionHandler getShortcutActionHandler() {
return shortcutHandler;
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/passwordfield/PasswordFieldConnector.java b/src/com/vaadin/terminal/gwt/client/ui/passwordfield/PasswordFieldConnector.java
index c4c5954c33..55d645f12e 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/passwordfield/PasswordFieldConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/passwordfield/PasswordFieldConnector.java
@@ -4,7 +4,7 @@
package com.vaadin.terminal.gwt.client.ui.passwordfield;
-import com.vaadin.terminal.gwt.client.ui.Connect;
+import com.vaadin.shared.ui.Connect;
import com.vaadin.terminal.gwt.client.ui.textfield.TextFieldConnector;
import com.vaadin.ui.PasswordField;
diff --git a/src/com/vaadin/terminal/gwt/client/ui/popupview/PopupViewConnector.java b/src/com/vaadin/terminal/gwt/client/ui/popupview/PopupViewConnector.java
index c5117fdddb..19b35821c7 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/popupview/PopupViewConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/popupview/PopupViewConnector.java
@@ -3,6 +3,7 @@
*/
package com.vaadin.terminal.gwt.client.ui.popupview;
+import com.vaadin.shared.ui.Connect;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.ComponentConnector;
import com.vaadin.terminal.gwt.client.Paintable;
@@ -10,7 +11,6 @@ import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.VCaption;
import com.vaadin.terminal.gwt.client.VCaptionWrapper;
import com.vaadin.terminal.gwt.client.ui.AbstractComponentContainerConnector;
-import com.vaadin.terminal.gwt.client.ui.Connect;
import com.vaadin.terminal.gwt.client.ui.PostLayoutListener;
import com.vaadin.ui.PopupView;
@@ -31,6 +31,7 @@ public class PopupViewConnector extends AbstractComponentContainerConnector
* @see com.vaadin.terminal.gwt.client.ComponentConnector#updateFromUIDL(com.vaadin.terminal.gwt.client.UIDL,
* com.vaadin.terminal.gwt.client.ApplicationConnection)
*/
+ @Override
public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
if (!isRealUpdate(uidl)) {
return;
@@ -81,6 +82,7 @@ public class PopupViewConnector extends AbstractComponentContainerConnector
}
}// updateFromUIDL
+ @Override
public void updateCaption(ComponentConnector component) {
if (VCaption.isNeeded(component.getState())) {
if (getWidget().popup.captionWrapper != null) {
@@ -104,6 +106,7 @@ public class PopupViewConnector extends AbstractComponentContainerConnector
return (VPopupView) super.getWidget();
}
+ @Override
public void postLayout() {
if (centerAfterLayout) {
centerAfterLayout = false;
diff --git a/src/com/vaadin/terminal/gwt/client/ui/popupview/VPopupView.java b/src/com/vaadin/terminal/gwt/client/ui/popupview/VPopupView.java
index da48975726..6efcd8f417 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/popupview/VPopupView.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/popupview/VPopupView.java
@@ -10,6 +10,8 @@ import java.util.Set;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.KeyCodes;
+import com.google.gwt.event.dom.client.KeyDownEvent;
+import com.google.gwt.event.dom.client.KeyDownHandler;
import com.google.gwt.event.logical.shared.CloseEvent;
import com.google.gwt.event.logical.shared.CloseHandler;
import com.google.gwt.user.client.DOM;
@@ -26,7 +28,9 @@ import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.ComponentConnector;
import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.VCaptionWrapper;
-import com.vaadin.terminal.gwt.client.VTooltip;
+import com.vaadin.terminal.gwt.client.VConsole;
+import com.vaadin.terminal.gwt.client.ui.ShortcutActionHandler;
+import com.vaadin.terminal.gwt.client.ui.ShortcutActionHandler.ShortcutActionHandlerOwner;
import com.vaadin.terminal.gwt.client.ui.VOverlay;
import com.vaadin.terminal.gwt.client.ui.richtextarea.VRichTextArea;
@@ -60,6 +64,7 @@ public class VPopupView extends HTML {
// When we click to open the popup...
addClickHandler(new ClickHandler() {
+ @Override
public void onClick(ClickEvent event) {
updateState(true);
}
@@ -67,13 +72,13 @@ public class VPopupView extends HTML {
// ..and when we close it
popup.addCloseHandler(new CloseHandler<PopupPanel>() {
+ @Override
public void onClose(CloseEvent<PopupPanel> event) {
updateState(false);
}
});
popup.setAnimationEnabled(true);
- sinkEvents(VTooltip.TOOLTIP_EVENTS);
}
/**
@@ -183,8 +188,23 @@ public class VPopupView extends HTML {
private final Set<Element> activeChildren = new HashSet<Element>();
private boolean hiding = false;
+ private ShortcutActionHandler shortcutActionHandler;
+
public CustomPopup() {
super(true, false, true); // autoHide, not modal, dropshadow
+
+ // Delegate popup keyboard events to the relevant handler. The
+ // events do not propagate automatically because the popup is
+ // directly attached to the RootPanel.
+ addDomHandler(new KeyDownHandler() {
+ @Override
+ public void onKeyDown(KeyDownEvent event) {
+ if (shortcutActionHandler != null) {
+ shortcutActionHandler.handleKeyboardEvent(Event
+ .as(event.getNativeEvent()));
+ }
+ }
+ }, KeyDownEvent.getType());
}
// For some reason ONMOUSEOUT events are not always received, so we have
@@ -227,18 +247,33 @@ public class VPopupView extends HTML {
@Override
public void hide(boolean autoClosed) {
+ VConsole.log("Hiding popupview");
hiding = true;
syncChildren();
if (popupComponentWidget != null && popupComponentWidget != loading) {
remove(popupComponentWidget);
}
hasHadMouseOver = false;
+ shortcutActionHandler = null;
super.hide(autoClosed);
}
@Override
public void show() {
hiding = false;
+
+ // Find the shortcut action handler that should handle keyboard
+ // events from the popup. The events do not propagate automatically
+ // because the popup is directly attached to the RootPanel.
+ Widget widget = VPopupView.this;
+ while (shortcutActionHandler == null && widget != null) {
+ if (widget instanceof ShortcutActionHandlerOwner) {
+ shortcutActionHandler = ((ShortcutActionHandlerOwner) widget)
+ .getShortcutActionHandler();
+ }
+ widget = widget.getParent();
+ }
+
super.show();
}
@@ -337,12 +372,4 @@ public class VPopupView extends HTML {
}// class CustomPopup
- @Override
- public void onBrowserEvent(Event event) {
- super.onBrowserEvent(event);
- if (client != null) {
- client.handleTooltipEvent(event, this);
- }
- }
-
}// class VPopupView
diff --git a/src/com/vaadin/terminal/gwt/client/ui/progressindicator/ProgressIndicatorConnector.java b/src/com/vaadin/terminal/gwt/client/ui/progressindicator/ProgressIndicatorConnector.java
index 9d0532fae3..cdb0174a49 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/progressindicator/ProgressIndicatorConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/progressindicator/ProgressIndicatorConnector.java
@@ -5,17 +5,18 @@
package com.vaadin.terminal.gwt.client.ui.progressindicator;
import com.google.gwt.user.client.DOM;
+import com.vaadin.shared.ui.Connect;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.Paintable;
import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.ui.AbstractFieldConnector;
-import com.vaadin.terminal.gwt.client.ui.Connect;
import com.vaadin.ui.ProgressIndicator;
@Connect(ProgressIndicator.class)
public class ProgressIndicatorConnector extends AbstractFieldConnector
implements Paintable {
+ @Override
public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
if (!isRealUpdate(uidl)) {
diff --git a/src/com/vaadin/terminal/gwt/client/ui/richtextarea/RichTextAreaConnector.java b/src/com/vaadin/terminal/gwt/client/ui/richtextarea/RichTextAreaConnector.java
index db52640088..66781eb645 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/richtextarea/RichTextAreaConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/richtextarea/RichTextAreaConnector.java
@@ -4,12 +4,12 @@
package com.vaadin.terminal.gwt.client.ui.richtextarea;
import com.google.gwt.user.client.Event;
+import com.vaadin.shared.ui.Connect;
+import com.vaadin.shared.ui.Connect.LoadStyle;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.Paintable;
import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.ui.AbstractFieldConnector;
-import com.vaadin.terminal.gwt.client.ui.Connect;
-import com.vaadin.terminal.gwt.client.ui.Connect.LoadStyle;
import com.vaadin.terminal.gwt.client.ui.ShortcutActionHandler.BeforeShortcutActionListener;
import com.vaadin.ui.RichTextArea;
@@ -17,6 +17,7 @@ import com.vaadin.ui.RichTextArea;
public class RichTextAreaConnector extends AbstractFieldConnector implements
Paintable, BeforeShortcutActionListener {
+ @Override
public void updateFromUIDL(final UIDL uidl, ApplicationConnection client) {
getWidget().client = client;
getWidget().id = uidl.getId();
@@ -59,6 +60,7 @@ public class RichTextAreaConnector extends AbstractFieldConnector implements
}
+ @Override
public void onBeforeShortcutAction(Event e) {
getWidget().synchronizeContentToServer();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/richtextarea/VRichTextArea.java b/src/com/vaadin/terminal/gwt/client/ui/richtextarea/VRichTextArea.java
index eb062a3799..f9b399caac 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/richtextarea/VRichTextArea.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/richtextarea/VRichTextArea.java
@@ -31,6 +31,7 @@ import com.vaadin.terminal.gwt.client.Util;
import com.vaadin.terminal.gwt.client.ui.Field;
import com.vaadin.terminal.gwt.client.ui.ShortcutActionHandler;
import com.vaadin.terminal.gwt.client.ui.ShortcutActionHandler.ShortcutActionHandlerOwner;
+import com.vaadin.terminal.gwt.client.ui.TouchScrollDelegate;
/**
* This class implements a basic client side rich text editor component.
@@ -85,6 +86,7 @@ public class VRichTextArea extends Composite implements Field, ChangeHandler,
initWidget(fp);
setStyleName(CLASSNAME);
+ TouchScrollDelegate.enableTouchScrolling(html, html.getElement());
}
private void createRTAComponents() {
@@ -160,6 +162,7 @@ public class VRichTextArea extends Composite implements Field, ChangeHandler,
}
// TODO is this really used, or does everything go via onBlur() only?
+ @Override
public void onChange(ChangeEvent event) {
synchronizeContentToServer();
}
@@ -177,6 +180,7 @@ public class VRichTextArea extends Composite implements Field, ChangeHandler,
}
}
+ @Override
public void onBlur(BlurEvent event) {
synchronizeContentToServer();
// TODO notify possible server side blur/focus listeners
@@ -242,6 +246,7 @@ public class VRichTextArea extends Composite implements Field, ChangeHandler,
* delay the height setting so the DOM has had time to stabilize.
*/
Scheduler.get().scheduleDeferred(new Command() {
+ @Override
public void execute() {
int editorHeight = getOffsetHeight()
- getExtraVerticalPixels()
@@ -281,9 +286,11 @@ public class VRichTextArea extends Composite implements Field, ChangeHandler,
}
}
+ @Override
public void onKeyPress(KeyPressEvent event) {
if (maxLength >= 0) {
Scheduler.get().scheduleDeferred(new Command() {
+ @Override
public void execute() {
if (rta.getHTML().length() > maxLength) {
rta.setHTML(rta.getHTML().substring(0, maxLength));
@@ -293,6 +300,7 @@ public class VRichTextArea extends Composite implements Field, ChangeHandler,
}
}
+ @Override
public void onKeyDown(KeyDownEvent event) {
// delegate to closest shortcut action handler
// throw event from the iframe forward to the shortcuthandler
@@ -320,14 +328,17 @@ public class VRichTextArea extends Composite implements Field, ChangeHandler,
return hasShortcutActionHandler;
}
+ @Override
public int getTabIndex() {
return rta.getTabIndex();
}
+ @Override
public void setAccessKey(char key) {
rta.setAccessKey(key);
}
+ @Override
public void setFocus(boolean focused) {
/*
* Similar issue as with selectAll. Focusing must happen before possible
@@ -342,6 +353,7 @@ public class VRichTextArea extends Composite implements Field, ChangeHandler,
}.schedule(300);
}
+ @Override
public void setTabIndex(int index) {
rta.setTabIndex(index);
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/richtextarea/VRichTextToolbar.java b/src/com/vaadin/terminal/gwt/client/ui/richtextarea/VRichTextToolbar.java
index 1e1805efdf..d86c7a4bf5 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/richtextarea/VRichTextToolbar.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/richtextarea/VRichTextToolbar.java
@@ -172,6 +172,7 @@ public class VRichTextToolbar extends Composite {
private class EventHandler implements ClickHandler, ChangeHandler,
KeyUpHandler {
+ @Override
@SuppressWarnings("deprecation")
public void onChange(ChangeEvent event) {
Object sender = event.getSource();
@@ -193,6 +194,7 @@ public class VRichTextToolbar extends Composite {
}
}
+ @Override
@SuppressWarnings("deprecation")
public void onClick(ClickEvent event) {
Object sender = event.getSource();
@@ -249,6 +251,7 @@ public class VRichTextToolbar extends Composite {
}
}
+ @Override
public void onKeyUp(KeyUpEvent event) {
if (event.getSource() == richText) {
// We use the RichTextArea's onKeyUp event to update the toolbar
diff --git a/src/com/vaadin/terminal/gwt/client/ui/root/RootConnector.java b/src/com/vaadin/terminal/gwt/client/ui/root/RootConnector.java
index 1a62e566ad..7b5097ff77 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/root/RootConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/root/RootConnector.java
@@ -19,13 +19,18 @@ import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.web.bindery.event.shared.HandlerRegistration;
+import com.vaadin.shared.MouseEventDetails;
+import com.vaadin.shared.ui.Connect;
+import com.vaadin.shared.ui.Connect.LoadStyle;
+import com.vaadin.shared.ui.root.PageClientRpc;
+import com.vaadin.shared.ui.root.RootServerRpc;
+import com.vaadin.shared.ui.root.RootState;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.BrowserInfo;
import com.vaadin.terminal.gwt.client.ComponentConnector;
import com.vaadin.terminal.gwt.client.ConnectorHierarchyChangeEvent;
import com.vaadin.terminal.gwt.client.ConnectorMap;
import com.vaadin.terminal.gwt.client.Focusable;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
import com.vaadin.terminal.gwt.client.Paintable;
import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.VConsole;
@@ -34,8 +39,6 @@ import com.vaadin.terminal.gwt.client.communication.StateChangeEvent;
import com.vaadin.terminal.gwt.client.communication.StateChangeEvent.StateChangeHandler;
import com.vaadin.terminal.gwt.client.ui.AbstractComponentContainerConnector;
import com.vaadin.terminal.gwt.client.ui.ClickEventHandler;
-import com.vaadin.terminal.gwt.client.ui.Connect;
-import com.vaadin.terminal.gwt.client.ui.Connect.LoadStyle;
import com.vaadin.terminal.gwt.client.ui.ShortcutActionHandler;
import com.vaadin.terminal.gwt.client.ui.layout.MayScrollChildren;
import com.vaadin.terminal.gwt.client.ui.notification.VNotification;
@@ -51,6 +54,7 @@ public class RootConnector extends AbstractComponentContainerConnector
private HandlerRegistration childStateChangeHandlerRegistration;
private final StateChangeHandler childStateChangeHandler = new StateChangeHandler() {
+ @Override
public void onStateChanged(StateChangeEvent stateChangeEvent) {
// TODO Should use a more specific handler that only reacts to
// size changes
@@ -62,12 +66,14 @@ public class RootConnector extends AbstractComponentContainerConnector
protected void init() {
super.init();
registerRpc(PageClientRpc.class, new PageClientRpc() {
+ @Override
public void setTitle(String title) {
com.google.gwt.user.client.Window.setTitle(title);
}
});
}
+ @Override
public void updateFromUIDL(final UIDL uidl, ApplicationConnection client) {
ConnectorMap paintableMap = ConnectorMap.get(getConnection());
getWidget().rendering = true;
@@ -118,6 +124,7 @@ public class RootConnector extends AbstractComponentContainerConnector
// to finish rendering this window in case this is a download
// (and window stays open).
Scheduler.get().scheduleDeferred(new Command() {
+ @Override
public void execute() {
VRoot.goTo(url);
}
@@ -182,6 +189,7 @@ public class RootConnector extends AbstractComponentContainerConnector
if (uidl.hasAttribute("focused")) {
// set focused component when render phase is finished
Scheduler.get().scheduleDeferred(new Command() {
+ @Override
public void execute() {
ComponentConnector paintable = (ComponentConnector) uidl
.getPaintableAttribute("focused", getConnection());
@@ -246,6 +254,11 @@ public class RootConnector extends AbstractComponentContainerConnector
getWidget().currentFragment, false);
}
+ if (firstPaint) {
+ // Queue the initial window size to be sent with the following
+ // request.
+ getWidget().sendClientResized();
+ }
getWidget().rendering = false;
}
@@ -288,6 +301,7 @@ public class RootConnector extends AbstractComponentContainerConnector
};
+ @Override
public void updateCaption(ComponentConnector component) {
// NOP The main view never draws caption for its layout
}
@@ -407,6 +421,7 @@ public class RootConnector extends AbstractComponentContainerConnector
}
Scheduler.get().scheduleDeferred(new Command() {
+ @Override
public void execute() {
componentConnector.getWidget().getElement().scrollIntoView();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/root/RootServerRpc.java b/src/com/vaadin/terminal/gwt/client/ui/root/RootServerRpc.java
deleted file mode 100644
index 389500949d..0000000000
--- a/src/com/vaadin/terminal/gwt/client/ui/root/RootServerRpc.java
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
-@VaadinApache2LicenseForJavaFiles@
- */
-package com.vaadin.terminal.gwt.client.ui.root;
-
-import com.vaadin.terminal.gwt.client.communication.ServerRpc;
-import com.vaadin.terminal.gwt.client.ui.ClickRpc;
-
-public interface RootServerRpc extends ClickRpc, ServerRpc {
-
-} \ No newline at end of file
diff --git a/src/com/vaadin/terminal/gwt/client/ui/root/VRoot.java b/src/com/vaadin/terminal/gwt/client/ui/root/VRoot.java
index 0af8919280..fddb76e755 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/root/VRoot.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/root/VRoot.java
@@ -123,6 +123,7 @@ public class VRoot extends SimplePanel implements ResizeHandler,
*/
private final ValueChangeHandler<String> historyChangeHandler = new ValueChangeHandler<String>() {
+ @Override
public void onValueChange(ValueChangeEvent<String> event) {
String newFragment = event.getValue();
@@ -138,6 +139,7 @@ public class VRoot extends SimplePanel implements ResizeHandler,
private VLazyExecutor delayedResizeExecutor = new VLazyExecutor(200,
new ScheduledCommand() {
+ @Override
public void execute() {
performSizeCheck();
}
@@ -361,6 +363,7 @@ public class VRoot extends SimplePanel implements ResizeHandler,
* .gwt.event.logical.shared.ResizeEvent)
*/
+ @Override
public void onResize(ResizeEvent event) {
triggerSizeChangeCheck();
}
@@ -395,7 +398,7 @@ public class VRoot extends SimplePanel implements ResizeHandler,
/**
* Send new dimensions to the server.
*/
- private void sendClientResized() {
+ void sendClientResized() {
Element parentElement = getElement().getParentElement();
int viewHeight = parentElement.getClientHeight();
int viewWidth = parentElement.getClientWidth();
@@ -416,6 +419,7 @@ public class VRoot extends SimplePanel implements ResizeHandler,
$wnd.location = url;
}-*/;
+ @Override
public void onWindowClosing(Window.ClosingEvent event) {
// Change focus on this window in order to ensure that all state is
// collected from textfields
@@ -435,10 +439,12 @@ public class VRoot extends SimplePanel implements ResizeHandler,
}
}-*/;
+ @Override
public ShortcutActionHandler getShortcutActionHandler() {
return actionHandler;
}
+ @Override
public void focus() {
getElement().focus();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/slider/SliderConnector.java b/src/com/vaadin/terminal/gwt/client/ui/slider/SliderConnector.java
index 6fd7f8b6aa..f8588dbf3f 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/slider/SliderConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/slider/SliderConnector.java
@@ -5,17 +5,18 @@ package com.vaadin.terminal.gwt.client.ui.slider;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.user.client.Command;
+import com.vaadin.shared.ui.Connect;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.Paintable;
import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.ui.AbstractFieldConnector;
-import com.vaadin.terminal.gwt.client.ui.Connect;
import com.vaadin.ui.Slider;
@Connect(Slider.class)
public class SliderConnector extends AbstractFieldConnector implements
Paintable {
+ @Override
public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
getWidget().client = client;
@@ -51,6 +52,7 @@ public class SliderConnector extends AbstractFieldConnector implements
if (!getWidget().vertical) {
// Draw handle with a delay to allow base to gain maximum width
Scheduler.get().scheduleDeferred(new Command() {
+ @Override
public void execute() {
getWidget().buildHandle();
getWidget().setValue(getWidget().value, false);
diff --git a/src/com/vaadin/terminal/gwt/client/ui/slider/VSlider.java b/src/com/vaadin/terminal/gwt/client/ui/slider/VSlider.java
index 5c7ee7a784..06608c95fe 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/slider/VSlider.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/slider/VSlider.java
@@ -18,7 +18,6 @@ import com.vaadin.terminal.gwt.client.BrowserInfo;
import com.vaadin.terminal.gwt.client.ContainerResizedListener;
import com.vaadin.terminal.gwt.client.Util;
import com.vaadin.terminal.gwt.client.VConsole;
-import com.vaadin.terminal.gwt.client.VTooltip;
import com.vaadin.terminal.gwt.client.ui.Field;
import com.vaadin.terminal.gwt.client.ui.SimpleFocusablePanel;
import com.vaadin.terminal.gwt.client.ui.VLazyExecutor;
@@ -79,6 +78,7 @@ public class VSlider extends SimpleFocusablePanel implements Field,
private VLazyExecutor delayedValueUpdater = new VLazyExecutor(100,
new ScheduledCommand() {
+ @Override
public void execute() {
updateValueToServer();
acceleration = 1;
@@ -114,8 +114,6 @@ public class VSlider extends SimpleFocusablePanel implements Field,
feedbackPopup.addStyleName(CLASSNAME + "-feedback");
feedbackPopup.setWidget(feedback);
-
- sinkEvents(VTooltip.TOOLTIP_EVENTS);
}
void setFeedbackValue(double value) {
@@ -162,6 +160,7 @@ public class VSlider extends SimpleFocusablePanel implements Field,
DOM.setStyleAttribute(base, styleAttribute, MIN_SIZE + "px");
Scheduler.get().scheduleDeferred(new Command() {
+ @Override
public void execute() {
final Element p = DOM.getParent(getElement());
if (DOM.getElementPropertyInt(p, domProperty) > (MIN_SIZE + 5)) {
@@ -291,9 +290,6 @@ public class VSlider extends SimpleFocusablePanel implements Field,
event.preventDefault(); // avoid simulated events
event.stopPropagation();
}
- if (client != null) {
- client.handleTooltipEvent(event, this);
- }
}
private void processMouseWheelEvent(final Event event) {
@@ -422,6 +418,7 @@ public class VSlider extends SimpleFocusablePanel implements Field,
}
}
+ @Override
public void iLayout() {
if (vertical) {
setHeight();
diff --git a/src/com/vaadin/terminal/gwt/client/ui/splitpanel/AbstractSplitPanelConnector.java b/src/com/vaadin/terminal/gwt/client/ui/splitpanel/AbstractSplitPanelConnector.java
index e33755bc9b..f82718e4ea 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/splitpanel/AbstractSplitPanelConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/splitpanel/AbstractSplitPanelConnector.java
@@ -14,16 +14,18 @@ import com.google.gwt.event.shared.HandlerRegistration;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.shared.MouseEventDetails;
+import com.vaadin.shared.ui.splitpanel.AbstractSplitPanelRpc;
+import com.vaadin.shared.ui.splitpanel.AbstractSplitPanelState;
+import com.vaadin.shared.ui.splitpanel.AbstractSplitPanelState.SplitterState;
import com.vaadin.terminal.gwt.client.ComponentConnector;
import com.vaadin.terminal.gwt.client.ConnectorHierarchyChangeEvent;
import com.vaadin.terminal.gwt.client.LayoutManager;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
import com.vaadin.terminal.gwt.client.communication.RpcProxy;
import com.vaadin.terminal.gwt.client.communication.StateChangeEvent;
import com.vaadin.terminal.gwt.client.ui.AbstractComponentContainerConnector;
import com.vaadin.terminal.gwt.client.ui.ClickEventHandler;
import com.vaadin.terminal.gwt.client.ui.SimpleManagedLayout;
-import com.vaadin.terminal.gwt.client.ui.splitpanel.AbstractSplitPanelState.SplitterState;
import com.vaadin.terminal.gwt.client.ui.splitpanel.VAbstractSplitPanel.SplitterMoveHandler;
import com.vaadin.terminal.gwt.client.ui.splitpanel.VAbstractSplitPanel.SplitterMoveHandler.SplitterMoveEvent;
@@ -41,6 +43,7 @@ public abstract class AbstractSplitPanelConnector extends
getWidget().addHandler(new SplitterMoveHandler() {
+ @Override
public void splitterMoved(SplitterMoveEvent event) {
String position = getWidget().getSplitterPosition();
float pos = 0;
@@ -61,6 +64,7 @@ public abstract class AbstractSplitPanelConnector extends
}, SplitterMoveEvent.TYPE);
}
+ @Override
public void updateCaption(ComponentConnector component) {
// TODO Implement caption handling
}
@@ -145,6 +149,7 @@ public abstract class AbstractSplitPanelConnector extends
getWidget().makeScrollable();
}
+ @Override
public void layout() {
VAbstractSplitPanel splitPanel = getWidget();
splitPanel.setSplitPosition(splitPanel.position);
diff --git a/src/com/vaadin/terminal/gwt/client/ui/splitpanel/HorizontalSplitPanelConnector.java b/src/com/vaadin/terminal/gwt/client/ui/splitpanel/HorizontalSplitPanelConnector.java
index 92c942e04b..8c2c4d24cd 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/splitpanel/HorizontalSplitPanelConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/splitpanel/HorizontalSplitPanelConnector.java
@@ -3,8 +3,8 @@
*/
package com.vaadin.terminal.gwt.client.ui.splitpanel;
-import com.vaadin.terminal.gwt.client.ui.Connect;
-import com.vaadin.terminal.gwt.client.ui.Connect.LoadStyle;
+import com.vaadin.shared.ui.Connect;
+import com.vaadin.shared.ui.Connect.LoadStyle;
import com.vaadin.ui.HorizontalSplitPanel;
@Connect(value = HorizontalSplitPanel.class, loadStyle = LoadStyle.EAGER)
diff --git a/src/com/vaadin/terminal/gwt/client/ui/splitpanel/VAbstractSplitPanel.java b/src/com/vaadin/terminal/gwt/client/ui/splitpanel/VAbstractSplitPanel.java
index e2f30c6676..a20c0476a5 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/splitpanel/VAbstractSplitPanel.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/splitpanel/VAbstractSplitPanel.java
@@ -125,12 +125,14 @@ public class VAbstractSplitPanel extends ComplexPanel {
makeScrollable();
addDomHandler(new TouchCancelHandler() {
+ @Override
public void onTouchCancel(TouchCancelEvent event) {
// TODO When does this actually happen??
VConsole.log("TOUCH CANCEL");
}
}, TouchCancelEvent.getType());
addDomHandler(new TouchStartHandler() {
+ @Override
public void onTouchStart(TouchStartEvent event) {
Node target = event.getTouches().get(0).getTarget().cast();
if (splitter.isOrHasChild(target)) {
@@ -139,6 +141,7 @@ public class VAbstractSplitPanel extends ComplexPanel {
}
}, TouchStartEvent.getType());
addDomHandler(new TouchMoveHandler() {
+ @Override
public void onTouchMove(TouchMoveEvent event) {
if (resizing) {
onMouseMove(Event.as(event.getNativeEvent()));
@@ -146,6 +149,7 @@ public class VAbstractSplitPanel extends ComplexPanel {
}
}, TouchMoveEvent.getType());
addDomHandler(new TouchEndHandler() {
+ @Override
public void onTouchEnd(TouchEndEvent event) {
if (resizing) {
onMouseUp(Event.as(event.getNativeEvent()));
@@ -251,23 +255,22 @@ public class VAbstractSplitPanel extends ComplexPanel {
* @return
*/
private float convertToPercentage(String pos) {
- float posAsFloat = 0;
-
- if (pos.indexOf("px") > 0) {
- int posAsInt = Integer.parseInt(pos.substring(0, pos.length() - 2));
+ if (pos.endsWith("px")) {
+ float pixelPosition = Float.parseFloat(pos.substring(0,
+ pos.length() - 2));
int offsetLength = orientation == ORIENTATION_HORIZONTAL ? getOffsetWidth()
: getOffsetHeight();
- // 100% needs special handling
- if (posAsInt + getSplitterSize() >= offsetLength) {
- posAsInt = offsetLength;
+ // Take splitter size into account at the edge
+ if (pixelPosition + getSplitterSize() >= offsetLength) {
+ return 100;
}
- posAsFloat = ((float) posAsInt / (float) offsetLength * 100);
+ return pixelPosition / offsetLength * 100;
} else {
- posAsFloat = Float.parseFloat(pos.substring(0, pos.length() - 1));
+ assert pos.endsWith("%");
+ return Float.parseFloat(pos.substring(0, pos.length() - 1));
}
- return posAsFloat;
}
/**
diff --git a/src/com/vaadin/terminal/gwt/client/ui/splitpanel/VerticalSplitPanelConnector.java b/src/com/vaadin/terminal/gwt/client/ui/splitpanel/VerticalSplitPanelConnector.java
index 5015fcc60c..048136c1c9 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/splitpanel/VerticalSplitPanelConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/splitpanel/VerticalSplitPanelConnector.java
@@ -4,8 +4,8 @@
package com.vaadin.terminal.gwt.client.ui.splitpanel;
import com.google.gwt.core.client.GWT;
-import com.vaadin.terminal.gwt.client.ui.Connect;
-import com.vaadin.terminal.gwt.client.ui.Connect.LoadStyle;
+import com.vaadin.shared.ui.Connect;
+import com.vaadin.shared.ui.Connect.LoadStyle;
import com.vaadin.ui.VerticalSplitPanel;
@Connect(value = VerticalSplitPanel.class, loadStyle = LoadStyle.EAGER)
diff --git a/src/com/vaadin/terminal/gwt/client/ui/table/TableConnector.java b/src/com/vaadin/terminal/gwt/client/ui/table/TableConnector.java
index ada0f2424f..7721a3d763 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/table/TableConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/table/TableConnector.java
@@ -7,20 +7,22 @@ import java.util.Iterator;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.core.client.Scheduler.ScheduledCommand;
+import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.Style.Position;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.ui.Widget;
-import com.vaadin.terminal.gwt.client.AbstractFieldState;
+import com.vaadin.shared.AbstractFieldState;
+import com.vaadin.shared.ui.Connect;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.BrowserInfo;
import com.vaadin.terminal.gwt.client.ComponentConnector;
import com.vaadin.terminal.gwt.client.DirectionalManagedLayout;
import com.vaadin.terminal.gwt.client.Paintable;
import com.vaadin.terminal.gwt.client.ServerConnector;
+import com.vaadin.terminal.gwt.client.TooltipInfo;
import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.Util;
import com.vaadin.terminal.gwt.client.ui.AbstractComponentContainerConnector;
-import com.vaadin.terminal.gwt.client.ui.Connect;
import com.vaadin.terminal.gwt.client.ui.PostLayoutListener;
import com.vaadin.terminal.gwt.client.ui.table.VScrollTable.ContextMenuDetails;
import com.vaadin.terminal.gwt.client.ui.table.VScrollTable.VScrollTableBody.VScrollTableRow;
@@ -42,6 +44,7 @@ public class TableConnector extends AbstractComponentContainerConnector
* com.vaadin.terminal.gwt.client.Paintable#updateFromUIDL(com.vaadin.terminal
* .gwt.client.UIDL, com.vaadin.terminal.gwt.client.ApplicationConnection)
*/
+ @Override
public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
getWidget().rendering = true;
@@ -178,6 +181,7 @@ public class TableConnector extends AbstractComponentContainerConnector
// *shouldn't* have changed (unless the number of rows
// or the height of the widget has also changed)
Scheduler.get().scheduleDeferred(new Command() {
+ @Override
public void execute() {
Util.runWebkitOverflowAutoFix(getWidget().scrollBodyPanel
.getElement());
@@ -244,6 +248,20 @@ public class TableConnector extends AbstractComponentContainerConnector
}
}
+ /*
+ * If the server has (re)initialized the rows, our selectionRangeStart
+ * row will point to an index that the server knows nothing about,
+ * causing problems if doing multi selection with shift. The field will
+ * be cleared a little later when the row focus has been restored.
+ * (#8584)
+ */
+ if (uidl.hasAttribute(VScrollTable.ATTRIBUTE_KEY_MAPPER_RESET)
+ && uidl.getBooleanAttribute(VScrollTable.ATTRIBUTE_KEY_MAPPER_RESET)
+ && getWidget().selectionRangeStart != null) {
+ assert !getWidget().selectionRangeStart.isAttached();
+ getWidget().selectionRangeStart = getWidget().focusedRow;
+ }
+
getWidget().tabIndex = uidl.hasAttribute("tabindex") ? uidl
.getIntAttribute("tabindex") : 0;
getWidget().setProperTabIndex();
@@ -265,23 +283,28 @@ public class TableConnector extends AbstractComponentContainerConnector
return (VScrollTable) super.getWidget();
}
+ @Override
public void updateCaption(ComponentConnector component) {
// NOP, not rendered
}
+ @Override
public void layoutVertically() {
getWidget().updateHeight();
}
+ @Override
public void layoutHorizontally() {
getWidget().updateWidth();
}
+ @Override
public void postLayout() {
VScrollTable table = getWidget();
if (table.sizeNeedsInit) {
table.sizeInit();
Scheduler.get().scheduleFinally(new ScheduledCommand() {
+ @Override
public void execute() {
getLayoutManager().setNeedsMeasure(TableConnector.this);
ServerConnector parent = getParent();
@@ -328,4 +351,27 @@ public class TableConnector extends AbstractComponentContainerConnector
}
}
+ @Override
+ public TooltipInfo getTooltipInfo(Element element) {
+
+ TooltipInfo info = null;
+
+ if (element != getWidget().getElement()) {
+ Object node = Util.findWidget(
+ (com.google.gwt.user.client.Element) element,
+ VScrollTableRow.class);
+
+ if (node != null) {
+ VScrollTableRow row = (VScrollTableRow) node;
+ info = row.getTooltip(element);
+ }
+ }
+
+ if (info == null) {
+ info = super.getTooltipInfo(element);
+ }
+
+ return info;
+ }
+
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/table/VScrollTable.java b/src/com/vaadin/terminal/gwt/client/ui/table/VScrollTable.java
index c4a57f5c8b..8a58c28c5b 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/table/VScrollTable.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/table/VScrollTable.java
@@ -11,6 +11,7 @@ import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import com.google.gwt.core.client.JavaScriptObject;
@@ -59,13 +60,14 @@ import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.UIObject;
import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.shared.ComponentState;
+import com.vaadin.shared.MouseEventDetails;
+import com.vaadin.shared.ui.dd.VerticalDropLocation;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.BrowserInfo;
import com.vaadin.terminal.gwt.client.ComponentConnector;
-import com.vaadin.terminal.gwt.client.ComponentState;
import com.vaadin.terminal.gwt.client.ConnectorMap;
import com.vaadin.terminal.gwt.client.Focusable;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
import com.vaadin.terminal.gwt.client.MouseEventDetailsBuilder;
import com.vaadin.terminal.gwt.client.TooltipInfo;
import com.vaadin.terminal.gwt.client.UIDL;
@@ -84,7 +86,6 @@ import com.vaadin.terminal.gwt.client.ui.dd.VDragAndDropManager;
import com.vaadin.terminal.gwt.client.ui.dd.VDragEvent;
import com.vaadin.terminal.gwt.client.ui.dd.VHasDropHandler;
import com.vaadin.terminal.gwt.client.ui.dd.VTransferable;
-import com.vaadin.terminal.gwt.client.ui.dd.VerticalDropLocation;
import com.vaadin.terminal.gwt.client.ui.embedded.VEmbedded;
import com.vaadin.terminal.gwt.client.ui.label.VLabel;
import com.vaadin.terminal.gwt.client.ui.table.VScrollTable.VScrollTableBody.VScrollTableRow;
@@ -130,6 +131,12 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
}
}
+ /**
+ * Tell the client that old keys are no longer valid because the server has
+ * cleared its key map.
+ */
+ public static final String ATTRIBUTE_KEY_MAPPER_RESET = "clearKeyMap";
+
private static final String ROW_HEADER_COLUMN_KEY = "0";
public static final String CLASSNAME = "v-table";
@@ -215,7 +222,7 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
/*
* Helper to store selection range start in when using the keyboard
*/
- private VScrollTableRow selectionRangeStart;
+ VScrollTableRow selectionRangeStart;
/*
* Flag for notifying when the selection has changed and should be sent to
@@ -241,6 +248,19 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
private Set<String> noncollapsibleColumns;
/**
+ * The last known row height used to preserve the height of a table with
+ * custom row heights and a fixed page length after removing the last row
+ * from the table.
+ *
+ * A new VScrollTableBody instance is created every time the number of rows
+ * changes causing {@link VScrollTableBody#rowHeight} to be discarded and
+ * the height recalculated by {@link VScrollTableBody#getRowHeight(boolean)}
+ * to avoid some rounding problems, e.g. round(2 * 19.8) / 2 = 20 but
+ * round(3 * 19.8) / 3 = 19.66.
+ */
+ private double lastKnownRowHeight = Double.NaN;
+
+ /**
* Represents a select range of rows
*/
private class SelectionRange {
@@ -327,6 +347,7 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
private KeyPressHandler navKeyPressHandler = new KeyPressHandler() {
+ @Override
public void onKeyPress(KeyPressEvent keyPressEvent) {
// This is used for Firefox only, since Firefox auto-repeat
// works correctly only if we use a key press handler, other
@@ -364,6 +385,7 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
private KeyUpHandler navKeyUpHandler = new KeyUpHandler() {
+ @Override
public void onKeyUp(KeyUpEvent keyUpEvent) {
NativeEvent event = keyUpEvent.getNativeEvent();
int keyCode = event.getKeyCode();
@@ -391,6 +413,7 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
private KeyDownHandler navKeyDownHandler = new KeyDownHandler() {
+ @Override
public void onKeyDown(KeyDownEvent keyDownEvent) {
NativeEvent event = keyDownEvent.getNativeEvent();
// This is not used for Firefox
@@ -519,6 +542,7 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
scrollBodyPanel.sinkEvents(Event.ONCONTEXTMENU);
scrollBodyPanel.addDomHandler(new ContextMenuHandler() {
+ @Override
public void onContextMenu(ContextMenuEvent event) {
handleBodyContextMenu(event);
}
@@ -539,6 +563,7 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
// closes. See #8526.
client.getContextMenu().addCloseHandler(new CloseHandler<PopupPanel>() {
+ @Override
public void onClose(CloseEvent<PopupPanel> event) {
contextMenu = null;
}
@@ -1848,6 +1873,7 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
// Deferred due to some Firefox oddities
Scheduler.get().scheduleDeferred(new Command() {
+ @Override
public void execute() {
scrollBodyPanel
.setScrollPosition(measureRowHeightOffset(firstvisible));
@@ -1883,6 +1909,7 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
scrollBody.reLayoutComponents();
Scheduler.get().scheduleDeferred(new Command() {
+ @Override
public void execute() {
Util.runWebkitOverflowAutoFix(scrollBodyPanel.getElement());
}
@@ -2214,6 +2241,7 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
} else {
Scheduler.get().scheduleDeferred(new Command() {
+ @Override
public void execute() {
int tdWidth = width
+ scrollBody.getCellExtraWidth();
@@ -2812,6 +2840,7 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
Scheduler.get().scheduleDeferred(
new ScheduledCommand() {
+ @Override
public void execute() {
setColWidth(colIx, newWidth, true);
}
@@ -2840,6 +2869,7 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
// Recalculate the column sizings if any column has changed
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
+ @Override
public void execute() {
triggerLazyColumnAdjustment(true);
}
@@ -2951,6 +2981,7 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
visibleCells.add(newIndex, hCell);
}
+ @Override
public Iterator<Widget> iterator() {
return visibleCells.iterator();
}
@@ -3100,6 +3131,7 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
* Returns columns as Action array for column select popup
*/
+ @Override
public Action[] getActions() {
Object[] cols;
if (columnReordering && columnOrder != null) {
@@ -3138,10 +3170,12 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
return actions;
}
+ @Override
public ApplicationConnection getClient() {
return client;
}
+ @Override
public String getPaintableId() {
return paintableId;
}
@@ -3287,20 +3321,15 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
DOM.setStyleAttribute(captionContainer, "width", "");
setWidth("");
} else {
-
/*
* Reduce width with one pixel for the right border since the
* footers does not have any spacers between them.
*/
- int borderWidths = 1;
+ final int borderWidths = 1;
// Set the container width (check for negative value)
- if (w - borderWidths >= 0) {
- captionContainer.getStyle().setPropertyPx("width",
- w - borderWidths);
- } else {
- captionContainer.getStyle().setPropertyPx("width", 0);
- }
+ captionContainer.getStyle().setPropertyPx("width",
+ Math.max(w - borderWidths, 0));
/*
* if we already have tBody, set the header width properly, if
@@ -3308,22 +3337,18 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
* unless TD width is not explicitly set.
*/
if (scrollBody != null) {
- /*
- * Reduce with one since footer does not have any spacers,
- * instead a 1 pixel border.
- */
int tdWidth = width + scrollBody.getCellExtraWidth()
- borderWidths;
- setWidth(tdWidth + "px");
+ setWidth(Math.max(tdWidth, 0) + "px");
} else {
Scheduler.get().scheduleDeferred(new Command() {
+ @Override
public void execute() {
- int borderWidths = 1;
int tdWidth = width
+ scrollBody.getCellExtraWidth()
- borderWidths;
- setWidth(tdWidth + "px");
+ setWidth(Math.max(tdWidth, 0) + "px");
}
});
}
@@ -3582,6 +3607,7 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
* @see com.google.gwt.user.client.ui.HasWidgets#iterator()
*/
+ @Override
public Iterator<Widget> iterator() {
return visibleCells.iterator();
}
@@ -4120,6 +4146,7 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
renderedRows.add(actualIx, row);
}
+ @Override
public Iterator<Widget> iterator() {
return renderedRows.iterator();
}
@@ -4194,14 +4221,6 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
private void unlinkRowAtActualIndex(int index) {
final VScrollTableRow toBeRemoved = (VScrollTableRow) renderedRows
.get(index);
- // Unregister row tooltip
- client.registerTooltip(VScrollTable.this, toBeRemoved.getElement(),
- null);
- for (int i = 0; i < toBeRemoved.getElement().getChildCount(); i++) {
- // Unregister cell tooltips
- Element td = toBeRemoved.getElement().getChild(i).cast();
- client.registerTooltip(VScrollTable.this, td, null);
- }
tBodyElement.removeChild(toBeRemoved.getElement());
orphan(toBeRemoved);
renderedRows.remove(index);
@@ -4244,13 +4263,27 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
if (tBodyMeasurementsDone && !forceUpdate) {
return rowHeight;
} else {
-
if (tBodyElement.getRows().getLength() > 0) {
int tableHeight = getTableHeight();
int rowCount = tBodyElement.getRows().getLength();
rowHeight = tableHeight / (double) rowCount;
} else {
- if (isAttached()) {
+ // Special cases if we can't just measure the current rows
+ if (!Double.isNaN(lastKnownRowHeight)) {
+ // Use previous value if available
+ if (BrowserInfo.get().isIE()) {
+ /*
+ * IE needs to reflow the table element at this
+ * point to work correctly (e.g.
+ * com.vaadin.tests.components.table.
+ * ContainerSizeChange) - the other code paths
+ * already trigger reflows, but here it must be done
+ * explicitly.
+ */
+ getTableHeight();
+ }
+ rowHeight = lastKnownRowHeight;
+ } else if (isAttached()) {
// measure row height by adding a dummy row
VScrollTableRow scrollTableRow = new VScrollTableRow();
tBodyElement.appendChild(scrollTableRow.getElement());
@@ -4261,6 +4294,7 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
return DEFAULT_ROW_HEIGHT;
}
}
+ lastKnownRowHeight = rowHeight;
tBodyMeasurementsDone = true;
return rowHeight;
}
@@ -4423,6 +4457,8 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
private Timer dragTouchTimeout;
private int touchStartY;
private int touchStartX;
+ private TooltipInfo tooltipInfo = null;
+ private Map<TableCellElement, TooltipInfo> cellToolTips = new HashMap<TableCellElement, TooltipInfo>();
private boolean isDragging = false;
private VScrollTableRow(int rowKey) {
@@ -4450,11 +4486,9 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
String rowDescription = uidl.getStringAttribute("rowdescr");
if (rowDescription != null && !rowDescription.equals("")) {
- TooltipInfo info = new TooltipInfo(rowDescription);
- client.registerTooltip(VScrollTable.this, rowElement, info);
+ tooltipInfo = new TooltipInfo(rowDescription);
} else {
- // Remove possibly previously set tooltip
- client.registerTooltip(VScrollTable.this, rowElement, null);
+ tooltipInfo = null;
}
tHead.getColumnAlignments();
@@ -4480,6 +4514,10 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
}
}
+ public TooltipInfo getTooltipInfo() {
+ return tooltipInfo;
+ }
+
/**
* Add a dummy row, used for measurements if Table is empty.
*/
@@ -4665,10 +4703,9 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
if (description != null && !description.equals("")) {
TooltipInfo info = new TooltipInfo(description);
- client.registerTooltip(VScrollTable.this, td, info);
+ cellToolTips.put(td, info);
} else {
- // Remove possibly previously set tooltip
- client.registerTooltip(VScrollTable.this, td, null);
+ cellToolTips.remove(td);
}
td.appendChild(container);
@@ -4718,6 +4755,7 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
childWidgets.add(w);
}
+ @Override
public Iterator<Widget> iterator() {
return childWidgets.iterator();
}
@@ -4776,39 +4814,22 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
return true;
}
- private void handleTooltips(final Event event, Element target) {
+ public TooltipInfo getTooltip(
+ com.google.gwt.dom.client.Element target) {
+
+ TooltipInfo info = null;
+
if (target.hasTagName("TD")) {
- // Table cell (td)
- Element container = target.getFirstChildElement().cast();
- Element widget = container.getFirstChildElement().cast();
-
- boolean containsWidget = false;
- for (Widget w : childWidgets) {
- if (widget == w.getElement()) {
- containsWidget = true;
- break;
- }
- }
- if (!containsWidget) {
- // Only text nodes has tooltips
- if (ConnectorMap.get(client).getWidgetTooltipInfo(
- VScrollTable.this, target) != null) {
- // Cell has description, use it
- client.handleTooltipEvent(event, VScrollTable.this,
- target);
- } else {
- // Cell might have row description, use row
- // description
- client.handleTooltipEvent(event, VScrollTable.this,
- target.getParentElement());
- }
- }
+ TableCellElement td = (TableCellElement) target.cast();
+ info = cellToolTips.get(td);
+ }
- } else {
- // Table row (tr)
- client.handleTooltipEvent(event, VScrollTable.this, target);
+ if (info == null) {
+ info = tooltipInfo;
}
+
+ return info;
}
/**
@@ -4953,9 +4974,6 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
}
boolean targetCellOrRowFound = targetTdOrTr != null;
- if (targetCellOrRowFound) {
- handleTooltips(event, targetTdOrTr);
- }
switch (type) {
case Event.ONDBLCLICK:
@@ -5430,6 +5448,7 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
* @see com.vaadin.terminal.gwt.client.ui.IActionOwner#getActions ()
*/
+ @Override
public Action[] getActions() {
if (actionKeys == null) {
return new Action[] {};
@@ -5453,10 +5472,12 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
return actions;
}
+ @Override
public ApplicationConnection getClient() {
return client;
}
+ @Override
public String getPaintableId() {
return paintableId;
}
@@ -5507,6 +5528,7 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
// widths.
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
+ @Override
public void execute() {
if (showRowHeaders) {
setCellWidth(0, tHead.getHeaderCell(0).getWidth());
@@ -5824,7 +5846,7 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
if (isDynamicHeight() && totalRows == pageLength) {
// fix body height (may vary if lazy loading is offhorizontal
// scrollbar appears/disappears)
- int bodyHeight = Util.getRequiredHeight(scrollBody);
+ int bodyHeight = scrollBody.getRequiredHeight();
boolean needsSpaceForHorizontalScrollbar = (availW < usedMinimumWidth);
if (needsSpaceForHorizontalScrollbar) {
bodyHeight += Util.getNativeScrollbarSize();
@@ -5838,6 +5860,7 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
scrollBody.reLayoutComponents();
Scheduler.get().scheduleDeferred(new Command() {
+ @Override
public void execute() {
Util.runWebkitOverflowAutoFix(scrollBodyPanel.getElement());
}
@@ -5959,6 +5982,7 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
// #7607.
Scheduler.get().scheduleDeferred(new Command() {
+ @Override
public void execute() {
Util.runWebkitOverflowAutoFix(scrollBodyPanel.getElement());
}
@@ -5989,6 +6013,7 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
if (visible) {
Scheduler.get().scheduleDeferred(new Command() {
+ @Override
public void execute() {
scrollBodyPanel
.setScrollPosition(measureRowHeightOffset(firstRowInViewPort));
@@ -6023,6 +6048,7 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
* user scrolls
*/
+ @Override
public void onScroll(ScrollEvent event) {
scrollLeft = scrollBodyPanel.getElement().getScrollLeft();
scrollTop = scrollBodyPanel.getScrollPosition();
@@ -6052,6 +6078,7 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
// value available soon.
Scheduler.get().scheduleDeferred(new Command() {
+ @Override
public void execute() {
onScroll(null);
}
@@ -6132,6 +6159,7 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
return (int) Math.ceil(scrollTop / scrollBody.getRowHeight());
}
+ @Override
public VScrollTableDropHandler getDropHandler() {
return dropHandler;
}
@@ -6212,6 +6240,7 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
final TableDDDetails newDetails = dropDetails;
VAcceptCallback cb = new VAcceptCallback() {
+ @Override
public void accepted(VDragEvent event) {
if (newDetails.equals(dropDetails)) {
dragAccepted(event);
@@ -6288,6 +6317,7 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
return ConnectorMap.get(client).getConnector(VScrollTable.this);
}
+ @Override
public ApplicationConnection getApplicationConnection() {
return client;
}
@@ -6619,6 +6649,7 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
* .dom.client.FocusEvent)
*/
+ @Override
public void onFocus(FocusEvent event) {
if (isFocusable()) {
hasFocus = true;
@@ -6640,6 +6671,7 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
* .dom.client.BlurEvent)
*/
+ @Override
public void onBlur(BlurEvent event) {
hasFocus = false;
navKeyDown = false;
@@ -6713,6 +6745,7 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
* @see com.vaadin.terminal.gwt.client.Focusable#focus()
*/
+ @Override
public void focus() {
if (isFocusable()) {
scrollBodyPanel.focus();
@@ -6794,6 +6827,7 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
public void lazyRevertFocusToRow(final VScrollTableRow currentlyFocusedRow) {
Scheduler.get().scheduleFinally(new ScheduledCommand() {
+ @Override
public void execute() {
if (currentlyFocusedRow != null) {
setRowFocus(currentlyFocusedRow);
@@ -6806,6 +6840,7 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
});
}
+ @Override
public Action[] getActions() {
if (bodyActionKeys == null) {
return new Action[] {};
@@ -6821,10 +6856,12 @@ public class VScrollTable extends FlowPanel implements HasWidgets,
return actions;
}
+ @Override
public ApplicationConnection getClient() {
return client;
}
+ @Override
public String getPaintableId() {
return paintableId;
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/tabsheet/TabsheetBaseConnector.java b/src/com/vaadin/terminal/gwt/client/ui/tabsheet/TabsheetBaseConnector.java
index e16e84d112..ea0bea6b04 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/tabsheet/TabsheetBaseConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/tabsheet/TabsheetBaseConnector.java
@@ -22,6 +22,7 @@ public abstract class TabsheetBaseConnector extends
public static final String ATTRIBUTE_TAB_CAPTION = "caption";
public static final String ATTRIBUTE_TAB_ICON = "icon";
+ @Override
public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
getWidget().client = client;
diff --git a/src/com/vaadin/terminal/gwt/client/ui/tabsheet/TabsheetConnector.java b/src/com/vaadin/terminal/gwt/client/ui/tabsheet/TabsheetConnector.java
index 08d4679dc5..ce19f1e02a 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/tabsheet/TabsheetConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/tabsheet/TabsheetConnector.java
@@ -3,13 +3,14 @@
*/
package com.vaadin.terminal.gwt.client.ui.tabsheet;
-import com.google.gwt.core.client.GWT;
+import com.google.gwt.dom.client.Element;
import com.google.gwt.user.client.DOM;
-import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.shared.ui.Connect;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.ComponentConnector;
+import com.vaadin.terminal.gwt.client.TooltipInfo;
import com.vaadin.terminal.gwt.client.UIDL;
-import com.vaadin.terminal.gwt.client.ui.Connect;
+import com.vaadin.terminal.gwt.client.Util;
import com.vaadin.terminal.gwt.client.ui.SimpleManagedLayout;
import com.vaadin.terminal.gwt.client.ui.layout.MayScrollChildren;
import com.vaadin.ui.TabSheet;
@@ -67,10 +68,12 @@ public class TabsheetConnector extends TabsheetBaseConnector implements
return (VTabsheet) super.getWidget();
}
+ @Override
public void updateCaption(ComponentConnector component) {
/* Tabsheet does not render its children's captions */
}
+ @Override
public void layout() {
VTabsheet tabsheet = getWidget();
@@ -97,4 +100,29 @@ public class TabsheetConnector extends TabsheetBaseConnector implements
}
+ @Override
+ public TooltipInfo getTooltipInfo(Element element) {
+
+ TooltipInfo info = null;
+
+ // Find a tooltip for the tab, if the element is a tab
+ if (element != getWidget().getElement()) {
+ Object node = Util.findWidget(
+ (com.google.gwt.user.client.Element) element,
+ VTabsheet.TabCaption.class);
+
+ if (node != null) {
+ VTabsheet.TabCaption caption = (VTabsheet.TabCaption) node;
+ info = caption.getTooltipInfo();
+ }
+ }
+
+ // If not tab tooltip was found, use the default
+ if (info == null) {
+ info = super.getTooltipInfo(element);
+ }
+
+ return info;
+ }
+
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/tabsheet/VTabsheet.java b/src/com/vaadin/terminal/gwt/client/ui/tabsheet/VTabsheet.java
index aba5a41f9a..1f6314050e 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/tabsheet/VTabsheet.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/tabsheet/VTabsheet.java
@@ -34,12 +34,12 @@ import com.google.gwt.user.client.ui.ComplexPanel;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.user.client.ui.impl.FocusImpl;
+import com.vaadin.shared.ComponentState;
+import com.vaadin.shared.EventId;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.BrowserInfo;
import com.vaadin.terminal.gwt.client.ComponentConnector;
-import com.vaadin.terminal.gwt.client.ComponentState;
import com.vaadin.terminal.gwt.client.ConnectorMap;
-import com.vaadin.terminal.gwt.client.EventId;
import com.vaadin.terminal.gwt.client.Focusable;
import com.vaadin.terminal.gwt.client.TooltipInfo;
import com.vaadin.terminal.gwt.client.UIDL;
@@ -212,14 +212,17 @@ public class VTabsheet extends VTabsheetBase implements Focusable,
tabCaption.setWidth(tabCaption.getRequiredWidth() + "px");
}
+ @Override
public HandlerRegistration addFocusHandler(FocusHandler handler) {
return addDomHandler(handler, FocusEvent.getType());
}
+ @Override
public HandlerRegistration addBlurHandler(BlurHandler handler) {
return addDomHandler(handler, BlurEvent.getType());
}
+ @Override
public HandlerRegistration addKeyDownHandler(KeyDownHandler handler) {
return addDomHandler(handler, KeyDownEvent.getType());
}
@@ -233,7 +236,7 @@ public class VTabsheet extends VTabsheetBase implements Focusable,
}
}
- private static class TabCaption extends VCaption {
+ public static class TabCaption extends VCaption {
private boolean closable = false;
private Element closeButton;
@@ -248,16 +251,11 @@ public class VTabsheet extends VTabsheetBase implements Focusable,
public boolean updateCaption(UIDL uidl) {
if (uidl.hasAttribute(TabsheetBaseConnector.ATTRIBUTE_TAB_DESCRIPTION)) {
- TooltipInfo tooltipInfo = new TooltipInfo();
- tooltipInfo
- .setTitle(uidl
- .getStringAttribute(TabsheetBaseConnector.ATTRIBUTE_TAB_DESCRIPTION));
- tooltipInfo
- .setErrorMessage(uidl
- .getStringAttribute(TabsheetBaseConnector.ATTRIBUTE_TAB_ERROR_MESSAGE));
- client.registerTooltip(getTabsheet(), getElement(), tooltipInfo);
+ setTooltipInfo(new TooltipInfo(
+ uidl.getStringAttribute(TabsheetBaseConnector.ATTRIBUTE_TAB_DESCRIPTION),
+ uidl.getStringAttribute(TabsheetBaseConnector.ATTRIBUTE_TAB_ERROR_MESSAGE)));
} else {
- client.registerTooltip(getTabsheet(), getElement(), null);
+ setTooltipInfo(null);
}
// TODO need to call this instead of super because the caption does
@@ -292,7 +290,6 @@ public class VTabsheet extends VTabsheetBase implements Focusable,
if (event.getTypeInt() == Event.ONLOAD) {
getTabsheet().tabSizeMightHaveChanged(getTab());
}
- client.handleTooltipEvent(event, getTabsheet(), getElement());
}
public Tab getTab() {
@@ -362,6 +359,7 @@ public class VTabsheet extends VTabsheetBase implements Focusable,
setElement(el);
}
+ @Override
public void onClose(VCloseEvent event) {
Tab tab = event.getTab();
if (!tab.isEnabledOnServer()) {
@@ -397,6 +395,7 @@ public class VTabsheet extends VTabsheetBase implements Focusable,
return t;
}
+ @Override
public void onClick(ClickEvent event) {
TabCaption caption = (TabCaption) event.getSource();
Element targetElement = event.getNativeEvent().getEventTarget()
@@ -691,24 +690,27 @@ public class VTabsheet extends VTabsheetBase implements Focusable,
@Override
public void onBrowserEvent(Event event) {
+ if (event.getTypeInt() == Event.ONCLICK) {
+ // Tab scrolling
+ if (isScrolledTabs() && DOM.eventGetTarget(event) == scrollerPrev) {
+ int newFirstIndex = tb.scrollLeft(scrollerIndex);
+ if (newFirstIndex != -1) {
+ scrollerIndex = newFirstIndex;
+ updateTabScroller();
+ }
+ return;
+ } else if (isClippedTabs()
+ && DOM.eventGetTarget(event) == scrollerNext) {
+ int newFirstIndex = tb.scrollRight(scrollerIndex);
- // Tab scrolling
- if (isScrolledTabs() && DOM.eventGetTarget(event) == scrollerPrev) {
- int newFirstIndex = tb.scrollLeft(scrollerIndex);
- if (newFirstIndex != -1) {
- scrollerIndex = newFirstIndex;
- updateTabScroller();
- }
- } else if (isClippedTabs() && DOM.eventGetTarget(event) == scrollerNext) {
- int newFirstIndex = tb.scrollRight(scrollerIndex);
-
- if (newFirstIndex != -1) {
- scrollerIndex = newFirstIndex;
- updateTabScroller();
+ if (newFirstIndex != -1) {
+ scrollerIndex = newFirstIndex;
+ updateTabScroller();
+ }
+ return;
}
- } else {
- super.onBrowserEvent(event);
}
+ super.onBrowserEvent(event);
}
/**
@@ -1034,6 +1036,7 @@ public class VTabsheet extends VTabsheetBase implements Focusable,
style.setProperty("whiteSpace", "normal");
Scheduler.get().scheduleDeferred(new Command() {
+ @Override
public void execute() {
style.setProperty("whiteSpace", "");
}
@@ -1118,6 +1121,7 @@ public class VTabsheet extends VTabsheetBase implements Focusable,
}
}
+ @Override
public void onBlur(BlurEvent event) {
if (focusedTab != null && event.getSource() instanceof Tab) {
focusedTab = null;
@@ -1127,6 +1131,7 @@ public class VTabsheet extends VTabsheetBase implements Focusable,
}
}
+ @Override
public void onFocus(FocusEvent event) {
if (focusedTab == null && event.getSource() instanceof Tab) {
focusedTab = (Tab) event.getSource();
@@ -1136,6 +1141,7 @@ public class VTabsheet extends VTabsheetBase implements Focusable,
}
}
+ @Override
public void focus() {
tb.getTab(activeTabIndex).focus();
}
@@ -1144,6 +1150,7 @@ public class VTabsheet extends VTabsheetBase implements Focusable,
tb.getTab(activeTabIndex).blur();
}
+ @Override
public void onKeyDown(KeyDownEvent event) {
if (event.getSource() instanceof Tab) {
int keycode = event.getNativeEvent().getKeyCode();
diff --git a/src/com/vaadin/terminal/gwt/client/ui/textarea/TextAreaConnector.java b/src/com/vaadin/terminal/gwt/client/ui/textarea/TextAreaConnector.java
index a235ca5389..cdf648d3ec 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/textarea/TextAreaConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/textarea/TextAreaConnector.java
@@ -4,8 +4,9 @@
package com.vaadin.terminal.gwt.client.ui.textarea;
+import com.vaadin.shared.ui.Connect;
+import com.vaadin.shared.ui.textarea.TextAreaState;
import com.vaadin.terminal.gwt.client.communication.StateChangeEvent;
-import com.vaadin.terminal.gwt.client.ui.Connect;
import com.vaadin.terminal.gwt.client.ui.textfield.TextFieldConnector;
import com.vaadin.ui.TextArea;
diff --git a/src/com/vaadin/terminal/gwt/client/ui/textarea/VTextArea.java b/src/com/vaadin/terminal/gwt/client/ui/textarea/VTextArea.java
index aede1ef002..c0f6deab53 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/textarea/VTextArea.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/textarea/VTextArea.java
@@ -57,6 +57,7 @@ public class VTextArea extends VTextField {
public void onBrowserEvent(Event event) {
if (getMaxLength() >= 0 && event.getTypeInt() == Event.ONKEYUP) {
Scheduler.get().scheduleDeferred(new Command() {
+ @Override
public void execute() {
if (getText().length() > getMaxLength()) {
setText(getText().substring(0, getMaxLength()));
diff --git a/src/com/vaadin/terminal/gwt/client/ui/textfield/TextFieldConnector.java b/src/com/vaadin/terminal/gwt/client/ui/textfield/TextFieldConnector.java
index 04bf029b05..d98d27942a 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/textfield/TextFieldConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/textfield/TextFieldConnector.java
@@ -7,12 +7,13 @@ package com.vaadin.terminal.gwt.client.ui.textfield;
import com.google.gwt.core.client.Scheduler;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.Event;
+import com.vaadin.shared.ui.Connect;
+import com.vaadin.shared.ui.Connect.LoadStyle;
+import com.vaadin.shared.ui.textfield.AbstractTextFieldState;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.Paintable;
import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.ui.AbstractFieldConnector;
-import com.vaadin.terminal.gwt.client.ui.Connect;
-import com.vaadin.terminal.gwt.client.ui.Connect.LoadStyle;
import com.vaadin.terminal.gwt.client.ui.ShortcutActionHandler.BeforeShortcutActionListener;
import com.vaadin.ui.TextField;
@@ -25,6 +26,7 @@ public class TextFieldConnector extends AbstractFieldConnector implements
return (AbstractTextFieldState) super.getState();
}
+ @Override
public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
// Save details
getWidget().client = client;
@@ -83,6 +85,7 @@ public class TextFieldConnector extends AbstractFieldConnector implements
* Gecko defers setting the text so we need to defer the selection.
*/
Scheduler.get().scheduleDeferred(new Command() {
+ @Override
public void execute() {
getWidget().setSelectionRange(pos, length);
}
@@ -95,6 +98,7 @@ public class TextFieldConnector extends AbstractFieldConnector implements
return (VTextField) super.getWidget();
}
+ @Override
public void onBeforeShortcutAction(Event e) {
getWidget().valueChange(false);
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/textfield/VTextField.java b/src/com/vaadin/terminal/gwt/client/ui/textfield/VTextField.java
index aeae165f60..7f8e549550 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/textfield/VTextField.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/textfield/VTextField.java
@@ -18,11 +18,10 @@ import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.ui.TextBoxBase;
+import com.vaadin.shared.EventId;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.BrowserInfo;
-import com.vaadin.terminal.gwt.client.EventId;
import com.vaadin.terminal.gwt.client.Util;
-import com.vaadin.terminal.gwt.client.VTooltip;
import com.vaadin.terminal.gwt.client.ui.Field;
/**
@@ -88,7 +87,6 @@ public class VTextField extends TextBoxBase implements Field, ChangeHandler,
}
addFocusHandler(this);
addBlurHandler(this);
- sinkEvents(VTooltip.TOOLTIP_EVENTS);
}
/*
@@ -107,9 +105,6 @@ public class VTextField extends TextBoxBase implements Field, ChangeHandler,
@Override
public void onBrowserEvent(Event event) {
super.onBrowserEvent(event);
- if (client != null) {
- client.handleTooltipEvent(event, this);
- }
if (listenTextChangeEvents
&& (event.getTypeInt() & TEXTCHANGE_EVENTS) == event
@@ -279,6 +274,7 @@ public class VTextField extends TextBoxBase implements Field, ChangeHandler,
return maxLength;
}
+ @Override
public void onChange(ChangeEvent event) {
valueChange(false);
}
@@ -305,7 +301,7 @@ public class VTextField extends TextBoxBase implements Field, ChangeHandler,
if (!prompting && newText != null
&& !newText.equals(valueBeforeEdit)) {
sendValueChange = immediate;
- client.updateVariable(paintableId, "text", getText(), false);
+ client.updateVariable(paintableId, "text", newText, false);
valueBeforeEdit = newText;
valueBeforeEditIsSynced = true;
}
@@ -354,6 +350,7 @@ public class VTextField extends TextBoxBase implements Field, ChangeHandler,
}
}
+ @Override
public void onFocus(FocusEvent event) {
addStyleDependentName(CLASSNAME_FOCUS);
if (prompting) {
@@ -367,7 +364,13 @@ public class VTextField extends TextBoxBase implements Field, ChangeHandler,
}
}
+ @Override
public void onBlur(BlurEvent event) {
+ // this is called twice on Chrome when e.g. changing tab while prompting
+ // field focused - do not change settings on the second time
+ if (focusedTextField != this) {
+ return;
+ }
removeStyleDependentName(CLASSNAME_FOCUS);
focusedTextField = null;
String text = getText();
@@ -392,6 +395,7 @@ public class VTextField extends TextBoxBase implements Field, ChangeHandler,
setWidth(columns + "em");
}
+ @Override
public void onKeyDown(KeyDownEvent event) {
if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) {
valueChange(false);
diff --git a/src/com/vaadin/terminal/gwt/client/ui/tree/TreeConnector.java b/src/com/vaadin/terminal/gwt/client/ui/tree/TreeConnector.java
index e4afa32143..def63edae9 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/tree/TreeConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/tree/TreeConnector.java
@@ -3,16 +3,20 @@
*/
package com.vaadin.terminal.gwt.client.ui.tree;
+import java.util.HashMap;
import java.util.Iterator;
+import java.util.Map;
-import com.vaadin.terminal.gwt.client.AbstractFieldState;
+import com.google.gwt.dom.client.Element;
+import com.vaadin.shared.AbstractFieldState;
+import com.vaadin.shared.ui.Connect;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.BrowserInfo;
import com.vaadin.terminal.gwt.client.Paintable;
import com.vaadin.terminal.gwt.client.TooltipInfo;
import com.vaadin.terminal.gwt.client.UIDL;
+import com.vaadin.terminal.gwt.client.Util;
import com.vaadin.terminal.gwt.client.ui.AbstractComponentConnector;
-import com.vaadin.terminal.gwt.client.ui.Connect;
import com.vaadin.terminal.gwt.client.ui.tree.VTree.TreeNode;
import com.vaadin.ui.Tree;
@@ -27,6 +31,9 @@ public class TreeConnector extends AbstractComponentConnector implements
public static final String ATTRIBUTE_ACTION_CAPTION = "caption";
public static final String ATTRIBUTE_ACTION_ICON = ATTRIBUTE_NODE_ICON;
+ protected final Map<TreeNode, TooltipInfo> tooltipMap = new HashMap<TreeNode, TooltipInfo>();
+
+ @Override
public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
if (!isRealUpdate(uidl)) {
return;
@@ -62,6 +69,8 @@ public class TreeConnector extends AbstractComponentConnector implements
getWidget().body.clear();
// clear out any references to nodes that no longer are attached
getWidget().clearNodeToKeyMap();
+ tooltipMap.clear();
+
TreeNode childTree = null;
UIDL childUidl = null;
for (final Iterator<?> i = uidl.getChildIterator(); i.hasNext();) {
@@ -74,6 +83,7 @@ public class TreeConnector extends AbstractComponentConnector implements
continue;
}
childTree = getWidget().new TreeNode();
+ getConnection().getVTooltip().connectHandlersToWidget(childTree);
updateNodeFromUIDL(childTree, childUidl);
getWidget().body.add(childTree);
childTree.addStyleDependentName("root");
@@ -193,13 +203,8 @@ public class TreeConnector extends AbstractComponentConnector implements
}
String description = uidl.getStringAttribute("descr");
- if (description != null && getConnection() != null) {
- // Set tooltip
- TooltipInfo info = new TooltipInfo(description);
- getConnection().registerTooltip(this, nodeKey, info);
- } else {
- // Remove possible previous tooltip
- getConnection().registerTooltip(this, nodeKey, null);
+ if (description != null) {
+ tooltipMap.put(treeNode, new TooltipInfo(description));
}
if (uidl.getBooleanAttribute("expanded") && !treeNode.getState()) {
@@ -228,6 +233,7 @@ public class TreeConnector extends AbstractComponentConnector implements
continue;
}
final TreeNode childTree = getWidget().new TreeNode();
+ getConnection().getVTooltip().connectHandlersToWidget(childTree);
updateNodeFromUIDL(childTree, childUidl);
containerNode.childNodeContainer.add(childTree);
if (!i.hasNext()) {
@@ -250,4 +256,32 @@ public class TreeConnector extends AbstractComponentConnector implements
return (AbstractFieldState) super.getState();
}
+ @Override
+ public TooltipInfo getTooltipInfo(Element element) {
+
+ TooltipInfo info = null;
+
+ // Try to find a tooltip for a node
+ if (element != getWidget().getElement()) {
+ Object node = Util.findWidget(
+ (com.google.gwt.user.client.Element) element,
+ TreeNode.class);
+
+ if (node != null) {
+ TreeNode tnode = (TreeNode) node;
+ if (tnode.isCaptionElement(element)) {
+ info = tooltipMap.get(tnode);
+ }
+ }
+ }
+
+ // If no tooltip found for the node or if the target was not a node, use
+ // the default tooltip
+ if (info == null) {
+ info = super.getTooltipInfo(element);
+ }
+
+ return info;
+ }
+
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/tree/VTree.java b/src/com/vaadin/terminal/gwt/client/ui/tree/VTree.java
index 6f19cba957..f5fe6bce1a 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/tree/VTree.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/tree/VTree.java
@@ -37,15 +37,15 @@ import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.UIObject;
import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.shared.MouseEventDetails;
+import com.vaadin.shared.ui.dd.VerticalDropLocation;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.BrowserInfo;
import com.vaadin.terminal.gwt.client.ComponentConnector;
import com.vaadin.terminal.gwt.client.ConnectorMap;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
import com.vaadin.terminal.gwt.client.MouseEventDetailsBuilder;
import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.Util;
-import com.vaadin.terminal.gwt.client.VTooltip;
import com.vaadin.terminal.gwt.client.ui.Action;
import com.vaadin.terminal.gwt.client.ui.ActionOwner;
import com.vaadin.terminal.gwt.client.ui.FocusElementPanel;
@@ -61,7 +61,6 @@ import com.vaadin.terminal.gwt.client.ui.dd.VDragEvent;
import com.vaadin.terminal.gwt.client.ui.dd.VDropHandler;
import com.vaadin.terminal.gwt.client.ui.dd.VHasDropHandler;
import com.vaadin.terminal.gwt.client.ui.dd.VTransferable;
-import com.vaadin.terminal.gwt.client.ui.dd.VerticalDropLocation;
/**
*
@@ -127,6 +126,7 @@ public class VTree extends FocusElementPanel implements VHasDropHandler,
public VLazyExecutor iconLoaded = new VLazyExecutor(50,
new ScheduledCommand() {
+ @Override
public void execute() {
Util.notifyParentOfSizeChange(VTree.this, true);
}
@@ -146,6 +146,7 @@ public class VTree extends FocusElementPanel implements VHasDropHandler,
*/
sinkEvents(Event.ONCONTEXTMENU);
addDomHandler(new ContextMenuHandler() {
+ @Override
public void onContextMenu(ContextMenuEvent event) {
handleBodyContextMenu(event);
}
@@ -334,6 +335,7 @@ public class VTree extends FocusElementPanel implements VHasDropHandler,
}
if (newKey != null) {
validate(new VAcceptCallback() {
+ @Override
public void accepted(VDragEvent event) {
VerticalDropLocation curDetail = (VerticalDropLocation) event
.getDropDetails().get("detail");
@@ -377,6 +379,7 @@ public class VTree extends FocusElementPanel implements VHasDropHandler,
return ConnectorMap.get(client).getConnector(VTree.this);
}
+ @Override
public ApplicationConnection getApplicationConnection() {
return client;
}
@@ -420,6 +423,7 @@ public class VTree extends FocusElementPanel implements VHasDropHandler,
*/
private void sendSelectionToServer() {
Command command = new Command() {
+ @Override
public void execute() {
client.updateVariable(paintableId, "selected",
selectedIds.toArray(new String[selectedIds.size()]),
@@ -587,6 +591,7 @@ public class VTree extends FocusElementPanel implements VHasDropHandler,
}
ScheduledCommand command = new ScheduledCommand() {
+ @Override
public void execute() {
if (multiSelectMode == MULTISELECT_MODE_SIMPLE
@@ -656,12 +661,7 @@ public class VTree extends FocusElementPanel implements VHasDropHandler,
return;
}
- if (target == nodeCaptionSpan) {
- client.handleTooltipEvent(event, VTree.this, key);
- }
-
- final boolean inCaption = target == nodeCaptionSpan
- || (icon != null && target == icon.getElement());
+ final boolean inCaption = isCaptionElement(target);
if (inCaption
&& client
.hasEventListeners(VTree.this, ITEM_CLICK_EVENT_ID)
@@ -751,6 +751,18 @@ public class VTree extends FocusElementPanel implements VHasDropHandler,
}
}
+ /**
+ * Checks if the given element is the caption or the icon.
+ *
+ * @param target
+ * The element to check
+ * @return true if the element is the caption or the icon
+ */
+ public boolean isCaptionElement(com.google.gwt.dom.client.Element target) {
+ return (target == nodeCaptionSpan || (icon != null && target == icon
+ .getElement()));
+ }
+
private void fireClick(final Event evt) {
/*
* Ensure we have focus in tree before sending variables. Otherwise
@@ -770,6 +782,7 @@ public class VTree extends FocusElementPanel implements VHasDropHandler,
final MouseEventDetails details = MouseEventDetailsBuilder
.buildMouseEventDetails(evt);
ScheduledCommand command = new ScheduledCommand() {
+ @Override
public void execute() {
// Determine if we should send the event immediately to the
// server. We do not want to send the event if there is a
@@ -825,7 +838,6 @@ public class VTree extends FocusElementPanel implements VHasDropHandler,
+ "-caption");
Element wrapper = DOM.createDiv();
nodeCaptionSpan = DOM.createSpan();
- DOM.sinkEvents(nodeCaptionSpan, VTooltip.TOOLTIP_EVENTS);
DOM.appendChild(getElement(), nodeCaptionDiv);
DOM.appendChild(nodeCaptionDiv, wrapper);
DOM.appendChild(wrapper, nodeCaptionSpan);
@@ -914,6 +926,7 @@ public class VTree extends FocusElementPanel implements VHasDropHandler,
return nodes;
}
+ @Override
public Action[] getActions() {
if (actionKeys == null) {
return new Action[] {};
@@ -930,10 +943,12 @@ public class VTree extends FocusElementPanel implements VHasDropHandler,
return actions;
}
+ @Override
public ApplicationConnection getClient() {
return client;
}
+ @Override
public String getPaintableId() {
return paintableId;
}
@@ -1071,6 +1086,7 @@ public class VTree extends FocusElementPanel implements VHasDropHandler,
}
+ @Override
public VDropHandler getDropHandler() {
return dropHandler;
}
@@ -1480,6 +1496,7 @@ public class VTree extends FocusElementPanel implements VHasDropHandler,
node.scrollIntoView();
} else {
Scheduler.get().scheduleDeferred(new Command() {
+ @Override
public void execute() {
focusedNode.scrollIntoView();
}
@@ -1505,6 +1522,7 @@ public class VTree extends FocusElementPanel implements VHasDropHandler,
* com.google.gwt.event.dom.client.FocusHandler#onFocus(com.google.gwt.event
* .dom.client.FocusEvent)
*/
+ @Override
public void onFocus(FocusEvent event) {
treeHasFocus = true;
// If no node has focus, focus the first item in the tree
@@ -1524,6 +1542,7 @@ public class VTree extends FocusElementPanel implements VHasDropHandler,
* com.google.gwt.event.dom.client.BlurHandler#onBlur(com.google.gwt.event
* .dom.client.BlurEvent)
*/
+ @Override
public void onBlur(BlurEvent event) {
treeHasFocus = false;
if (focusedNode != null) {
@@ -1538,6 +1557,7 @@ public class VTree extends FocusElementPanel implements VHasDropHandler,
* com.google.gwt.event.dom.client.KeyPressHandler#onKeyPress(com.google
* .gwt.event.dom.client.KeyPressEvent)
*/
+ @Override
public void onKeyPress(KeyPressEvent event) {
NativeEvent nativeEvent = event.getNativeEvent();
int keyCode = nativeEvent.getKeyCode();
@@ -1561,6 +1581,7 @@ public class VTree extends FocusElementPanel implements VHasDropHandler,
* com.google.gwt.event.dom.client.KeyDownHandler#onKeyDown(com.google.gwt
* .event.dom.client.KeyDownEvent)
*/
+ @Override
public void onKeyDown(KeyDownEvent event) {
if (handleKeyNavigation(event.getNativeEvent().getKeyCode(),
event.isControlKeyDown() || event.isMetaKeyDown(),
@@ -1941,6 +1962,7 @@ public class VTree extends FocusElementPanel implements VHasDropHandler,
* com.vaadin.terminal.gwt.client.ui.SubPartAware#getSubPartElement(java
* .lang.String)
*/
+ @Override
public Element getSubPartElement(String subPart) {
if ("fe".equals(subPart)) {
if (BrowserInfo.get().isOpera() && focusedNode != null) {
@@ -1994,6 +2016,7 @@ public class VTree extends FocusElementPanel implements VHasDropHandler,
* com.vaadin.terminal.gwt.client.ui.SubPartAware#getSubPartName(com.google
* .gwt.user.client.Element)
*/
+ @Override
public String getSubPartName(Element subElement) {
// Supported identifiers:
//
@@ -2044,6 +2067,7 @@ public class VTree extends FocusElementPanel implements VHasDropHandler,
return locator;
}
+ @Override
public Action[] getActions() {
if (bodyActionKeys == null) {
return new Action[] {};
@@ -2059,10 +2083,12 @@ public class VTree extends FocusElementPanel implements VHasDropHandler,
return actions;
}
+ @Override
public ApplicationConnection getClient() {
return client;
}
+ @Override
public String getPaintableId() {
return paintableId;
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/treetable/TreeTableConnector.java b/src/com/vaadin/terminal/gwt/client/ui/treetable/TreeTableConnector.java
index 59910c1b3e..06e916fbc9 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/treetable/TreeTableConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/treetable/TreeTableConnector.java
@@ -3,9 +3,9 @@
*/
package com.vaadin.terminal.gwt.client.ui.treetable;
+import com.vaadin.shared.ui.Connect;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.UIDL;
-import com.vaadin.terminal.gwt.client.ui.Connect;
import com.vaadin.terminal.gwt.client.ui.FocusableScrollPanel;
import com.vaadin.terminal.gwt.client.ui.table.TableConnector;
import com.vaadin.terminal.gwt.client.ui.table.VScrollTable.VScrollTableBody.VScrollTableRow;
diff --git a/src/com/vaadin/terminal/gwt/client/ui/treetable/VTreeTable.java b/src/com/vaadin/terminal/gwt/client/ui/treetable/VTreeTable.java
index 9a8e0e9ce1..c03dff9507 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/treetable/VTreeTable.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/treetable/VTreeTable.java
@@ -97,7 +97,7 @@ public class VTreeTable extends VScrollTable {
}
class VTreeTableScrollBody extends VScrollTable.VScrollTableBody {
- private int identWidth = -1;
+ private int indentWidth = -1;
VTreeTableScrollBody() {
super();
@@ -165,7 +165,7 @@ public class VTreeTable extends VScrollTable {
container.insertFirst(treeSpacer);
depth = rowUidl.hasAttribute("depth") ? rowUidl
.getIntAttribute("depth") : 0;
- setIdent();
+ setIndent();
isTreeCellAdded = true;
return true;
}
@@ -202,18 +202,19 @@ public class VTreeTable extends VScrollTable {
}
- private void setIdent() {
- if (getIdentWidth() > 0 && depth != 0) {
- treeSpacer.getStyle().setWidth(
- (depth + 1) * getIdentWidth(), Unit.PX);
+ private void setIndent() {
+ if (getIndentWidth() > 0) {
+ treeSpacer.getParentElement().getStyle()
+ .setPaddingLeft(getIndent(), Unit.PX);
+ treeSpacer.getStyle().setWidth(getIndent(), Unit.PX);
}
}
@Override
protected void onAttach() {
super.onAttach();
- if (getIdentWidth() < 0) {
- detectIdent(this);
+ if (getIndentWidth() < 0) {
+ detectIndent(this);
}
}
@@ -227,6 +228,19 @@ public class VTreeTable extends VScrollTable {
return consumedSpace;
}
+ @Override
+ protected void setCellWidth(int cellIx, int width) {
+ if (cellIx == colIndexOfHierarchy + (showRowHeaders ? 1 : 0)) {
+ // take indentation padding into account if this is the
+ // hierarchy column
+ width = Math.max(width - getIndent(), 0);
+ }
+ super.setCellWidth(cellIx, width);
+ }
+
+ private int getIndent() {
+ return (depth + 1) * getIndentWidth();
+ }
}
protected class VTreeTableGeneratedRow extends VTreeTableRow {
@@ -257,6 +271,7 @@ public class VTreeTable extends VScrollTable {
// widths.
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
+ @Override
public void execute() {
if (showRowHeaders) {
setCellWidth(0, tHead.getHeaderCell(0).getWidth());
@@ -353,20 +368,20 @@ public class VTreeTable extends VScrollTable {
}
}
- private int getIdentWidth() {
- return identWidth;
+ private int getIndentWidth() {
+ return indentWidth;
}
- private void detectIdent(VTreeTableRow vTreeTableRow) {
- identWidth = vTreeTableRow.treeSpacer.getOffsetWidth();
- if (identWidth == 0) {
- identWidth = -1;
+ private void detectIndent(VTreeTableRow vTreeTableRow) {
+ indentWidth = vTreeTableRow.treeSpacer.getOffsetWidth();
+ if (indentWidth == 0) {
+ indentWidth = -1;
return;
}
Iterator<Widget> iterator = iterator();
while (iterator.hasNext()) {
VTreeTableRow next = (VTreeTableRow) iterator.next();
- next.setIdent();
+ next.setIndent();
}
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/twincolselect/TwinColSelectConnector.java b/src/com/vaadin/terminal/gwt/client/ui/twincolselect/TwinColSelectConnector.java
index a77319920c..2ce6bf2129 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/twincolselect/TwinColSelectConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/twincolselect/TwinColSelectConnector.java
@@ -4,10 +4,10 @@
package com.vaadin.terminal.gwt.client.ui.twincolselect;
+import com.vaadin.shared.ui.Connect;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.DirectionalManagedLayout;
import com.vaadin.terminal.gwt.client.UIDL;
-import com.vaadin.terminal.gwt.client.ui.Connect;
import com.vaadin.terminal.gwt.client.ui.optiongroup.OptionGroupBaseConnector;
import com.vaadin.ui.TwinColSelect;
@@ -29,6 +29,7 @@ public class TwinColSelectConnector extends OptionGroupBaseConnector implements
@Override
protected void init() {
+ super.init();
getLayoutManager().registerDependency(this,
getWidget().captionWrapper.getElement());
}
@@ -44,6 +45,7 @@ public class TwinColSelectConnector extends OptionGroupBaseConnector implements
return (VTwinColSelect) super.getWidget();
}
+ @Override
public void layoutVertically() {
if (isUndefinedHeight()) {
getWidget().clearInternalHeights();
@@ -52,6 +54,7 @@ public class TwinColSelectConnector extends OptionGroupBaseConnector implements
}
}
+ @Override
public void layoutHorizontally() {
if (isUndefinedWidth()) {
getWidget().clearInternalWidths();
diff --git a/src/com/vaadin/terminal/gwt/client/ui/twincolselect/VTwinColSelect.java b/src/com/vaadin/terminal/gwt/client/ui/twincolselect/VTwinColSelect.java
index 8f1ea09b8f..1a2deae3b4 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/twincolselect/VTwinColSelect.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/twincolselect/VTwinColSelect.java
@@ -409,6 +409,7 @@ public class VTwinColSelect extends VOptionGroupBase implements KeyDownHandler,
remove.setTabIndex(tabIndex);
}
+ @Override
public void focus() {
options.setFocus(true);
}
@@ -430,6 +431,7 @@ public class VTwinColSelect extends VOptionGroupBase implements KeyDownHandler,
* com.google.gwt.event.dom.client.KeyDownHandler#onKeyDown(com.google.gwt
* .event.dom.client.KeyDownEvent)
*/
+ @Override
public void onKeyDown(KeyDownEvent event) {
int keycode = event.getNativeKeyCode();
@@ -493,6 +495,7 @@ public class VTwinColSelect extends VOptionGroupBase implements KeyDownHandler,
* com.google.gwt.event.dom.client.MouseDownHandler#onMouseDown(com.google
* .gwt.event.dom.client.MouseDownEvent)
*/
+ @Override
public void onMouseDown(MouseDownEvent event) {
// Ensure that items are deselected when selecting
// from a different source. See #3699 for details.
@@ -515,6 +518,7 @@ public class VTwinColSelect extends VOptionGroupBase implements KeyDownHandler,
* com.google.gwt.event.dom.client.DoubleClickHandler#onDoubleClick(com.
* google.gwt.event.dom.client.DoubleClickEvent)
*/
+ @Override
public void onDoubleClick(DoubleClickEvent event) {
if (event.getSource() == options) {
addItem();
@@ -539,6 +543,7 @@ public class VTwinColSelect extends VOptionGroupBase implements KeyDownHandler,
private static final String SUBPART_ADD_BUTTON = "add";
private static final String SUBPART_REMOVE_BUTTON = "remove";
+ @Override
public Element getSubPartElement(String subPart) {
if (SUBPART_OPTION_SELECT.equals(subPart)) {
return options.getElement();
@@ -568,6 +573,7 @@ public class VTwinColSelect extends VOptionGroupBase implements KeyDownHandler,
return null;
}
+ @Override
public String getSubPartName(Element subElement) {
if (optionsCaption != null
&& optionsCaption.getElement().isOrHasChild(subElement)) {
diff --git a/src/com/vaadin/terminal/gwt/client/ui/upload/UploadConnector.java b/src/com/vaadin/terminal/gwt/client/ui/upload/UploadConnector.java
index 153d99229b..af31491060 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/upload/UploadConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/upload/UploadConnector.java
@@ -4,18 +4,19 @@
package com.vaadin.terminal.gwt.client.ui.upload;
+import com.vaadin.shared.ui.Connect;
+import com.vaadin.shared.ui.Connect.LoadStyle;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.Paintable;
import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.ui.AbstractComponentConnector;
-import com.vaadin.terminal.gwt.client.ui.Connect;
-import com.vaadin.terminal.gwt.client.ui.Connect.LoadStyle;
import com.vaadin.ui.Upload;
@Connect(value = Upload.class, loadStyle = LoadStyle.LAZY)
public class UploadConnector extends AbstractComponentConnector implements
Paintable {
+ @Override
public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
if (!isRealUpdate(uidl)) {
return;
diff --git a/src/com/vaadin/terminal/gwt/client/ui/upload/VUpload.java b/src/com/vaadin/terminal/gwt/client/ui/upload/VUpload.java
index 4fe53fb89c..5cf2f2fe25 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/upload/VUpload.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/upload/VUpload.java
@@ -24,7 +24,6 @@ import com.google.gwt.user.client.ui.SimplePanel;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.BrowserInfo;
import com.vaadin.terminal.gwt.client.VConsole;
-import com.vaadin.terminal.gwt.client.VTooltip;
import com.vaadin.terminal.gwt.client.ui.button.VButton;
/**
@@ -116,6 +115,7 @@ public class VUpload extends SimplePanel {
panel.add(fu);
submitButton = new VButton();
submitButton.addClickHandler(new ClickHandler() {
+ @Override
public void onClick(ClickEvent event) {
if (immediate) {
// fire click on upload (eg. focused button and hit space)
@@ -128,16 +128,6 @@ public class VUpload extends SimplePanel {
panel.add(submitButton);
setStyleName(CLASSNAME);
-
- sinkEvents(VTooltip.TOOLTIP_EVENTS);
- }
-
- @Override
- public void onBrowserEvent(Event event) {
- if ((event.getTypeInt() & VTooltip.TOOLTIP_EVENTS) > 0) {
- client.handleTooltipEvent(event, this);
- }
- super.onBrowserEvent(event);
}
private static native void setEncoding(Element form, String encoding)
@@ -214,6 +204,7 @@ public class VUpload extends SimplePanel {
private void onSubmitComplete() {
/* Needs to be run dereferred to avoid various browser issues. */
Scheduler.get().scheduleDeferred(new Command() {
+ @Override
public void execute() {
if (submitted) {
if (client != null) {
diff --git a/src/com/vaadin/terminal/gwt/client/ui/video/VideoConnector.java b/src/com/vaadin/terminal/gwt/client/ui/video/VideoConnector.java
index ddf8df66ff..d0c126832a 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/video/VideoConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/video/VideoConnector.java
@@ -3,9 +3,10 @@
*/
package com.vaadin.terminal.gwt.client.ui.video;
+import com.vaadin.shared.communication.URLReference;
+import com.vaadin.shared.ui.Connect;
+import com.vaadin.shared.ui.video.VideoState;
import com.vaadin.terminal.gwt.client.communication.StateChangeEvent;
-import com.vaadin.terminal.gwt.client.communication.URLReference;
-import com.vaadin.terminal.gwt.client.ui.Connect;
import com.vaadin.terminal.gwt.client.ui.MediaBaseConnector;
import com.vaadin.ui.Video;
diff --git a/src/com/vaadin/terminal/gwt/client/ui/window/VWindow.java b/src/com/vaadin/terminal/gwt/client/ui/window/VWindow.java
index 8fd84a9ea6..8ac0d0662b 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/window/VWindow.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/window/VWindow.java
@@ -26,12 +26,12 @@ import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.shared.EventId;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.BrowserInfo;
import com.vaadin.terminal.gwt.client.ComponentConnector;
import com.vaadin.terminal.gwt.client.ConnectorMap;
import com.vaadin.terminal.gwt.client.Console;
-import com.vaadin.terminal.gwt.client.EventId;
import com.vaadin.terminal.gwt.client.Focusable;
import com.vaadin.terminal.gwt.client.LayoutManager;
import com.vaadin.terminal.gwt.client.Util;
@@ -146,6 +146,7 @@ public class VWindow extends VOverlay implements ShortcutActionHandlerOwner,
private VLazyExecutor delayedContentsSizeUpdater = new VLazyExecutor(200,
new ScheduledCommand() {
+ @Override
public void execute() {
updateContentsSize();
}
@@ -266,6 +267,7 @@ public class VWindow extends VOverlay implements ShortcutActionHandlerOwner,
orderingDefered = true;
Scheduler.get().scheduleFinally(new Command() {
+ @Override
public void execute() {
doServerSideOrdering();
VNotification.bringNotificationsToFront();
@@ -279,6 +281,7 @@ public class VWindow extends VOverlay implements ShortcutActionHandlerOwner,
VWindow[] array = windowOrder.toArray(new VWindow[windowOrder.size()]);
Arrays.sort(array, new Comparator<VWindow>() {
+ @Override
public int compare(VWindow o1, VWindow o2) {
/*
* Order by modality, then by bringtofront sequence.
@@ -552,11 +555,6 @@ public class VWindow extends VOverlay implements ShortcutActionHandlerOwner,
final Element target = DOM.eventGetTarget(event);
- if (client != null && header.isOrHasChild(target)) {
- // Handle window caption tooltips
- client.handleTooltipEvent(event, this);
- }
-
if (resizing || resizeBox == target) {
onResizeEvent(event);
bubble = false;
@@ -856,10 +854,12 @@ public class VWindow extends VOverlay implements ShortcutActionHandlerOwner,
true);
}
+ @Override
public ShortcutActionHandler getShortcutActionHandler() {
return shortcutHandler;
}
+ @Override
public void onScroll(ScrollEvent event) {
client.updateVariable(id, "scrollTop",
contentPanel.getScrollPosition(), false);
@@ -868,6 +868,7 @@ public class VWindow extends VOverlay implements ShortcutActionHandlerOwner,
}
+ @Override
public void onKeyDown(KeyDownEvent event) {
if (shortcutHandler != null) {
shortcutHandler
@@ -876,18 +877,21 @@ public class VWindow extends VOverlay implements ShortcutActionHandlerOwner,
}
}
+ @Override
public void onBlur(BlurEvent event) {
if (client.hasEventListeners(this, EventId.BLUR)) {
client.updateVariable(id, EventId.BLUR, "", true);
}
}
+ @Override
public void onFocus(FocusEvent event) {
if (client.hasEventListeners(this, EventId.FOCUS)) {
client.updateVariable(id, EventId.FOCUS, "", true);
}
}
+ @Override
public void focus() {
contentPanel.focus();
}
diff --git a/src/com/vaadin/terminal/gwt/client/ui/window/WindowConnector.java b/src/com/vaadin/terminal/gwt/client/ui/window/WindowConnector.java
index 83de039f0b..bae4f804fc 100644
--- a/src/com/vaadin/terminal/gwt/client/ui/window/WindowConnector.java
+++ b/src/com/vaadin/terminal/gwt/client/ui/window/WindowConnector.java
@@ -12,18 +12,20 @@ import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.shared.MouseEventDetails;
+import com.vaadin.shared.ui.Connect;
+import com.vaadin.shared.ui.window.WindowServerRpc;
+import com.vaadin.shared.ui.window.WindowState;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.BrowserInfo;
import com.vaadin.terminal.gwt.client.ComponentConnector;
import com.vaadin.terminal.gwt.client.ConnectorHierarchyChangeEvent;
import com.vaadin.terminal.gwt.client.LayoutManager;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
import com.vaadin.terminal.gwt.client.Paintable;
import com.vaadin.terminal.gwt.client.UIDL;
import com.vaadin.terminal.gwt.client.communication.RpcProxy;
import com.vaadin.terminal.gwt.client.ui.AbstractComponentContainerConnector;
import com.vaadin.terminal.gwt.client.ui.ClickEventHandler;
-import com.vaadin.terminal.gwt.client.ui.Connect;
import com.vaadin.terminal.gwt.client.ui.PostLayoutListener;
import com.vaadin.terminal.gwt.client.ui.ShortcutActionHandler;
import com.vaadin.terminal.gwt.client.ui.ShortcutActionHandler.BeforeShortcutActionListener;
@@ -72,6 +74,7 @@ public class WindowConnector extends AbstractComponentContainerConnector
lm.unregisterDependency(this, window.footer);
}
+ @Override
public void updateFromUIDL(UIDL uidl, ApplicationConnection client) {
getWidget().id = getConnectorId();
getWidget().client = client;
@@ -180,10 +183,12 @@ public class WindowConnector extends AbstractComponentContainerConnector
}
}
+ @Override
public void updateCaption(ComponentConnector component) {
// NOP, window has own caption, layout caption not rendered
}
+ @Override
public void onBeforeShortcutAction(Event e) {
// NOP, nothing to update just avoid workaround ( causes excess
// blur/focus )
@@ -210,6 +215,7 @@ public class WindowConnector extends AbstractComponentContainerConnector
getWidget().contentPanel.setWidget(newChildWidget);
}
+ @Override
public void layout() {
LayoutManager lm = getLayoutManager();
VWindow window = getWidget();
@@ -274,13 +280,14 @@ public class WindowConnector extends AbstractComponentContainerConnector
}
}
+ @Override
public void postLayout() {
minWidthChecked = false;
VWindow window = getWidget();
if (window.centered) {
window.center();
}
- window.updateShadowSizeAndPosition();
+ window.sizeOrPositionUpdated();
}
@Override
diff --git a/src/com/vaadin/terminal/gwt/client/ui/window/WindowServerRpc.java b/src/com/vaadin/terminal/gwt/client/ui/window/WindowServerRpc.java
deleted file mode 100644
index 4723c55786..0000000000
--- a/src/com/vaadin/terminal/gwt/client/ui/window/WindowServerRpc.java
+++ /dev/null
@@ -1,10 +0,0 @@
-/*
-@VaadinApache2LicenseForJavaFiles@
- */
-package com.vaadin.terminal.gwt.client.ui.window;
-
-import com.vaadin.terminal.gwt.client.communication.ServerRpc;
-import com.vaadin.terminal.gwt.client.ui.ClickRpc;
-
-public interface WindowServerRpc extends ClickRpc, ServerRpc {
-} \ No newline at end of file
diff --git a/src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java b/src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java
index c2f887674a..363f7e4869 100644
--- a/src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java
+++ b/src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java
@@ -25,7 +25,6 @@ import javax.portlet.ActionResponse;
import javax.portlet.EventRequest;
import javax.portlet.EventResponse;
import javax.portlet.GenericPortlet;
-import javax.portlet.MimeResponse;
import javax.portlet.PortletConfig;
import javax.portlet.PortletContext;
import javax.portlet.PortletException;
@@ -64,6 +63,8 @@ import com.vaadin.ui.Root;
public abstract class AbstractApplicationPortlet extends GenericPortlet
implements Constants {
+ public static final String RESOURCE_URL_ID = "APP";
+
public static class WrappedHttpAndPortletRequest extends
WrappedPortletRequest {
@@ -175,15 +176,12 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
this.portlet = portlet;
}
+ @Override
public void criticalNotification(WrappedRequest request,
WrappedResponse response, String cap, String msg,
String details, String outOfSyncURL) throws IOException {
- PortletRequest portletRequest = WrappedPortletRequest.cast(request)
- .getPortletRequest();
- PortletResponse portletResponse = ((WrappedPortletResponse) response)
- .getPortletResponse();
- portlet.criticalNotification(portletRequest,
- (MimeResponse) portletResponse, cap, msg, details,
+ portlet.criticalNotification(WrappedPortletRequest.cast(request),
+ (WrappedPortletResponse) response, cap, msg, details,
outOfSyncURL);
}
}
@@ -207,19 +205,19 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
// TODO Can we close the application when the portlet is removed? Do we know
// when the portlet is removed?
- private Properties applicationProperties;
-
private boolean productionMode = false;
- private DeploymentConfiguration deploymentConfiguration = new DeploymentConfiguration() {
-
+ private DeploymentConfiguration deploymentConfiguration = new AbstractDeploymentConfiguration(
+ getClass()) {
+ @Override
public String getConfiguredWidgetset(WrappedRequest request) {
String widgetset = getApplicationOrSystemProperty(
PARAMETER_WIDGETSET, null);
if (widgetset == null) {
- // If no widgetset defined for the application, check the portal
+ // If no widgetset defined for the application, check the
+ // portal
// property
widgetset = WrappedPortletRequest.cast(request)
.getPortalProperty(PORTAL_PARAMETER_VAADIN_WIDGETSET);
@@ -233,6 +231,7 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
return widgetset;
}
+ @Override
public String getConfiguredTheme(WrappedRequest request) {
// is the default theme defined by the portal?
@@ -247,12 +246,7 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
return themeName;
}
- public String getApplicationOrSystemProperty(String propertyName,
- String defaultValue) {
- return AbstractApplicationPortlet.this
- .getApplicationOrSystemProperty(propertyName, defaultValue);
- }
-
+ @Override
public boolean isStandalone(WrappedRequest request) {
return false;
}
@@ -272,6 +266,7 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
* be a VAADIN directory). Does not end with a slash (/).
*/
+ @Override
public String getStaticFileLocation(WrappedRequest request) {
String staticFileLocation = WrappedPortletRequest.cast(request)
.getPortalProperty(
@@ -289,17 +284,17 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
}
}
- public ClassLoader getClassLoader() {
- // Custom class loaders not currently supported in portlets (see
- // #8574)
- return null;
+ @Override
+ public String getMimeType(String resourceName) {
+ return getPortletContext().getMimeType(resourceName);
}
};
@Override
public void init(PortletConfig config) throws PortletException {
super.init(config);
- applicationProperties = new Properties();
+ Properties applicationProperties = getDeploymentConfiguration()
+ .getInitParameters();
// Read default parameters from the context
final PortletContext context = config.getPortletContext();
@@ -323,7 +318,7 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
}
private void checkCrossSiteProtection() {
- if (getApplicationOrSystemProperty(
+ if (getDeploymentConfiguration().getApplicationOrSystemProperty(
SERVLET_PARAMETER_DISABLE_XSRF_PROTECTION, "false").equals(
"true")) {
/*
@@ -338,8 +333,8 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
// TODO Identical code in AbstractApplicationServlet -> refactor
// Check if the application is in production mode.
// We are in production mode if productionMode=true
- if (getApplicationOrSystemProperty(SERVLET_PARAMETER_PRODUCTION_MODE,
- "false").equals("true")) {
+ if (getDeploymentConfiguration().getApplicationOrSystemProperty(
+ SERVLET_PARAMETER_PRODUCTION_MODE, "false").equals("true")) {
productionMode = true;
}
@@ -350,101 +345,27 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
}
}
- /**
- * Gets an application property value.
- *
- * @param parameterName
- * the Name or the parameter.
- * @return String value or null if not found
- */
- protected String getApplicationProperty(String parameterName) {
-
- String val = applicationProperties.getProperty(parameterName);
- if (val != null) {
- return val;
- }
-
- // Try lower case application properties for backward compatibility with
- // 3.0.2 and earlier
- val = applicationProperties.getProperty(parameterName.toLowerCase());
-
- return val;
- }
-
- /**
- * Gets an system property value.
- *
- * @param parameterName
- * the Name or the parameter.
- * @return String value or null if not found
- */
- protected String getSystemProperty(String parameterName) {
- String val = null;
-
- String pkgName;
- final Package pkg = getClass().getPackage();
- if (pkg != null) {
- pkgName = pkg.getName();
- } else {
- final String className = getClass().getName();
- pkgName = new String(className.toCharArray(), 0,
- className.lastIndexOf('.'));
- }
- val = System.getProperty(pkgName + "." + parameterName);
- if (val != null) {
- return val;
- }
-
- // Try lowercased system properties
- val = System.getProperty(pkgName + "." + parameterName.toLowerCase());
- return val;
- }
-
- /**
- * Gets an application or system property value.
- *
- * @param parameterName
- * the Name or the parameter.
- * @param defaultValue
- * the Default to be used.
- * @return String value or default if not found
- */
- protected String getApplicationOrSystemProperty(String parameterName,
- String defaultValue) {
-
- String val = null;
-
- // Try application properties
- val = getApplicationProperty(parameterName);
- if (val != null) {
- return val;
- }
-
- // Try system properties
- val = getSystemProperty(parameterName);
- if (val != null) {
- return val;
- }
-
- return defaultValue;
- }
-
protected enum RequestType {
- FILE_UPLOAD, UIDL, RENDER, STATIC_FILE, APPLICATION_RESOURCE, DUMMY, EVENT, ACTION, UNKNOWN, BROWSER_DETAILS;
+ FILE_UPLOAD, UIDL, RENDER, STATIC_FILE, APPLICATION_RESOURCE, DUMMY, EVENT, ACTION, UNKNOWN, BROWSER_DETAILS, CONNECTOR_RESOURCE;
}
- protected RequestType getRequestType(PortletRequest request) {
+ protected RequestType getRequestType(WrappedPortletRequest wrappedRequest) {
+ PortletRequest request = wrappedRequest.getPortletRequest();
if (request instanceof RenderRequest) {
return RequestType.RENDER;
} else if (request instanceof ResourceRequest) {
ResourceRequest resourceRequest = (ResourceRequest) request;
- if (isUIDLRequest(resourceRequest)) {
+ if (ServletPortletHelper.isUIDLRequest(wrappedRequest)) {
return RequestType.UIDL;
- } else if (isBrowserDetailsRequeset(resourceRequest)) {
+ } else if (isBrowserDetailsRequest(resourceRequest)) {
return RequestType.BROWSER_DETAILS;
- } else if (isFileUploadRequest(resourceRequest)) {
+ } else if (ServletPortletHelper.isFileUploadRequest(wrappedRequest)) {
return RequestType.FILE_UPLOAD;
- } else if (isApplicationResourceRequest(resourceRequest)) {
+ } else if (ServletPortletHelper
+ .isConnectorResourceRequest(wrappedRequest)) {
+ return RequestType.CONNECTOR_RESOURCE;
+ } else if (ServletPortletHelper
+ .isApplicationResourceRequest(wrappedRequest)) {
return RequestType.APPLICATION_RESOURCE;
} else if (isDummyRequest(resourceRequest)) {
return RequestType.DUMMY;
@@ -459,30 +380,16 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
return RequestType.UNKNOWN;
}
- private boolean isBrowserDetailsRequeset(ResourceRequest request) {
+ private boolean isBrowserDetailsRequest(ResourceRequest request) {
return request.getResourceID() != null
&& request.getResourceID().equals("browserDetails");
}
- private boolean isApplicationResourceRequest(ResourceRequest request) {
- return request.getResourceID() != null
- && request.getResourceID().startsWith("APP");
- }
-
- private boolean isUIDLRequest(ResourceRequest request) {
- return request.getResourceID() != null
- && request.getResourceID().equals("UIDL");
- }
-
private boolean isDummyRequest(ResourceRequest request) {
return request.getResourceID() != null
&& request.getResourceID().equals("DUMMY");
}
- private boolean isFileUploadRequest(ResourceRequest request) {
- return "UPLOAD".equals(request.getResourceID());
- }
-
/**
* Returns true if the servlet is running in production mode. Production
* mode disables all debug facilities.
@@ -506,7 +413,7 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
WrappedPortletResponse wrappedResponse = new WrappedPortletResponse(
response, getDeploymentConfiguration());
- RequestType requestType = getRequestType(request);
+ RequestType requestType = getRequestType(wrappedRequest);
if (requestType == RequestType.UNKNOWN) {
handleUnknownRequest(request, response);
@@ -554,6 +461,12 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
PortletCommunicationManager applicationManager = applicationContext
.getApplicationManager(application);
+ if (requestType == RequestType.CONNECTOR_RESOURCE) {
+ applicationManager.serveConnectorResource(wrappedRequest,
+ wrappedResponse);
+ return;
+ }
+
/* Update browser information from request */
applicationContext.getBrowser().updateRequestDetails(
wrappedRequest);
@@ -638,8 +551,10 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
/* Handle the request */
if (requestType == RequestType.FILE_UPLOAD) {
- applicationManager.handleFileUpload(root, wrappedRequest,
- wrappedResponse);
+ // Root is resolved in handleFileUpload by
+ // PortletCommunicationManager
+ applicationManager.handleFileUpload(application,
+ wrappedRequest, wrappedResponse);
return;
} else if (requestType == RequestType.BROWSER_DETAILS) {
applicationManager.handleBrowserDetailsRequest(
@@ -673,7 +588,8 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
getLogger()
.fine("General security exception, the security key was probably incorrect.");
} catch (final Throwable e) {
- handleServiceException(request, response, application, e);
+ handleServiceException(wrappedRequest, wrappedResponse,
+ application, e);
} finally {
// Notifies transaction end
try {
@@ -727,7 +643,7 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
}
- private DeploymentConfiguration getDeploymentConfiguration() {
+ protected DeploymentConfiguration getDeploymentConfiguration() {
return deploymentConfiguration;
}
@@ -871,7 +787,8 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
application.setLocale(locale);
// No application URL when running inside a portlet
application.start(new ApplicationStartEvent(null,
- applicationProperties, context, isProductionMode()));
+ getDeploymentConfiguration().getInitParameters(),
+ context, isProductionMode()));
}
}
@@ -995,11 +912,6 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
}
}
- protected ClassLoader getClassLoader() throws PortletException {
- // TODO Add support for custom class loader
- return getClass().getClassLoader();
- }
-
/**
* Get system messages from the current application class
*
@@ -1031,16 +943,16 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
return Application.getSystemMessages();
}
- private void handleServiceException(PortletRequest request,
- PortletResponse response, Application application, Throwable e)
- throws IOException, PortletException {
+ private void handleServiceException(WrappedPortletRequest request,
+ WrappedPortletResponse response, Application application,
+ Throwable e) throws IOException, PortletException {
// TODO Check that this error handler is working when running inside a
// portlet
// if this was an UIDL request, response UIDL back to client
if (getRequestType(request) == RequestType.UIDL) {
Application.SystemMessages ci = getSystemMessages();
- criticalNotification(request, (ResourceResponse) response,
+ criticalNotification(request, response,
ci.getInternalErrorCaption(), ci.getInternalErrorMessage(),
null, ci.getInternalErrorURL());
if (application != null) {
@@ -1065,6 +977,7 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
this.throwable = throwable;
}
+ @Override
public Throwable getThrowable() {
return throwable;
}
@@ -1093,9 +1006,9 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
* @throws IOException
* if the writing failed due to input/output error.
*/
- void criticalNotification(PortletRequest request, MimeResponse response,
- String caption, String message, String details, String url)
- throws IOException {
+ void criticalNotification(WrappedPortletRequest request,
+ WrappedPortletResponse response, String caption, String message,
+ String details, String url) throws IOException {
// clients JS app is still running, but server application either
// no longer exists or it might fail to perform reasonably.
@@ -1121,7 +1034,7 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
// Set the response type
response.setContentType("application/json; charset=UTF-8");
- final OutputStream out = response.getPortletOutputStream();
+ final OutputStream out = response.getOutputStream();
final PrintWriter outWriter = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(out, "UTF-8")));
outWriter.print("for(;;);[{\"changes\":[], \"meta\" : {"
diff --git a/src/com/vaadin/terminal/gwt/server/AbstractApplicationServlet.java b/src/com/vaadin/terminal/gwt/server/AbstractApplicationServlet.java
index f7e46a7ca9..a0e807801e 100644
--- a/src/com/vaadin/terminal/gwt/server/AbstractApplicationServlet.java
+++ b/src/com/vaadin/terminal/gwt/server/AbstractApplicationServlet.java
@@ -10,7 +10,6 @@ import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.Serializable;
-import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
@@ -74,6 +73,7 @@ public abstract class AbstractApplicationServlet extends HttpServlet implements
this.servlet = servlet;
}
+ @Override
public void criticalNotification(WrappedRequest request,
WrappedResponse response, String cap, String msg,
String details, String outOfSyncURL) throws IOException {
@@ -87,16 +87,16 @@ public abstract class AbstractApplicationServlet extends HttpServlet implements
// TODO Move some (all?) of the constants to a separate interface (shared
// with portlet)
- private Properties applicationProperties;
-
private boolean productionMode = false;
private final String resourcePath = null;
private int resourceCacheTime = 3600;
- private DeploymentConfiguration deploymentConfiguration = new DeploymentConfiguration() {
+ private DeploymentConfiguration deploymentConfiguration = new AbstractDeploymentConfiguration(
+ getClass()) {
+ @Override
public String getStaticFileLocation(WrappedRequest request) {
HttpServletRequest servletRequest = WrappedHttpServletRequest
.cast(request);
@@ -104,38 +104,30 @@ public abstract class AbstractApplicationServlet extends HttpServlet implements
.getStaticFilesLocation(servletRequest);
}
+ @Override
public String getConfiguredWidgetset(WrappedRequest request) {
return getApplicationOrSystemProperty(
AbstractApplicationServlet.PARAMETER_WIDGETSET,
AbstractApplicationServlet.DEFAULT_WIDGETSET);
}
+ @Override
public String getConfiguredTheme(WrappedRequest request) {
// Use the default
return AbstractApplicationServlet.getDefaultTheme();
}
- public String getApplicationOrSystemProperty(String propertyName,
- String defaultValue) {
- return AbstractApplicationServlet.this
- .getApplicationOrSystemProperty(propertyName, defaultValue);
- }
-
+ @Override
public boolean isStandalone(WrappedRequest request) {
return true;
}
- public ClassLoader getClassLoader() {
- try {
- return AbstractApplicationServlet.this.getClassLoader();
- } catch (ServletException e) {
- throw new RuntimeException(e);
- }
+ @Override
+ public String getMimeType(String resourceName) {
+ return getServletContext().getMimeType(resourceName);
}
};
- static final String UPLOAD_URL_PREFIX = "APP/UPLOAD/";
-
/**
* Called by the servlet container to indicate to a servlet that the servlet
* is being placed into service.
@@ -148,11 +140,11 @@ public abstract class AbstractApplicationServlet extends HttpServlet implements
* servlet's normal operation.
*/
@Override
- @SuppressWarnings("unchecked")
public void init(javax.servlet.ServletConfig servletConfig)
throws javax.servlet.ServletException {
super.init(servletConfig);
- applicationProperties = new Properties();
+ Properties applicationProperties = getDeploymentConfiguration()
+ .getInitParameters();
// Read default parameters from server.xml
final ServletContext context = servletConfig.getServletContext();
@@ -177,7 +169,7 @@ public abstract class AbstractApplicationServlet extends HttpServlet implements
}
private void checkCrossSiteProtection() {
- if (getApplicationOrSystemProperty(
+ if (getDeploymentConfiguration().getApplicationOrSystemProperty(
SERVLET_PARAMETER_DISABLE_XSRF_PROTECTION, "false").equals(
"true")) {
/*
@@ -191,8 +183,8 @@ public abstract class AbstractApplicationServlet extends HttpServlet implements
private void checkProductionMode() {
// Check if the application is in production mode.
// We are in production mode if productionMode=true
- if (getApplicationOrSystemProperty(SERVLET_PARAMETER_PRODUCTION_MODE,
- "false").equals("true")) {
+ if (getDeploymentConfiguration().getApplicationOrSystemProperty(
+ SERVLET_PARAMETER_PRODUCTION_MODE, "false").equals("true")) {
productionMode = true;
}
@@ -206,8 +198,9 @@ public abstract class AbstractApplicationServlet extends HttpServlet implements
private void checkResourceCacheTime() {
// Check if the browser caching time has been set in web.xml
try {
- String rct = getApplicationOrSystemProperty(
- SERVLET_PARAMETER_RESOURCE_CACHE_TIME, "3600");
+ String rct = getDeploymentConfiguration()
+ .getApplicationOrSystemProperty(
+ SERVLET_PARAMETER_RESOURCE_CACHE_TIME, "3600");
resourceCacheTime = Integer.parseInt(rct);
} catch (NumberFormatException nfe) {
// Default is 1h
@@ -217,85 +210,6 @@ public abstract class AbstractApplicationServlet extends HttpServlet implements
}
/**
- * Gets an application property value.
- *
- * @param parameterName
- * the Name or the parameter.
- * @return String value or null if not found
- */
- protected String getApplicationProperty(String parameterName) {
-
- String val = applicationProperties.getProperty(parameterName);
- if (val != null) {
- return val;
- }
-
- // Try lower case application properties for backward compatibility with
- // 3.0.2 and earlier
- val = applicationProperties.getProperty(parameterName.toLowerCase());
-
- return val;
- }
-
- /**
- * Gets an system property value.
- *
- * @param parameterName
- * the Name or the parameter.
- * @return String value or null if not found
- */
- protected String getSystemProperty(String parameterName) {
- String val = null;
-
- String pkgName;
- final Package pkg = getClass().getPackage();
- if (pkg != null) {
- pkgName = pkg.getName();
- } else {
- final String className = getClass().getName();
- pkgName = new String(className.toCharArray(), 0,
- className.lastIndexOf('.'));
- }
- val = System.getProperty(pkgName + "." + parameterName);
- if (val != null) {
- return val;
- }
-
- // Try lowercased system properties
- val = System.getProperty(pkgName + "." + parameterName.toLowerCase());
- return val;
- }
-
- /**
- * Gets an application or system property value.
- *
- * @param parameterName
- * the Name or the parameter.
- * @param defaultValue
- * the Default to be used.
- * @return String value or default if not found
- */
- String getApplicationOrSystemProperty(String parameterName,
- String defaultValue) {
-
- String val = null;
-
- // Try application properties
- val = getApplicationProperty(parameterName);
- if (val != null) {
- return val;
- }
-
- // Try system properties
- val = getSystemProperty(parameterName);
- if (val != null) {
- return val;
- }
-
- return defaultValue;
- }
-
- /**
* Returns true if the servlet is running in production mode. Production
* mode disables all debug facilities.
*
@@ -396,6 +310,11 @@ public abstract class AbstractApplicationServlet extends HttpServlet implements
CommunicationManager applicationManager = webApplicationContext
.getApplicationManager(application, this);
+ if (requestType == RequestType.CONNECTOR_RESOURCE) {
+ applicationManager.serveConnectorResource(request, response);
+ return;
+ }
+
/* Update browser information from the request */
webApplicationContext.getBrowser().updateRequestDetails(request);
@@ -421,11 +340,9 @@ public abstract class AbstractApplicationServlet extends HttpServlet implements
/* Handle the request */
if (requestType == RequestType.FILE_UPLOAD) {
- Root root = application.getRootForRequest(request);
- if (root == null) {
- throw new ServletException(ERROR_NO_ROOT_FOUND);
- }
- applicationManager.handleFileUpload(root, request, response);
+ // Root is resolved in communication manager
+ applicationManager.handleFileUpload(application, request,
+ response);
return;
} else if (requestType == RequestType.UIDL) {
Root root = application.getRootForRequest(request);
@@ -536,8 +453,8 @@ public abstract class AbstractApplicationServlet extends HttpServlet implements
* @throws IOException
*/
private boolean ensureCookiesEnabled(RequestType requestType,
- HttpServletRequest request, HttpServletResponse response)
- throws IOException {
+ WrappedHttpServletRequest request,
+ WrappedHttpServletResponse response) throws IOException {
if (requestType == RequestType.UIDL && !isRepaintAll(request)) {
// In all other but the first UIDL request a cookie should be
// returned by the browser.
@@ -554,30 +471,6 @@ public abstract class AbstractApplicationServlet extends HttpServlet implements
return true;
}
- protected ClassLoader getClassLoader() throws ServletException {
- // Gets custom class loader
- final String classLoaderName = getApplicationOrSystemProperty(
- "ClassLoader", null);
- ClassLoader classLoader;
- if (classLoaderName == null) {
- classLoader = getClass().getClassLoader();
- } else {
- try {
- final Class<?> classLoaderClass = getClass().getClassLoader()
- .loadClass(classLoaderName);
- final Constructor<?> c = classLoaderClass
- .getConstructor(new Class[] { ClassLoader.class });
- classLoader = (ClassLoader) c
- .newInstance(new Object[] { getClass().getClassLoader() });
- } catch (final Exception e) {
- throw new ServletException(
- "Could not find specified class loader: "
- + classLoaderName, e);
- }
- }
- return classLoader;
- }
-
/**
* Send a notification to client's application. Used to notify client of
* critical errors, session expiration and more. Server has no knowledge of
@@ -602,11 +495,11 @@ public abstract class AbstractApplicationServlet extends HttpServlet implements
* @throws IOException
* if the writing failed due to input/output error.
*/
- protected void criticalNotification(HttpServletRequest request,
+ protected void criticalNotification(WrappedHttpServletRequest request,
HttpServletResponse response, String caption, String message,
String details, String url) throws IOException {
- if (isUIDLRequest(request)) {
+ if (ServletPortletHelper.isUIDLRequest(request)) {
if (caption != null) {
caption = "\"" + JsonPaintTarget.escapeJSON(caption) + "\"";
@@ -828,9 +721,9 @@ public abstract class AbstractApplicationServlet extends HttpServlet implements
return newApplication;
}
- private void handleServiceException(HttpServletRequest request,
- HttpServletResponse response, Application application, Throwable e)
- throws IOException, ServletException {
+ private void handleServiceException(WrappedHttpServletRequest request,
+ WrappedHttpServletResponse response, Application application,
+ Throwable e) throws IOException, ServletException {
// if this was an UIDL request, response UIDL back to client
if (getRequestType(request) == RequestType.UIDL) {
Application.SystemMessages ci = getSystemMessages();
@@ -883,8 +776,9 @@ public abstract class AbstractApplicationServlet extends HttpServlet implements
return DEFAULT_THEME_NAME;
}
- void handleServiceSessionExpired(HttpServletRequest request,
- HttpServletResponse response) throws IOException, ServletException {
+ void handleServiceSessionExpired(WrappedHttpServletRequest request,
+ WrappedHttpServletResponse response) throws IOException,
+ ServletException {
if (isOnUnloadRequest(request)) {
/*
@@ -924,8 +818,10 @@ public abstract class AbstractApplicationServlet extends HttpServlet implements
}
- private void handleServiceSecurityException(HttpServletRequest request,
- HttpServletResponse response) throws IOException, ServletException {
+ private void handleServiceSecurityException(
+ WrappedHttpServletRequest request,
+ WrappedHttpServletResponse response) throws IOException,
+ ServletException {
if (isOnUnloadRequest(request)) {
/*
* Request was an unload request (e.g. window close event) and the
@@ -991,8 +887,8 @@ public abstract class AbstractApplicationServlet extends HttpServlet implements
Locale locale = request.getLocale();
application.setLocale(locale);
application.start(new ApplicationStartEvent(applicationUrl,
- applicationProperties, webApplicationContext,
- isProductionMode()));
+ getDeploymentConfiguration().getInitParameters(),
+ webApplicationContext, isProductionMode()));
}
}
@@ -1054,7 +950,8 @@ public abstract class AbstractApplicationServlet extends HttpServlet implements
// strip leading "/" otherwise stream from JAR wont work
filename = filename.substring(1);
- resourceUrl = getClassLoader().getResource(filename);
+ resourceUrl = getDeploymentConfiguration().getClassLoader()
+ .getResource(filename);
if (resourceUrl == null) {
// cannot serve requested file
@@ -1250,22 +1147,22 @@ public abstract class AbstractApplicationServlet extends HttpServlet implements
}
protected enum RequestType {
- FILE_UPLOAD, BROWSER_DETAILS, UIDL, OTHER, STATIC_FILE, APPLICATION_RESOURCE;
+ FILE_UPLOAD, BROWSER_DETAILS, UIDL, OTHER, STATIC_FILE, APPLICATION_RESOURCE, CONNECTOR_RESOURCE;
}
- protected RequestType getRequestType(HttpServletRequest request) {
- if (isFileUploadRequest(request)) {
+ protected RequestType getRequestType(WrappedHttpServletRequest request) {
+ if (ServletPortletHelper.isFileUploadRequest(request)) {
return RequestType.FILE_UPLOAD;
+ } else if (ServletPortletHelper.isConnectorResourceRequest(request)) {
+ return RequestType.CONNECTOR_RESOURCE;
} else if (isBrowserDetailsRequest(request)) {
return RequestType.BROWSER_DETAILS;
- } else if (isUIDLRequest(request)) {
+ } else if (ServletPortletHelper.isUIDLRequest(request)) {
return RequestType.UIDL;
} else if (isStaticResourceRequest(request)) {
return RequestType.STATIC_FILE;
- } else if (isApplicationRequest(request)) {
+ } else if (ServletPortletHelper.isApplicationResourceRequest(request)) {
return RequestType.APPLICATION_RESOURCE;
- } else if (request.getHeader("FileId") != null) {
- return RequestType.FILE_UPLOAD;
}
return RequestType.OTHER;
@@ -1276,14 +1173,6 @@ public abstract class AbstractApplicationServlet extends HttpServlet implements
&& request.getParameter("browserDetails") != null;
}
- private boolean isApplicationRequest(HttpServletRequest request) {
- String path = getRequestPathInfo(request);
- if (path != null && path.startsWith("/APP/")) {
- return true;
- }
- return false;
- }
-
private boolean isStaticResourceRequest(HttpServletRequest request) {
String pathInfo = request.getPathInfo();
if (pathInfo == null || pathInfo.length() <= 10) {
@@ -1301,37 +1190,6 @@ public abstract class AbstractApplicationServlet extends HttpServlet implements
return false;
}
- private boolean isUIDLRequest(HttpServletRequest request) {
- String pathInfo = getRequestPathInfo(request);
-
- if (pathInfo == null) {
- return false;
- }
-
- String compare = AJAX_UIDL_URI;
-
- if (pathInfo.startsWith(compare + "/") || pathInfo.endsWith(compare)) {
- return true;
- }
-
- return false;
- }
-
- private boolean isFileUploadRequest(HttpServletRequest request) {
- String pathInfo = getRequestPathInfo(request);
-
- if (pathInfo == null) {
- return false;
- }
-
- if (pathInfo.startsWith("/" + UPLOAD_URL_PREFIX)) {
- return true;
- }
-
- return false;
-
- }
-
private boolean isOnUnloadRequest(HttpServletRequest request) {
return request.getParameter(ApplicationConnection.PARAM_UNLOADBURST) != null;
}
@@ -1410,8 +1268,9 @@ public abstract class AbstractApplicationServlet extends HttpServlet implements
HttpServletRequest request) {
String staticFileLocation;
// if property is defined in configurations, use that
- staticFileLocation = getApplicationOrSystemProperty(
- PARAMETER_VAADIN_RESOURCES, null);
+ staticFileLocation = getDeploymentConfiguration()
+ .getApplicationOrSystemProperty(PARAMETER_VAADIN_RESOURCES,
+ null);
if (staticFileLocation != null) {
return staticFileLocation;
}
@@ -1682,6 +1541,7 @@ public abstract class AbstractApplicationServlet extends HttpServlet implements
this.throwable = throwable;
}
+ @Override
public Throwable getThrowable() {
return throwable;
}
diff --git a/src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java b/src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java
index 7cad8e3a33..ba1b3cadb6 100644
--- a/src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java
+++ b/src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java
@@ -18,6 +18,8 @@ import java.io.StringWriter;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
+import java.net.URI;
+import java.net.URISyntaxException;
import java.security.GeneralSecurityException;
import java.text.CharacterIterator;
import java.text.DateFormat;
@@ -42,13 +44,21 @@ import java.util.UUID;
import java.util.logging.Level;
import java.util.logging.Logger;
+import javax.servlet.http.HttpServletResponse;
+
import com.vaadin.Application;
import com.vaadin.Application.SystemMessages;
import com.vaadin.RootRequiresMoreInformationException;
import com.vaadin.Version;
+import com.vaadin.annotations.JavaScript;
+import com.vaadin.annotations.StyleSheet;
import com.vaadin.external.json.JSONArray;
import com.vaadin.external.json.JSONException;
import com.vaadin.external.json.JSONObject;
+import com.vaadin.shared.Connector;
+import com.vaadin.shared.communication.MethodInvocation;
+import com.vaadin.shared.communication.SharedState;
+import com.vaadin.shared.communication.UidlValue;
import com.vaadin.terminal.AbstractClientConnector;
import com.vaadin.terminal.CombinedRequest;
import com.vaadin.terminal.LegacyPaint;
@@ -65,10 +75,6 @@ import com.vaadin.terminal.VariableOwner;
import com.vaadin.terminal.WrappedRequest;
import com.vaadin.terminal.WrappedResponse;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
-import com.vaadin.terminal.gwt.client.Connector;
-import com.vaadin.terminal.gwt.client.communication.MethodInvocation;
-import com.vaadin.terminal.gwt.client.communication.SharedState;
-import com.vaadin.terminal.gwt.client.communication.UidlValue;
import com.vaadin.terminal.gwt.server.BootstrapHandler.BootstrapContext;
import com.vaadin.terminal.gwt.server.ComponentSizeValidator.InvalidLayout;
import com.vaadin.terminal.gwt.server.RpcManager.RpcInvocationException;
@@ -154,6 +160,12 @@ public abstract class AbstractCommunicationManager implements Serializable {
private Connector highlightedConnector;
+ private Map<String, Class<?>> connectorResourceContexts = new HashMap<String, Class<?>>();
+
+ private Map<String, Map<String, StreamVariable>> pidToNameToStreamVariable;
+
+ private Map<StreamVariable, String> streamVariableToSeckey;
+
/**
* TODO New constructor - document me!
*
@@ -204,7 +216,7 @@ public abstract class AbstractCommunicationManager implements Serializable {
*/
protected void doHandleSimpleMultipartFileUpload(WrappedRequest request,
WrappedResponse response, StreamVariable streamVariable,
- String variableName, Connector owner, String boundary)
+ String variableName, ClientConnector owner, String boundary)
throws IOException {
// multipart parsing, supports only one file for request, but that is
// fine for our current terminal
@@ -267,14 +279,16 @@ public abstract class AbstractCommunicationManager implements Serializable {
final String mimeType = rawMimeType;
try {
- /*
- * safe cast as in GWT terminal all variable owners are expected to
- * be components.
- */
- Component component = (Component) owner;
- if (component.isReadOnly()) {
+ // TODO Shouldn't this check connectorEnabled?
+ if (owner == null) {
throw new UploadException(
- "Warning: file upload ignored because the componente was read-only");
+ "File upload ignored because the connector for the stream variable was not found");
+ }
+ if (owner instanceof Component) {
+ if (((Component) owner).isReadOnly()) {
+ throw new UploadException(
+ "Warning: file upload ignored because the componente was read-only");
+ }
}
boolean forgetVariable = streamToReceiver(simpleMultiPartReader,
streamVariable, filename, mimeType, contentLength);
@@ -303,7 +317,7 @@ public abstract class AbstractCommunicationManager implements Serializable {
*/
protected void doHandleXhrFilePost(WrappedRequest request,
WrappedResponse response, StreamVariable streamVariable,
- String variableName, Connector owner, int contentLength)
+ String variableName, ClientConnector owner, int contentLength)
throws IOException {
// These are unknown in filexhr ATM, maybe add to Accept header that
@@ -497,10 +511,11 @@ public abstract class AbstractCommunicationManager implements Serializable {
* found
* @throws IOException
* @throws InvalidUIDLSecurityKeyException
+ * @throws JSONException
*/
public void handleUidlRequest(WrappedRequest request,
WrappedResponse response, Callback callback, Root root)
- throws IOException, InvalidUIDLSecurityKeyException {
+ throws IOException, InvalidUIDLSecurityKeyException, JSONException {
checkWidgetsetVersion(request);
requestThemeName = request.getParameter("theme");
@@ -623,6 +638,23 @@ public abstract class AbstractCommunicationManager implements Serializable {
// Remove connectors that have been detached from the application during
// handling of the request
root.getConnectorTracker().cleanConnectorMap();
+
+ if (pidToNameToStreamVariable != null) {
+ Iterator<String> iterator = pidToNameToStreamVariable.keySet()
+ .iterator();
+ while (iterator.hasNext()) {
+ String connectorId = iterator.next();
+ if (root.getConnectorTracker().getConnector(connectorId) == null) {
+ // Owner is no longer attached to the application
+ Map<String, StreamVariable> removed = pidToNameToStreamVariable
+ .get(connectorId);
+ for (String key : removed.keySet()) {
+ streamVariableToSeckey.remove(removed.get(key));
+ }
+ iterator.remove();
+ }
+ }
+ }
}
protected void highlightConnector(Connector highlightedConnector) {
@@ -696,11 +728,12 @@ public abstract class AbstractCommunicationManager implements Serializable {
* @param analyzeLayouts
* @throws PaintException
* @throws IOException
+ * @throws JSONException
*/
private void paintAfterVariableChanges(WrappedRequest request,
WrappedResponse response, Callback callback, boolean repaintAll,
final PrintWriter outWriter, Root root, boolean analyzeLayouts)
- throws PaintException, IOException {
+ throws PaintException, IOException, JSONException {
// Removes application if it has stopped during variable changes
if (!application.isRunning()) {
@@ -764,7 +797,7 @@ public abstract class AbstractCommunicationManager implements Serializable {
@SuppressWarnings("unchecked")
public void writeUidlResponse(WrappedRequest request, boolean repaintAll,
final PrintWriter outWriter, Root root, boolean analyzeLayouts)
- throws PaintException {
+ throws PaintException, JSONException {
ArrayList<ClientConnector> dirtyVisibleConnectors = new ArrayList<ClientConnector>();
Application application = root.getApplication();
// Paints components
@@ -1095,10 +1128,14 @@ public abstract class AbstractCommunicationManager implements Serializable {
boolean typeMappingsOpen = false;
ClientCache clientCache = getClientCache(root);
+ List<Class<? extends ClientConnector>> newConnectorTypes = new ArrayList<Class<? extends ClientConnector>>();
+
for (Class<? extends ClientConnector> class1 : usedClientConnectors) {
if (clientCache.cache(class1)) {
// client does not know the mapping key for this type, send
// mapping to client
+ newConnectorTypes.add(class1);
+
if (!typeMappingsOpen) {
typeMappingsOpen = true;
outWriter.print(", \"typeMappings\" : { ");
@@ -1142,6 +1179,58 @@ public abstract class AbstractCommunicationManager implements Serializable {
}
}
+ /*
+ * Ensure super classes come before sub classes to get script dependency
+ * order right. Sub class @JavaScript might assume that @JavaScript
+ * defined by super class is already loaded.
+ */
+ Collections.sort(newConnectorTypes, new Comparator<Class<?>>() {
+ @Override
+ public int compare(Class<?> o1, Class<?> o2) {
+ // TODO optimize using Class.isAssignableFrom?
+ return hierarchyDepth(o1) - hierarchyDepth(o2);
+ }
+
+ private int hierarchyDepth(Class<?> type) {
+ if (type == Object.class) {
+ return 0;
+ } else {
+ return hierarchyDepth(type.getSuperclass()) + 1;
+ }
+ }
+ });
+
+ List<String> scriptDependencies = new ArrayList<String>();
+ List<String> styleDependencies = new ArrayList<String>();
+
+ for (Class<? extends ClientConnector> class1 : newConnectorTypes) {
+ JavaScript jsAnnotation = class1.getAnnotation(JavaScript.class);
+ if (jsAnnotation != null) {
+ for (String resource : jsAnnotation.value()) {
+ scriptDependencies.add(registerResource(resource, class1));
+ }
+ }
+
+ StyleSheet styleAnnotation = class1.getAnnotation(StyleSheet.class);
+ if (styleAnnotation != null) {
+ for (String resource : styleAnnotation.value()) {
+ styleDependencies.add(registerResource(resource, class1));
+ }
+ }
+ }
+
+ // Include script dependencies in output if there are any
+ if (!scriptDependencies.isEmpty()) {
+ outWriter.print(", \"scriptDependencies\": "
+ + new JSONArray(scriptDependencies).toString());
+ }
+
+ // Include style dependencies in output if there are any
+ if (!styleDependencies.isEmpty()) {
+ outWriter.print(", \"styleDependencies\": "
+ + new JSONArray(styleDependencies).toString());
+ }
+
// add any pending locale definitions requested by the client
printLocaleDeclarations(outWriter);
@@ -1153,6 +1242,54 @@ public abstract class AbstractCommunicationManager implements Serializable {
}
/**
+ * Resolves a resource URI, registering the URI with this
+ * {@code AbstractCommunicationManager} if needed and returns a fully
+ * qualified URI.
+ */
+ private String registerResource(String resourceUri, Class<?> context) {
+ try {
+ URI uri = new URI(resourceUri);
+ String protocol = uri.getScheme();
+
+ if ("connector".equals(protocol)) {
+ // Strip initial slash
+ String resourceName = uri.getPath().substring(1);
+ return registerConnectorResource(resourceName, context);
+ }
+
+ if (protocol != null || uri.getHost() != null) {
+ return resourceUri;
+ }
+
+ // Bare path interpreted as connector resource
+ return registerConnectorResource(resourceUri, context);
+ } catch (URISyntaxException e) {
+ getLogger().log(Level.WARNING,
+ "Could not parse resource url " + resourceUri, e);
+ return resourceUri;
+ }
+ }
+
+ private String registerConnectorResource(String name, Class<?> context) {
+ synchronized (connectorResourceContexts) {
+ // Add to map of names accepted by serveConnectorResource
+ if (connectorResourceContexts.containsKey(name)) {
+ Class<?> oldContext = connectorResourceContexts.get(name);
+ if (oldContext != context) {
+ getLogger().warning(
+ "Resource " + name + " defined by both " + context
+ + " and " + oldContext + ". Resource from "
+ + oldContext + " will be used.");
+ }
+ } else {
+ connectorResourceContexts.put(name, context);
+ }
+ }
+
+ return ApplicationConnection.CONNECTOR_PROTOCOL_PREFIX + "/" + name;
+ }
+
+ /**
* Adds the performance timing data (used by TestBench 3) to the UIDL
* response.
*/
@@ -1194,6 +1331,7 @@ public abstract class AbstractCommunicationManager implements Serializable {
// before children start calling e.g. updateCaption
Collections.sort(paintables, new Comparator<Component>() {
+ @Override
public int compare(Component c1, Component c2) {
int depth1 = 0;
while (c1.getParent() != null) {
@@ -1280,14 +1418,17 @@ public abstract class AbstractCommunicationManager implements Serializable {
private static class NullIterator<E> implements Iterator<E> {
+ @Override
public boolean hasNext() {
return false;
}
+ @Override
public E next() {
return null;
}
+ @Override
public void remove() {
}
@@ -1380,7 +1521,7 @@ public abstract class AbstractCommunicationManager implements Serializable {
private boolean handleVariables(WrappedRequest request,
WrappedResponse response, Callback callback,
Application application2, Root root) throws IOException,
- InvalidUIDLSecurityKeyException {
+ InvalidUIDLSecurityKeyException, JSONException {
boolean success = true;
String changes = getRequestPayload(request);
@@ -1761,6 +1902,7 @@ public abstract class AbstractCommunicationManager implements Serializable {
this.throwable = throwable;
}
+ @Override
public Throwable getThrowable() {
return throwable;
}
@@ -2162,10 +2304,57 @@ public abstract class AbstractCommunicationManager implements Serializable {
}
- abstract String getStreamVariableTargetUrl(Connector owner, String name,
- StreamVariable value);
+ public String getStreamVariableTargetUrl(ClientConnector owner,
+ String name, StreamVariable value) {
+ /*
+ * We will use the same APP/* URI space as ApplicationResources but
+ * prefix url with UPLOAD
+ *
+ * eg. APP/UPLOAD/[ROOTID]/[PID]/[NAME]/[SECKEY]
+ *
+ * SECKEY is created on each paint to make URL's unpredictable (to
+ * prevent CSRF attacks).
+ *
+ * NAME and PID from URI forms a key to fetch StreamVariable when
+ * handling post
+ */
+ String paintableId = owner.getConnectorId();
+ int rootId = owner.getRoot().getRootId();
+ String key = rootId + "/" + paintableId + "/" + name;
+
+ if (pidToNameToStreamVariable == null) {
+ pidToNameToStreamVariable = new HashMap<String, Map<String, StreamVariable>>();
+ }
+ Map<String, StreamVariable> nameToStreamVariable = pidToNameToStreamVariable
+ .get(paintableId);
+ if (nameToStreamVariable == null) {
+ nameToStreamVariable = new HashMap<String, StreamVariable>();
+ pidToNameToStreamVariable.put(paintableId, nameToStreamVariable);
+ }
+ nameToStreamVariable.put(name, value);
+
+ if (streamVariableToSeckey == null) {
+ streamVariableToSeckey = new HashMap<StreamVariable, String>();
+ }
+ String seckey = streamVariableToSeckey.get(value);
+ if (seckey == null) {
+ seckey = UUID.randomUUID().toString();
+ streamVariableToSeckey.put(value, seckey);
+ }
+
+ return ApplicationConnection.APP_PROTOCOL_PREFIX
+ + ServletPortletHelper.UPLOAD_URL_PREFIX + key + "/" + seckey;
+
+ }
- abstract protected void cleanStreamVariable(Connector owner, String name);
+ public void cleanStreamVariable(ClientConnector owner, String name) {
+ Map<String, StreamVariable> nameToStreamVar = pidToNameToStreamVariable
+ .get(owner.getConnectorId());
+ nameToStreamVar.remove(name);
+ if (nameToStreamVar.isEmpty()) {
+ pidToNameToStreamVariable.remove(owner.getConnectorId());
+ }
+ }
/**
* Gets the bootstrap handler that should be used for generating the pages
@@ -2256,9 +2445,11 @@ public abstract class AbstractCommunicationManager implements Serializable {
* @return a string with the initial UIDL message
* @throws PaintException
* if an exception occurs while painting
+ * @throws JSONException
+ * if an exception occurs while encoding output
*/
protected String getInitialUIDL(WrappedRequest request, Root root)
- throws PaintException {
+ throws PaintException, JSONException {
// TODO maybe unify writeUidlResponse()?
StringWriter sWriter = new StringWriter();
PrintWriter pWriter = new PrintWriter(sWriter);
@@ -2274,6 +2465,176 @@ public abstract class AbstractCommunicationManager implements Serializable {
}
/**
+ * Serve a connector resource from the classpath if the resource has
+ * previously been registered by calling
+ * {@link #registerResource(String, Class)}. Sending arbitrary files from
+ * the classpath is prevented by only accepting resource names that have
+ * explicitly been registered. Resources can currently only be registered by
+ * including a {@link JavaScript} or {@link StyleSheet} annotation on a
+ * Connector class.
+ *
+ * @param request
+ * @param response
+ *
+ * @throws IOException
+ */
+ public void serveConnectorResource(WrappedRequest request,
+ WrappedResponse response) throws IOException {
+
+ String pathInfo = request.getRequestPathInfo();
+ // + 2 to also remove beginning and ending slashes
+ String resourceName = pathInfo
+ .substring(ApplicationConnection.CONNECTOR_RESOURCE_PREFIX
+ .length() + 2);
+
+ final String mimetype = response.getDeploymentConfiguration()
+ .getMimeType(resourceName);
+
+ // Security check: avoid accidentally serving from the root of the
+ // classpath instead of relative to the context class
+ if (resourceName.startsWith("/")) {
+ getLogger().warning(
+ "Connector resource request starting with / rejected: "
+ + resourceName);
+ response.sendError(HttpServletResponse.SC_NOT_FOUND, resourceName);
+ return;
+ }
+
+ // Check that the resource name has been registered
+ Class<?> context;
+ synchronized (connectorResourceContexts) {
+ context = connectorResourceContexts.get(resourceName);
+ }
+
+ // Security check: don't serve resource if the name hasn't been
+ // registered in the map
+ if (context == null) {
+ getLogger().warning(
+ "Connector resource request for unknown resource rejected: "
+ + resourceName);
+ response.sendError(HttpServletResponse.SC_NOT_FOUND, resourceName);
+ return;
+ }
+
+ // Resolve file relative to the location of the context class
+ InputStream in = context.getResourceAsStream(resourceName);
+ if (in == null) {
+ getLogger().warning(
+ resourceName + " defined by " + context.getName()
+ + " not found. Verify that the file "
+ + context.getPackage().getName().replace('.', '/')
+ + '/' + resourceName
+ + " is available on the classpath.");
+ response.sendError(HttpServletResponse.SC_NOT_FOUND, resourceName);
+ return;
+ }
+
+ // TODO Check and set cache headers
+
+ OutputStream out = null;
+ try {
+ if (mimetype != null) {
+ response.setContentType(mimetype);
+ }
+
+ out = response.getOutputStream();
+
+ final byte[] buffer = new byte[Constants.DEFAULT_BUFFER_SIZE];
+
+ int bytesRead = 0;
+ while ((bytesRead = in.read(buffer)) > 0) {
+ out.write(buffer, 0, bytesRead);
+ }
+ out.flush();
+ } finally {
+ try {
+ in.close();
+ } catch (Exception e) {
+ // Do nothing
+ }
+ if (out != null) {
+ try {
+ out.close();
+ } catch (Exception e) {
+ // Do nothing
+ }
+ }
+ }
+ }
+
+ /**
+ * Handles file upload request submitted via Upload component.
+ *
+ * @param root
+ * The root for this request
+ *
+ * @see #getStreamVariableTargetUrl(ReceiverOwner, String, StreamVariable)
+ *
+ * @param request
+ * @param response
+ * @throws IOException
+ * @throws InvalidUIDLSecurityKeyException
+ */
+ public void handleFileUpload(Application application,
+ WrappedRequest request, WrappedResponse response)
+ throws IOException, InvalidUIDLSecurityKeyException {
+
+ /*
+ * URI pattern: APP/UPLOAD/[ROOTID]/[PID]/[NAME]/[SECKEY] See
+ * #createReceiverUrl
+ */
+
+ String pathInfo = request.getRequestPathInfo();
+ // strip away part until the data we are interested starts
+ int startOfData = pathInfo
+ .indexOf(ServletPortletHelper.UPLOAD_URL_PREFIX)
+ + ServletPortletHelper.UPLOAD_URL_PREFIX.length();
+ String uppUri = pathInfo.substring(startOfData);
+ String[] parts = uppUri.split("/", 4); // 0= rootid, 1 = cid, 2= name, 3
+ // = sec key
+ String rootId = parts[0];
+ String connectorId = parts[1];
+ String variableName = parts[2];
+ Root root = application.getRootById(Integer.parseInt(rootId));
+ Root.setCurrent(root);
+
+ StreamVariable streamVariable = getStreamVariable(connectorId,
+ variableName);
+ String secKey = streamVariableToSeckey.get(streamVariable);
+ if (secKey.equals(parts[3])) {
+
+ ClientConnector source = getConnector(root, connectorId);
+ String contentType = request.getContentType();
+ if (contentType.contains("boundary")) {
+ // Multipart requests contain boundary string
+ doHandleSimpleMultipartFileUpload(request, response,
+ streamVariable, variableName, source,
+ contentType.split("boundary=")[1]);
+ } else {
+ // if boundary string does not exist, the posted file is from
+ // XHR2.post(File)
+ doHandleXhrFilePost(request, response, streamVariable,
+ variableName, source, request.getContentLength());
+ }
+ } else {
+ throw new InvalidUIDLSecurityKeyException(
+ "Security key in upload post did not match!");
+ }
+
+ }
+
+ public StreamVariable getStreamVariable(String connectorId,
+ String variableName) {
+ Map<String, StreamVariable> map = pidToNameToStreamVariable
+ .get(connectorId);
+ if (map == null) {
+ return null;
+ }
+ StreamVariable streamVariable = map.get(variableName);
+ return streamVariable;
+ }
+
+ /**
* Stream that extracts content from another stream until the boundary
* string is encountered.
*
diff --git a/src/com/vaadin/terminal/gwt/server/AbstractDeploymentConfiguration.java b/src/com/vaadin/terminal/gwt/server/AbstractDeploymentConfiguration.java
new file mode 100644
index 0000000000..1ac090ad76
--- /dev/null
+++ b/src/com/vaadin/terminal/gwt/server/AbstractDeploymentConfiguration.java
@@ -0,0 +1,121 @@
+/*
+@VaadinApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.terminal.gwt.server;
+
+import java.lang.reflect.Constructor;
+import java.util.Properties;
+
+import com.vaadin.terminal.DeploymentConfiguration;
+
+public abstract class AbstractDeploymentConfiguration implements
+ DeploymentConfiguration {
+
+ private final Class<?> systemPropertyBaseClass;
+ private final Properties applicationProperties = new Properties();
+
+ public AbstractDeploymentConfiguration(Class<?> systemPropertyBaseClass) {
+ this.systemPropertyBaseClass = systemPropertyBaseClass;
+ }
+
+ @Override
+ public String getApplicationOrSystemProperty(String propertyName,
+ String defaultValue) {
+
+ String val = null;
+
+ // Try application properties
+ val = getApplicationProperty(propertyName);
+ if (val != null) {
+ return val;
+ }
+
+ // Try system properties
+ val = getSystemProperty(propertyName);
+ if (val != null) {
+ return val;
+ }
+
+ return defaultValue;
+ }
+
+ /**
+ * Gets an system property value.
+ *
+ * @param parameterName
+ * the Name or the parameter.
+ * @return String value or null if not found
+ */
+ protected String getSystemProperty(String parameterName) {
+ String val = null;
+
+ String pkgName;
+ final Package pkg = systemPropertyBaseClass.getPackage();
+ if (pkg != null) {
+ pkgName = pkg.getName();
+ } else {
+ final String className = systemPropertyBaseClass.getName();
+ pkgName = new String(className.toCharArray(), 0,
+ className.lastIndexOf('.'));
+ }
+ val = System.getProperty(pkgName + "." + parameterName);
+ if (val != null) {
+ return val;
+ }
+
+ // Try lowercased system properties
+ val = System.getProperty(pkgName + "." + parameterName.toLowerCase());
+ return val;
+ }
+
+ @Override
+ public ClassLoader getClassLoader() {
+ final String classLoaderName = getApplicationOrSystemProperty(
+ "ClassLoader", null);
+ ClassLoader classLoader;
+ if (classLoaderName == null) {
+ classLoader = getClass().getClassLoader();
+ } else {
+ try {
+ final Class<?> classLoaderClass = getClass().getClassLoader()
+ .loadClass(classLoaderName);
+ final Constructor<?> c = classLoaderClass
+ .getConstructor(new Class[] { ClassLoader.class });
+ classLoader = (ClassLoader) c
+ .newInstance(new Object[] { getClass().getClassLoader() });
+ } catch (final Exception e) {
+ throw new RuntimeException(
+ "Could not find specified class loader: "
+ + classLoaderName, e);
+ }
+ }
+ return classLoader;
+ }
+
+ /**
+ * Gets an application property value.
+ *
+ * @param parameterName
+ * the Name or the parameter.
+ * @return String value or null if not found
+ */
+ protected String getApplicationProperty(String parameterName) {
+
+ String val = applicationProperties.getProperty(parameterName);
+ if (val != null) {
+ return val;
+ }
+
+ // Try lower case application properties for backward compatibility with
+ // 3.0.2 and earlier
+ val = applicationProperties.getProperty(parameterName.toLowerCase());
+
+ return val;
+ }
+
+ @Override
+ public Properties getInitParameters() {
+ return applicationProperties;
+ }
+}
diff --git a/src/com/vaadin/terminal/gwt/server/AbstractStreamingEvent.java b/src/com/vaadin/terminal/gwt/server/AbstractStreamingEvent.java
index 43b175cc36..d3474e736e 100644
--- a/src/com/vaadin/terminal/gwt/server/AbstractStreamingEvent.java
+++ b/src/com/vaadin/terminal/gwt/server/AbstractStreamingEvent.java
@@ -15,10 +15,12 @@ abstract class AbstractStreamingEvent implements StreamingEvent {
private final long contentLength;
private final long bytesReceived;
+ @Override
public final String getFileName() {
return filename;
}
+ @Override
public final String getMimeType() {
return type;
}
@@ -31,10 +33,12 @@ abstract class AbstractStreamingEvent implements StreamingEvent {
this.bytesReceived = bytesReceived;
}
+ @Override
public final long getContentLength() {
return contentLength;
}
+ @Override
public final long getBytesReceived() {
return bytesReceived;
}
diff --git a/src/com/vaadin/terminal/gwt/server/AbstractWebApplicationContext.java b/src/com/vaadin/terminal/gwt/server/AbstractWebApplicationContext.java
index bf4ea860a8..3a33621d10 100644
--- a/src/com/vaadin/terminal/gwt/server/AbstractWebApplicationContext.java
+++ b/src/com/vaadin/terminal/gwt/server/AbstractWebApplicationContext.java
@@ -24,6 +24,7 @@ import javax.servlet.http.HttpSessionBindingListener;
import com.vaadin.Application;
import com.vaadin.service.ApplicationContext;
import com.vaadin.terminal.ApplicationResource;
+import com.vaadin.terminal.gwt.client.ApplicationConnection;
/**
* Base class for web application contexts (including portlet contexts) that
@@ -45,12 +46,14 @@ public abstract class AbstractWebApplicationContext implements
private long lastRequestTime = -1;
+ @Override
public void addTransactionListener(TransactionListener listener) {
if (listener != null) {
listeners.add(listener);
}
}
+ @Override
public void removeTransactionListener(TransactionListener listener) {
listeners.remove(listener);
}
@@ -119,6 +122,7 @@ public abstract class AbstractWebApplicationContext implements
/**
* @see javax.servlet.http.HttpSessionBindingListener#valueBound(HttpSessionBindingEvent)
*/
+ @Override
public void valueBound(HttpSessionBindingEvent arg0) {
// We are not interested in bindings
}
@@ -126,6 +130,7 @@ public abstract class AbstractWebApplicationContext implements
/**
* @see javax.servlet.http.HttpSessionBindingListener#valueUnbound(HttpSessionBindingEvent)
*/
+ @Override
public void valueUnbound(HttpSessionBindingEvent event) {
// If we are going to be unbound from the session, the session must be
// closing
@@ -160,6 +165,7 @@ public abstract class AbstractWebApplicationContext implements
return browser;
}
+ @Override
public Collection<Application> getApplications() {
return Collections.unmodifiableCollection(applications);
}
@@ -169,12 +175,14 @@ public abstract class AbstractWebApplicationContext implements
applicationToAjaxAppMgrMap.remove(application);
}
+ @Override
public String generateApplicationResourceURL(ApplicationResource resource,
String mapKey) {
final String filename = resource.getFilename();
if (filename == null) {
- return "app://APP/" + mapKey + "/";
+ return ApplicationConnection.APP_PROTOCOL_PREFIX
+ + ApplicationConnection.APP_REQUEST_PATH + mapKey + "/";
} else {
// #7738 At least Tomcat and JBoss refuses requests containing
// encoded slashes or backslashes in URLs. Application resource URLs
@@ -182,7 +190,9 @@ public abstract class AbstractWebApplicationContext implements
// in the future.
String encodedFileName = urlEncode(filename).replace("%2F", "/")
.replace("%5C", "\\");
- return "app://APP/" + mapKey + "/" + encodedFileName;
+ return ApplicationConnection.APP_PROTOCOL_PREFIX
+ + ApplicationConnection.APP_REQUEST_PATH + mapKey + "/"
+ + encodedFileName;
}
}
@@ -197,6 +207,7 @@ public abstract class AbstractWebApplicationContext implements
}
}
+ @Override
public boolean isApplicationResourceURL(URL context, String relativeUri) {
// If the relative uri is null, we are ready
if (relativeUri == null) {
@@ -214,6 +225,7 @@ public abstract class AbstractWebApplicationContext implements
return (prefix.equals("APP"));
}
+ @Override
public String getURLKey(URL context, String relativeUri) {
final int index = relativeUri.indexOf('/');
final int next = relativeUri.indexOf('/', index + 1);
diff --git a/src/com/vaadin/terminal/gwt/server/ApplicationPortlet2.java b/src/com/vaadin/terminal/gwt/server/ApplicationPortlet2.java
index 7a46a07e6c..788c48267e 100644
--- a/src/com/vaadin/terminal/gwt/server/ApplicationPortlet2.java
+++ b/src/com/vaadin/terminal/gwt/server/ApplicationPortlet2.java
@@ -23,10 +23,8 @@ public class ApplicationPortlet2 extends AbstractApplicationPortlet {
public void init(PortletConfig config) throws PortletException {
super.init(config);
try {
- applicationClass = ServletPortletHelper.getApplicationClass(
- config.getInitParameter("application"),
- config.getInitParameter(Application.ROOT_PARAMETER),
- getClassLoader());
+ applicationClass = ServletPortletHelper
+ .getApplicationClass(getDeploymentConfiguration());
} catch (ApplicationClassException e) {
throw new PortletException(e);
}
diff --git a/src/com/vaadin/terminal/gwt/server/ApplicationResourceHandler.java b/src/com/vaadin/terminal/gwt/server/ApplicationResourceHandler.java
index 7cf66d5fcf..42726c933e 100644
--- a/src/com/vaadin/terminal/gwt/server/ApplicationResourceHandler.java
+++ b/src/com/vaadin/terminal/gwt/server/ApplicationResourceHandler.java
@@ -21,6 +21,7 @@ public class ApplicationResourceHandler implements RequestHandler {
private static final Pattern APP_RESOURCE_PATTERN = Pattern
.compile("^/?APP/(\\d+)/.*");
+ @Override
public boolean handleRequest(Application application,
WrappedRequest request, WrappedResponse response)
throws IOException {
diff --git a/src/com/vaadin/terminal/gwt/server/ApplicationServlet.java b/src/com/vaadin/terminal/gwt/server/ApplicationServlet.java
index 2c4d38ef24..1af49e0da0 100644
--- a/src/com/vaadin/terminal/gwt/server/ApplicationServlet.java
+++ b/src/com/vaadin/terminal/gwt/server/ApplicationServlet.java
@@ -41,14 +41,12 @@ public class ApplicationServlet extends AbstractApplicationServlet {
throws javax.servlet.ServletException {
super.init(servletConfig);
- // Loads the application class using the same class loader
- // as the servlet itself
+ // Loads the application class using the classloader defined in the
+ // deployment configuration
try {
- applicationClass = ServletPortletHelper.getApplicationClass(
- servletConfig.getInitParameter("application"),
- servletConfig.getInitParameter(Application.ROOT_PARAMETER),
- getClassLoader());
+ applicationClass = ServletPortletHelper
+ .getApplicationClass(getDeploymentConfiguration());
} catch (ApplicationClassException e) {
throw new ServletException(e);
}
diff --git a/src/com/vaadin/terminal/gwt/server/BootstrapHandler.java b/src/com/vaadin/terminal/gwt/server/BootstrapHandler.java
index 69f033c8cd..4038b8f1bc 100644
--- a/src/com/vaadin/terminal/gwt/server/BootstrapHandler.java
+++ b/src/com/vaadin/terminal/gwt/server/BootstrapHandler.java
@@ -9,10 +9,6 @@ import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Serializable;
import java.io.Writer;
-import java.lang.annotation.Annotation;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
@@ -20,7 +16,6 @@ import javax.servlet.http.HttpServletResponse;
import com.vaadin.Application;
import com.vaadin.RootRequiresMoreInformationException;
import com.vaadin.Version;
-import com.vaadin.annotations.LoadScripts;
import com.vaadin.external.json.JSONException;
import com.vaadin.external.json.JSONObject;
import com.vaadin.terminal.DeploymentConfiguration;
@@ -118,6 +113,7 @@ public abstract class BootstrapHandler implements RequestHandler {
}
+ @Override
public boolean handleRequest(Application application,
WrappedRequest request, WrappedResponse response)
throws IOException {
@@ -490,50 +486,6 @@ public abstract class BootstrapHandler implements RequestHandler {
page.write("<title>"
+ AbstractApplicationServlet.safeEscapeForHtml(title)
+ "</title>\n");
-
- if (root != null) {
- List<LoadScripts> loadScriptsAnnotations = getAnnotationsFor(
- root.getClass(), LoadScripts.class);
- Collections.reverse(loadScriptsAnnotations);
- // Begin from the end as a class might requests scripts that depend
- // on script loaded by a super class
- for (int i = loadScriptsAnnotations.size() - 1; i >= 0; i--) {
- LoadScripts loadScripts = loadScriptsAnnotations.get(i);
- String[] value = loadScripts.value();
- if (value != null) {
- for (String script : value) {
- page.write("<script type='text/javascript' src='");
- page.write(script);
- page.write("'></script>\n");
- }
- }
- }
-
- }
- }
-
- private static <T extends Annotation> List<T> getAnnotationsFor(
- Class<?> type, Class<T> annotationType) {
- List<T> list = new ArrayList<T>();
- // Find from the class hierarchy
- Class<?> currentType = type;
- while (currentType != Object.class) {
- T annotation = currentType.getAnnotation(annotationType);
- if (annotation != null) {
- list.add(annotation);
- }
- currentType = currentType.getSuperclass();
- }
-
- // Find from an implemented interface
- for (Class<?> iface : type.getInterfaces()) {
- T annotation = iface.getAnnotation(annotationType);
- if (annotation != null) {
- list.add(annotation);
- }
- }
-
- return list;
}
/**
@@ -645,8 +597,10 @@ public abstract class BootstrapHandler implements RequestHandler {
* @return a string with the initial UIDL message
* @throws PaintException
* if an exception occurs while painting the components
+ * @throws JSONException
+ * if an exception occurs while formatting the output
*/
protected abstract String getInitialUIDL(WrappedRequest request, Root root)
- throws PaintException;
+ throws PaintException, JSONException;
}
diff --git a/src/com/vaadin/terminal/gwt/server/ChangeVariablesErrorEvent.java b/src/com/vaadin/terminal/gwt/server/ChangeVariablesErrorEvent.java
index b6576dce9f..8f0c80332f 100644
--- a/src/com/vaadin/terminal/gwt/server/ChangeVariablesErrorEvent.java
+++ b/src/com/vaadin/terminal/gwt/server/ChangeVariablesErrorEvent.java
@@ -23,6 +23,7 @@ public class ChangeVariablesErrorEvent implements ComponentErrorEvent {
this.variableChanges = variableChanges;
}
+ @Override
public Throwable getThrowable() {
return throwable;
}
diff --git a/src/com/vaadin/terminal/gwt/server/ClientConnector.java b/src/com/vaadin/terminal/gwt/server/ClientConnector.java
index dfdd58879d..4f74cfe4bb 100644
--- a/src/com/vaadin/terminal/gwt/server/ClientConnector.java
+++ b/src/com/vaadin/terminal/gwt/server/ClientConnector.java
@@ -6,12 +6,13 @@ package com.vaadin.terminal.gwt.server;
import java.util.Collection;
import java.util.List;
+import com.vaadin.shared.Connector;
+import com.vaadin.shared.communication.SharedState;
import com.vaadin.terminal.AbstractClientConnector;
import com.vaadin.terminal.Extension;
-import com.vaadin.terminal.gwt.client.Connector;
-import com.vaadin.terminal.gwt.client.communication.SharedState;
import com.vaadin.ui.Component;
import com.vaadin.ui.ComponentContainer;
+import com.vaadin.ui.Root;
/**
* Interface implemented by all connectors that are capable of communicating
@@ -47,6 +48,7 @@ public interface ClientConnector extends Connector, RpcTarget {
*/
public Class<? extends SharedState> getStateType();
+ @Override
public ClientConnector getParent();
/**
@@ -136,4 +138,12 @@ public interface ClientConnector extends Connector, RpcTarget {
* the extension to remove.
*/
public void removeExtension(Extension extension);
+
+ /**
+ * Returns the root this connector is attached to
+ *
+ * @return The Root this connector is attached to or null if it is not
+ * attached to any Root
+ */
+ public Root getRoot();
}
diff --git a/src/com/vaadin/terminal/gwt/server/ClientMethodInvocation.java b/src/com/vaadin/terminal/gwt/server/ClientMethodInvocation.java
index ad9484723b..64ea288665 100644
--- a/src/com/vaadin/terminal/gwt/server/ClientMethodInvocation.java
+++ b/src/com/vaadin/terminal/gwt/server/ClientMethodInvocation.java
@@ -61,6 +61,7 @@ public class ClientMethodInvocation implements Serializable,
return sequenceNumber;
}
+ @Override
public int compareTo(ClientMethodInvocation o) {
if (null == o) {
return 0;
diff --git a/src/com/vaadin/terminal/gwt/server/CommunicationManager.java b/src/com/vaadin/terminal/gwt/server/CommunicationManager.java
index cc2981dc45..3cc3a8cb64 100644
--- a/src/com/vaadin/terminal/gwt/server/CommunicationManager.java
+++ b/src/com/vaadin/terminal/gwt/server/CommunicationManager.java
@@ -4,22 +4,15 @@
package com.vaadin.terminal.gwt.server;
-import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.UUID;
import javax.servlet.ServletContext;
import com.vaadin.Application;
+import com.vaadin.external.json.JSONException;
import com.vaadin.terminal.PaintException;
-import com.vaadin.terminal.StreamVariable;
import com.vaadin.terminal.WrappedRequest;
-import com.vaadin.terminal.WrappedResponse;
-import com.vaadin.terminal.gwt.client.Connector;
import com.vaadin.ui.Root;
/**
@@ -58,142 +51,6 @@ public class CommunicationManager extends AbstractCommunicationManager {
super(application);
}
- /**
- * Handles file upload request submitted via Upload component.
- *
- * @param root
- * The root for this request
- *
- * @see #getStreamVariableTargetUrl(ReceiverOwner, String, StreamVariable)
- *
- * @param request
- * @param response
- * @throws IOException
- * @throws InvalidUIDLSecurityKeyException
- */
- public void handleFileUpload(Root root, WrappedRequest request,
- WrappedResponse response) throws IOException,
- InvalidUIDLSecurityKeyException {
-
- /*
- * URI pattern: APP/UPLOAD/[PID]/[NAME]/[SECKEY] See #createReceiverUrl
- */
-
- String pathInfo = request.getRequestPathInfo();
- // strip away part until the data we are interested starts
- int startOfData = pathInfo
- .indexOf(AbstractApplicationServlet.UPLOAD_URL_PREFIX)
- + AbstractApplicationServlet.UPLOAD_URL_PREFIX.length();
- String uppUri = pathInfo.substring(startOfData);
- String[] parts = uppUri.split("/", 3); // 0 = pid, 1= name, 2 = sec key
- String variableName = parts[1];
- String connectorId = parts[0];
-
- StreamVariable streamVariable = pidToNameToStreamVariable.get(
- connectorId).get(variableName);
- String secKey = streamVariableToSeckey.get(streamVariable);
- if (secKey.equals(parts[2])) {
-
- Connector source = getConnector(root, connectorId);
- String contentType = request.getContentType();
- if (contentType.contains("boundary")) {
- // Multipart requests contain boundary string
- doHandleSimpleMultipartFileUpload(request, response,
- streamVariable, variableName, source,
- contentType.split("boundary=")[1]);
- } else {
- // if boundary string does not exist, the posted file is from
- // XHR2.post(File)
- doHandleXhrFilePost(request, response, streamVariable,
- variableName, source, request.getContentLength());
- }
- } else {
- throw new InvalidUIDLSecurityKeyException(
- "Security key in upload post did not match!");
- }
-
- }
-
- @Override
- protected void postPaint(Root root) {
- super.postPaint(root);
-
- if (pidToNameToStreamVariable != null) {
- Iterator<String> iterator = pidToNameToStreamVariable.keySet()
- .iterator();
- while (iterator.hasNext()) {
- String connectorId = iterator.next();
- if (root.getConnectorTracker().getConnector(connectorId) == null) {
- // Owner is no longer attached to the application
- Map<String, StreamVariable> removed = pidToNameToStreamVariable
- .get(connectorId);
- for (String key : removed.keySet()) {
- streamVariableToSeckey.remove(removed.get(key));
- }
- iterator.remove();
- }
- }
- }
-
- }
-
- private Map<String, Map<String, StreamVariable>> pidToNameToStreamVariable;
-
- private Map<StreamVariable, String> streamVariableToSeckey;
-
- @Override
- String getStreamVariableTargetUrl(Connector owner, String name,
- StreamVariable value) {
- /*
- * We will use the same APP/* URI space as ApplicationResources but
- * prefix url with UPLOAD
- *
- * eg. APP/UPLOAD/[PID]/[NAME]/[SECKEY]
- *
- * SECKEY is created on each paint to make URL's unpredictable (to
- * prevent CSRF attacks).
- *
- * NAME and PID from URI forms a key to fetch StreamVariable when
- * handling post
- */
- String paintableId = owner.getConnectorId();
- String key = paintableId + "/" + name;
-
- if (pidToNameToStreamVariable == null) {
- pidToNameToStreamVariable = new HashMap<String, Map<String, StreamVariable>>();
- }
- Map<String, StreamVariable> nameToStreamVariable = pidToNameToStreamVariable
- .get(paintableId);
- if (nameToStreamVariable == null) {
- nameToStreamVariable = new HashMap<String, StreamVariable>();
- pidToNameToStreamVariable.put(paintableId, nameToStreamVariable);
- }
- nameToStreamVariable.put(name, value);
-
- if (streamVariableToSeckey == null) {
- streamVariableToSeckey = new HashMap<StreamVariable, String>();
- }
- String seckey = streamVariableToSeckey.get(value);
- if (seckey == null) {
- seckey = UUID.randomUUID().toString();
- streamVariableToSeckey.put(value, seckey);
- }
-
- return "app://" + AbstractApplicationServlet.UPLOAD_URL_PREFIX + key
- + "/" + seckey;
-
- }
-
- @Override
- protected void cleanStreamVariable(Connector owner, String name) {
- Map<String, StreamVariable> nameToStreamVar = pidToNameToStreamVariable
- .get(owner.getConnectorId());
- nameToStreamVar.remove("name");
- if (nameToStreamVar.isEmpty()) {
- pidToNameToStreamVariable.remove(owner.getConnectorId());
- }
- }
-
@Override
protected BootstrapHandler createBootstrapHandler() {
return new BootstrapHandler() {
@@ -245,7 +102,7 @@ public class CommunicationManager extends AbstractCommunicationManager {
@Override
protected String getInitialUIDL(WrappedRequest request, Root root)
- throws PaintException {
+ throws PaintException, JSONException {
return CommunicationManager.this.getInitialUIDL(request, root);
}
};
diff --git a/src/com/vaadin/terminal/gwt/server/Constants.java b/src/com/vaadin/terminal/gwt/server/Constants.java
index 9e6b2c775b..7efb0205ac 100644
--- a/src/com/vaadin/terminal/gwt/server/Constants.java
+++ b/src/com/vaadin/terminal/gwt/server/Constants.java
@@ -54,8 +54,6 @@ public interface Constants {
static final int MAX_BUFFER_SIZE = 64 * 1024;
- static final String AJAX_UIDL_URI = "/UIDL";
-
final String THEME_DIRECTORY_PATH = "VAADIN/themes/";
static final int DEFAULT_THEME_CACHETIME = 1000 * 60 * 60 * 24;
diff --git a/src/com/vaadin/terminal/gwt/server/DragAndDropService.java b/src/com/vaadin/terminal/gwt/server/DragAndDropService.java
index 0e8d1c0152..efb5666efa 100644
--- a/src/com/vaadin/terminal/gwt/server/DragAndDropService.java
+++ b/src/com/vaadin/terminal/gwt/server/DragAndDropService.java
@@ -19,13 +19,14 @@ import com.vaadin.event.dd.DropTarget;
import com.vaadin.event.dd.TargetDetails;
import com.vaadin.event.dd.TargetDetailsImpl;
import com.vaadin.event.dd.acceptcriteria.AcceptCriterion;
+import com.vaadin.shared.communication.SharedState;
+import com.vaadin.shared.ui.dd.DragEventType;
import com.vaadin.terminal.Extension;
import com.vaadin.terminal.PaintException;
import com.vaadin.terminal.VariableOwner;
-import com.vaadin.terminal.gwt.client.communication.SharedState;
import com.vaadin.terminal.gwt.client.ui.dd.VDragAndDropManager;
-import com.vaadin.terminal.gwt.client.ui.dd.VDragAndDropManager.DragEventType;
import com.vaadin.ui.Component;
+import com.vaadin.ui.Root;
public class DragAndDropService implements VariableOwner, ClientConnector {
@@ -43,6 +44,7 @@ public class DragAndDropService implements VariableOwner, ClientConnector {
this.manager = manager;
}
+ @Override
public void changeVariables(Object source, Map<String, Object> variables) {
Object owner = variables.get("dhowner");
@@ -181,10 +183,12 @@ public class DragAndDropService implements VariableOwner, ClientConnector {
return transferable;
}
+ @Override
public boolean isEnabled() {
return isConnectorEnabled();
}
+ @Override
public boolean isImmediate() {
return true;
}
@@ -218,68 +222,82 @@ public class DragAndDropService implements VariableOwner, ClientConnector {
return false;
}
+ @Override
public SharedState getState() {
// TODO Auto-generated method stub
return null;
}
+ @Override
public String getConnectorId() {
return VDragAndDropManager.DD_SERVICE;
}
+ @Override
public boolean isConnectorEnabled() {
// Drag'n'drop can't be disabled
return true;
}
+ @Override
public List<ClientMethodInvocation> retrievePendingRpcCalls() {
return null;
}
+ @Override
public RpcManager getRpcManager(Class<?> rpcInterface) {
// TODO Use rpc for drag'n'drop
return null;
}
+ @Override
public Class<? extends SharedState> getStateType() {
return SharedState.class;
}
+ @Override
public void requestRepaint() {
// TODO Auto-generated method stub
}
+ @Override
public ClientConnector getParent() {
// TODO Auto-generated method stub
return null;
}
+ @Override
public void requestRepaintAll() {
// TODO Auto-generated method stub
}
+ @Override
public void setParent(ClientConnector parent) {
// TODO Auto-generated method stub
}
+ @Override
public void attach() {
// TODO Auto-generated method stub
}
+ @Override
public void detach() {
// TODO Auto-generated method stub
}
+ @Override
public Collection<Extension> getExtensions() {
// TODO Auto-generated method stub
return Collections.emptySet();
}
+ @Override
public void removeExtension(Extension extension) {
// TODO Auto-generated method stub
}
@@ -287,4 +305,9 @@ public class DragAndDropService implements VariableOwner, ClientConnector {
private Logger getLogger() {
return Logger.getLogger(DragAndDropService.class.getName());
}
+
+ @Override
+ public Root getRoot() {
+ return null;
+ }
}
diff --git a/src/com/vaadin/terminal/gwt/server/GAEApplicationServlet.java b/src/com/vaadin/terminal/gwt/server/GAEApplicationServlet.java
index a6032fa98d..cc12c9cc43 100644
--- a/src/com/vaadin/terminal/gwt/server/GAEApplicationServlet.java
+++ b/src/com/vaadin/terminal/gwt/server/GAEApplicationServlet.java
@@ -121,8 +121,9 @@ public class GAEApplicationServlet extends ApplicationServlet {
// appengine session expires-parameter
private static final String PROPERTY_APPENGINE_EXPIRES = "_expires";
- protected void sendDeadlineExceededNotification(HttpServletRequest request,
- HttpServletResponse response) throws IOException {
+ protected void sendDeadlineExceededNotification(
+ WrappedHttpServletRequest request,
+ WrappedHttpServletResponse response) throws IOException {
criticalNotification(
request,
response,
@@ -131,8 +132,9 @@ public class GAEApplicationServlet extends ApplicationServlet {
"", null);
}
- protected void sendNotSerializableNotification(HttpServletRequest request,
- HttpServletResponse response) throws IOException {
+ protected void sendNotSerializableNotification(
+ WrappedHttpServletRequest request,
+ WrappedHttpServletResponse response) throws IOException {
criticalNotification(
request,
response,
@@ -142,8 +144,9 @@ public class GAEApplicationServlet extends ApplicationServlet {
+ "?restartApplication");
}
- protected void sendCriticalErrorNotification(HttpServletRequest request,
- HttpServletResponse response) throws IOException {
+ protected void sendCriticalErrorNotification(
+ WrappedHttpServletRequest request,
+ WrappedHttpServletResponse response) throws IOException {
criticalNotification(
request,
response,
@@ -154,8 +157,13 @@ public class GAEApplicationServlet extends ApplicationServlet {
}
@Override
- protected void service(HttpServletRequest request,
- HttpServletResponse response) throws ServletException, IOException {
+ protected void service(HttpServletRequest unwrappedRequest,
+ HttpServletResponse unwrappedResponse) throws ServletException,
+ IOException {
+ WrappedHttpServletRequest request = new WrappedHttpServletRequest(
+ unwrappedRequest, getDeploymentConfiguration());
+ WrappedHttpServletResponse response = new WrappedHttpServletResponse(
+ unwrappedResponse, getDeploymentConfiguration());
if (isCleanupRequest(request)) {
cleanDatastore();
diff --git a/src/com/vaadin/terminal/gwt/server/JsonCodec.java b/src/com/vaadin/terminal/gwt/server/JsonCodec.java
index d3a2ef56f8..8199bc6ada 100644
--- a/src/com/vaadin/terminal/gwt/server/JsonCodec.java
+++ b/src/com/vaadin/terminal/gwt/server/JsonCodec.java
@@ -9,10 +9,12 @@ import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.io.Serializable;
import java.lang.reflect.Array;
+import java.lang.reflect.GenericArrayType;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
+import java.lang.reflect.WildcardType;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -27,9 +29,9 @@ import java.util.Set;
import com.vaadin.external.json.JSONArray;
import com.vaadin.external.json.JSONException;
import com.vaadin.external.json.JSONObject;
-import com.vaadin.terminal.gwt.client.Connector;
+import com.vaadin.shared.Connector;
+import com.vaadin.shared.communication.UidlValue;
import com.vaadin.terminal.gwt.client.communication.JsonEncoder;
-import com.vaadin.terminal.gwt.client.communication.UidlValue;
import com.vaadin.ui.Component;
import com.vaadin.ui.ConnectorTracker;
@@ -100,8 +102,10 @@ public class JsonCodec implements Serializable {
private static Class<?> getClassForType(Type type) {
if (type instanceof ParameterizedType) {
return (Class<?>) (((ParameterizedType) type).getRawType());
- } else {
+ } else if (type instanceof Class<?>) {
return (Class<?>) type;
+ } else {
+ return null;
}
}
@@ -138,7 +142,13 @@ public class JsonCodec implements Serializable {
&& ((Class<?>) targetType).isArray()) {
// Legacy Object[] and String[] handled elsewhere, this takes care
// of generic arrays
- return decodeArray((Class<?>) targetType, (JSONArray) value,
+ Class<?> componentType = ((Class<?>) targetType).getComponentType();
+ return decodeArray(componentType, (JSONArray) value,
+ connectorTracker);
+ } else if (targetType instanceof GenericArrayType) {
+ Type componentType = ((GenericArrayType) targetType)
+ .getGenericComponentType();
+ return decodeArray(componentType, (JSONArray) value,
connectorTracker);
} else if (targetType == JSONObject.class
|| targetType == JSONArray.class) {
@@ -149,10 +159,10 @@ public class JsonCodec implements Serializable {
}
}
- private static Object decodeArray(Class<?> targetType, JSONArray value,
+ private static Object decodeArray(Type componentType, JSONArray value,
ConnectorTracker connectorTracker) throws JSONException {
- Class<?> componentType = targetType.getComponentType();
- Object array = Array.newInstance(componentType, value.length());
+ Class<?> componentClass = getClassForType(componentType);
+ Object array = Array.newInstance(componentClass, value.length());
for (int i = 0; i < value.length(); i++) {
Object decodedValue = decodeInternalOrCustomType(componentType,
value.get(i), connectorTracker);
@@ -513,6 +523,11 @@ public class JsonCodec implements Serializable {
throw new IllegalArgumentException("type must be defined");
}
+ if (valueType instanceof WildcardType) {
+ throw new IllegalStateException(
+ "Can not serialize type with wildcard: " + valueType);
+ }
+
if (null == value) {
return encodeNull();
}
@@ -540,7 +555,15 @@ public class JsonCodec implements Serializable {
return jsonArray;
} else if (valueType instanceof Class<?>
&& ((Class<?>) valueType).isArray()) {
- JSONArray jsonArray = encodeArrayContents(value, connectorTracker);
+ JSONArray jsonArray = encodeArrayContents(
+ ((Class<?>) valueType).getComponentType(), value,
+ connectorTracker);
+ return jsonArray;
+ } else if (valueType instanceof GenericArrayType) {
+ Type componentType = ((GenericArrayType) valueType)
+ .getGenericComponentType();
+ JSONArray jsonArray = encodeArrayContents(componentType, value,
+ connectorTracker);
return jsonArray;
} else if (value instanceof Map) {
Object jsonMap = encodeMap(valueType, (Map<?, ?>) value,
@@ -643,10 +666,10 @@ public class JsonCodec implements Serializable {
return e.name();
}
- private static JSONArray encodeArrayContents(Object array,
- ConnectorTracker connectorTracker) throws JSONException {
+ private static JSONArray encodeArrayContents(Type componentType,
+ Object array, ConnectorTracker connectorTracker)
+ throws JSONException {
JSONArray jsonArray = new JSONArray();
- Class<?> componentType = array.getClass().getComponentType();
for (int i = 0; i < Array.getLength(array); i++) {
jsonArray.put(encode(Array.get(array, i), null, componentType,
connectorTracker));
diff --git a/src/com/vaadin/terminal/gwt/server/JsonPaintTarget.java b/src/com/vaadin/terminal/gwt/server/JsonPaintTarget.java
index 70ab452e4e..5a830ddb63 100644
--- a/src/com/vaadin/terminal/gwt/server/JsonPaintTarget.java
+++ b/src/com/vaadin/terminal/gwt/server/JsonPaintTarget.java
@@ -15,16 +15,11 @@ import java.util.Stack;
import java.util.Vector;
import java.util.logging.Logger;
-import com.vaadin.Application;
-import com.vaadin.terminal.ApplicationResource;
-import com.vaadin.terminal.ExternalResource;
import com.vaadin.terminal.PaintException;
import com.vaadin.terminal.PaintTarget;
import com.vaadin.terminal.Resource;
import com.vaadin.terminal.StreamVariable;
-import com.vaadin.terminal.ThemeResource;
import com.vaadin.terminal.VariableOwner;
-import com.vaadin.terminal.gwt.client.Connector;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Component;
import com.vaadin.ui.CustomLayout;
@@ -104,6 +99,7 @@ public class JsonPaintTarget implements PaintTarget {
cacheEnabled = cachingRequired;
}
+ @Override
public void startTag(String tagName) throws PaintException {
startTag(tagName, false);
}
@@ -160,6 +156,7 @@ public class JsonPaintTarget implements PaintTarget {
* if the paint operation failed.
*/
+ @Override
public void endTag(String tagName) throws PaintException {
// In case of null data output nothing:
if (tagName == null) {
@@ -327,59 +324,46 @@ public class JsonPaintTarget implements PaintTarget {
*
*/
+ @Override
public void addText(String str) throws PaintException {
tag.addData("\"" + escapeJSON(str) + "\"");
}
+ @Override
public void addAttribute(String name, boolean value) throws PaintException {
tag.addAttribute("\"" + name + "\":" + (value ? "true" : "false"));
}
- @SuppressWarnings("deprecation")
+ @Override
public void addAttribute(String name, Resource value) throws PaintException {
-
- if (value instanceof ExternalResource) {
- addAttribute(name, ((ExternalResource) value).getURL());
-
- } else if (value instanceof ApplicationResource) {
- final ApplicationResource r = (ApplicationResource) value;
- final Application a = r.getApplication();
- if (a == null) {
- throw new PaintException(
- "Application not specified for resorce "
- + value.getClass().getName());
- }
- final String uri = a.getRelativeLocation(r);
- addAttribute(name, uri);
-
- } else if (value instanceof ThemeResource) {
- final String uri = "theme://"
- + ((ThemeResource) value).getResourceId();
- addAttribute(name, uri);
- } else {
- throw new PaintException("Ajax adapter does not "
- + "support resources of type: "
- + value.getClass().getName());
+ if (value == null) {
+ throw new NullPointerException();
}
-
+ ResourceReference reference = ResourceReference.create(value);
+ addAttribute(name, reference.getURL());
}
+ @Override
public void addAttribute(String name, int value) throws PaintException {
tag.addAttribute("\"" + name + "\":" + String.valueOf(value));
}
+ @Override
public void addAttribute(String name, long value) throws PaintException {
tag.addAttribute("\"" + name + "\":" + String.valueOf(value));
}
+ @Override
public void addAttribute(String name, float value) throws PaintException {
tag.addAttribute("\"" + name + "\":" + String.valueOf(value));
}
+ @Override
public void addAttribute(String name, double value) throws PaintException {
tag.addAttribute("\"" + name + "\":" + String.valueOf(value));
}
+ @Override
public void addAttribute(String name, String value) throws PaintException {
// In case of null data output nothing:
if ((value == null) || (name == null)) {
@@ -399,12 +383,14 @@ public class JsonPaintTarget implements PaintTarget {
}
+ @Override
public void addAttribute(String name, Component value)
throws PaintException {
final String id = value.getConnectorId();
addAttribute(name, id);
}
+ @Override
public void addAttribute(String name, Map<?, ?> value)
throws PaintException {
@@ -442,6 +428,7 @@ public class JsonPaintTarget implements PaintTarget {
tag.addAttribute(sb.toString());
}
+ @Override
public void addAttribute(String name, Object[] values) {
// In case of null data output nothing:
if ((values == null) || (name == null)) {
@@ -462,41 +449,49 @@ public class JsonPaintTarget implements PaintTarget {
tag.addAttribute(buf.toString());
}
+ @Override
public void addVariable(VariableOwner owner, String name, String value)
throws PaintException {
tag.addVariable(new StringVariable(owner, name, escapeJSON(value)));
}
+ @Override
public void addVariable(VariableOwner owner, String name, Component value)
throws PaintException {
tag.addVariable(new StringVariable(owner, name, value.getConnectorId()));
}
+ @Override
public void addVariable(VariableOwner owner, String name, int value)
throws PaintException {
tag.addVariable(new IntVariable(owner, name, value));
}
+ @Override
public void addVariable(VariableOwner owner, String name, long value)
throws PaintException {
tag.addVariable(new LongVariable(owner, name, value));
}
+ @Override
public void addVariable(VariableOwner owner, String name, float value)
throws PaintException {
tag.addVariable(new FloatVariable(owner, name, value));
}
+ @Override
public void addVariable(VariableOwner owner, String name, double value)
throws PaintException {
tag.addVariable(new DoubleVariable(owner, name, value));
}
+ @Override
public void addVariable(VariableOwner owner, String name, boolean value)
throws PaintException {
tag.addVariable(new BooleanVariable(owner, name, value));
}
+ @Override
public void addVariable(VariableOwner owner, String name, String[] value)
throws PaintException {
tag.addVariable(new ArrayVariable(owner, name, value));
@@ -516,6 +511,7 @@ public class JsonPaintTarget implements PaintTarget {
* if the paint operation failed.
*/
+ @Override
public void addUploadStreamVariable(VariableOwner owner, String name)
throws PaintException {
startTag("uploadstream");
@@ -536,6 +532,7 @@ public class JsonPaintTarget implements PaintTarget {
* if the paint operation failed.
*/
+ @Override
public void addSection(String sectionTagName, String sectionData)
throws PaintException {
tag.addData("{\"" + sectionTagName + "\":\"" + escapeJSON(sectionData)
@@ -551,6 +548,7 @@ public class JsonPaintTarget implements PaintTarget {
* if the paint operation failed.
*/
+ @Override
public void addUIDL(String xml) throws PaintException {
// Ensure that the target is open
@@ -585,6 +583,7 @@ public class JsonPaintTarget implements PaintTarget {
* String)
*/
+ @Override
public void addXMLSection(String sectionTagName, String sectionData,
String namespace) throws PaintException {
@@ -650,6 +649,7 @@ public class JsonPaintTarget implements PaintTarget {
* .Paintable, java.lang.String)
*/
+ @Override
public PaintStatus startPaintable(Component connector, String tagName)
throws PaintException {
boolean topLevelPaintable = openPaintables.isEmpty();
@@ -676,6 +676,7 @@ public class JsonPaintTarget implements PaintTarget {
return PaintStatus.PAINTING;
}
+ @Override
public void endPaintable(Component paintable) throws PaintException {
getLogger().fine(
"endPaintable for " + paintable.getClass().getName() + "@"
@@ -699,6 +700,7 @@ public class JsonPaintTarget implements PaintTarget {
* @see com.vaadin.terminal.PaintTarget#addCharacterData(java.lang.String )
*/
+ @Override
public void addCharacterData(String text) throws PaintException {
if (text != null) {
tag.addData(text);
@@ -968,6 +970,7 @@ public class JsonPaintTarget implements PaintTarget {
return usedResources;
}
+ @Override
@SuppressWarnings("unchecked")
public String getTag(ClientConnector clientConnector) {
Class<? extends ClientConnector> clientConnectorClass = clientConnector
@@ -990,10 +993,11 @@ public class JsonPaintTarget implements PaintTarget {
return usedClientConnectors;
}
+ @Override
public void addVariable(VariableOwner owner, String name,
StreamVariable value) throws PaintException {
- String url = manager.getStreamVariableTargetUrl((Connector) owner,
- name, value);
+ String url = manager.getStreamVariableTargetUrl(
+ (ClientConnector) owner, name, value);
if (url != null) {
addVariable(owner, name, url);
} // else { //NOP this was just a cleanup by component }
@@ -1006,6 +1010,7 @@ public class JsonPaintTarget implements PaintTarget {
* @see com.vaadin.terminal.PaintTarget#isFullRepaint()
*/
+ @Override
public boolean isFullRepaint() {
return !cacheEnabled;
}
diff --git a/src/com/vaadin/terminal/gwt/server/LegacyChangeVariablesInvocation.java b/src/com/vaadin/terminal/gwt/server/LegacyChangeVariablesInvocation.java
index 42fa3ab5a5..9dba05d2c1 100644
--- a/src/com/vaadin/terminal/gwt/server/LegacyChangeVariablesInvocation.java
+++ b/src/com/vaadin/terminal/gwt/server/LegacyChangeVariablesInvocation.java
@@ -6,8 +6,8 @@ package com.vaadin.terminal.gwt.server;
import java.util.HashMap;
import java.util.Map;
+import com.vaadin.shared.communication.MethodInvocation;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
-import com.vaadin.terminal.gwt.client.communication.MethodInvocation;
public class LegacyChangeVariablesInvocation extends MethodInvocation {
private Map<String, Object> variableChanges = new HashMap<String, Object>();
diff --git a/src/com/vaadin/terminal/gwt/server/PortletApplicationContext2.java b/src/com/vaadin/terminal/gwt/server/PortletApplicationContext2.java
index de4f918b75..70505ab5f9 100644
--- a/src/com/vaadin/terminal/gwt/server/PortletApplicationContext2.java
+++ b/src/com/vaadin/terminal/gwt/server/PortletApplicationContext2.java
@@ -28,13 +28,12 @@ import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import javax.portlet.ResourceRequest;
import javax.portlet.ResourceResponse;
-import javax.portlet.ResourceURL;
import javax.portlet.StateAwareResponse;
import javax.servlet.http.HttpSessionBindingListener;
import javax.xml.namespace.QName;
import com.vaadin.Application;
-import com.vaadin.terminal.ApplicationResource;
+import com.vaadin.terminal.ExternalResource;
import com.vaadin.ui.Root;
/**
@@ -63,6 +62,7 @@ public class PortletApplicationContext2 extends AbstractWebApplicationContext {
private final Map<String, String> sharedParameterActionNameMap = new HashMap<String, String>();
private final Map<String, String> sharedParameterActionValueMap = new HashMap<String, String>();
+ @Override
public File getBaseDirectory() {
String resultPath = session.getPortletContext().getRealPath("/");
if (resultPath != null) {
@@ -253,27 +253,6 @@ public class PortletApplicationContext2 extends AbstractWebApplicationContext {
this.response = response;
}
- @Override
- public String generateApplicationResourceURL(ApplicationResource resource,
- String mapKey) {
- if (response instanceof MimeResponse) {
- ResourceURL resourceURL = ((MimeResponse) response)
- .createResourceURL();
- final String filename = resource.getFilename();
- if (filename == null) {
- resourceURL.setResourceID("APP/" + mapKey + "/");
- } else {
- resourceURL.setResourceID("APP/" + mapKey + "/"
- + urlEncode(filename));
- }
- return resourceURL.toString();
- } else {
- // in a background thread or otherwise outside a request
- // TODO exception ??
- return null;
- }
- }
-
/**
* Creates a new action URL.
*
@@ -324,9 +303,7 @@ public class PortletApplicationContext2 extends AbstractWebApplicationContext {
if (actionUrl != null) {
eventActionDestinationMap.put(actionKey, name);
eventActionValueMap.put(actionKey, value);
- throw new RuntimeException(
- "Root.open has not yet been implemented");
- // root.open(new ExternalResource(actionUrl.toString()));
+ root.getPage().open(new ExternalResource(actionUrl.toString()));
} else {
// this should never happen as we already know the response is a
// MimeResponse
@@ -372,9 +349,7 @@ public class PortletApplicationContext2 extends AbstractWebApplicationContext {
if (actionUrl != null) {
sharedParameterActionNameMap.put(actionKey, name);
sharedParameterActionValueMap.put(actionKey, value);
- throw new RuntimeException(
- "Root.open has not yet been implemented");
- // root.open(new ExternalResource(actionUrl.toString()));
+ root.getPage().open(new ExternalResource(actionUrl.toString()));
} else {
// this should never happen as we already know the response is a
// MimeResponse
diff --git a/src/com/vaadin/terminal/gwt/server/PortletCommunicationManager.java b/src/com/vaadin/terminal/gwt/server/PortletCommunicationManager.java
index d3fbf4d988..edd970a31f 100644
--- a/src/com/vaadin/terminal/gwt/server/PortletCommunicationManager.java
+++ b/src/com/vaadin/terminal/gwt/server/PortletCommunicationManager.java
@@ -5,9 +5,6 @@ package com.vaadin.terminal.gwt.server;
import java.io.IOException;
import java.io.InputStream;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
import javax.portlet.MimeResponse;
import javax.portlet.PortletContext;
@@ -22,10 +19,9 @@ import com.vaadin.external.json.JSONException;
import com.vaadin.external.json.JSONObject;
import com.vaadin.terminal.DeploymentConfiguration;
import com.vaadin.terminal.PaintException;
-import com.vaadin.terminal.StreamVariable;
import com.vaadin.terminal.WrappedRequest;
import com.vaadin.terminal.WrappedResponse;
-import com.vaadin.terminal.gwt.client.Connector;
+import com.vaadin.terminal.gwt.client.ApplicationConfiguration;
import com.vaadin.ui.Root;
/**
@@ -37,131 +33,10 @@ import com.vaadin.ui.Root;
@SuppressWarnings("serial")
public class PortletCommunicationManager extends AbstractCommunicationManager {
- private transient MimeResponse currentMimeResponse;
-
public PortletCommunicationManager(Application application) {
super(application);
}
- public void handleFileUpload(Root root, WrappedRequest request,
- WrappedResponse response) throws IOException {
- String contentType = request.getContentType();
- String name = request.getParameter("name");
- String ownerId = request.getParameter("rec-owner");
- Connector owner = getConnector(root, ownerId);
- StreamVariable streamVariable = ownerToNameToStreamVariable.get(owner)
- .get(name);
-
- if (contentType.contains("boundary")) {
- doHandleSimpleMultipartFileUpload(request, response,
- streamVariable, name, owner,
- contentType.split("boundary=")[1]);
- } else {
- doHandleXhrFilePost(request, response, streamVariable, name, owner,
- request.getContentLength());
- }
-
- }
-
- @Override
- protected void postPaint(Root root) {
- super.postPaint(root);
-
- Application application = root.getApplication();
- if (ownerToNameToStreamVariable != null) {
- Iterator<Connector> iterator = ownerToNameToStreamVariable.keySet()
- .iterator();
- while (iterator.hasNext()) {
- Connector owner = iterator.next();
- if (getConnector(root, owner.getConnectorId()) == null) {
- // Owner is no longer attached to the application
- iterator.remove();
- }
- }
- }
- }
-
- @Override
- protected boolean handleApplicationRequest(WrappedRequest request,
- WrappedResponse response) throws IOException {
- setCurrentMimeReponse(response);
- try {
- return super.handleApplicationRequest(request, response);
- } finally {
- currentMimeResponse = null;
- }
- }
-
- private void setCurrentMimeReponse(WrappedResponse response) {
- PortletResponse portletResponse = ((WrappedPortletResponse) response)
- .getPortletResponse();
- if (portletResponse instanceof MimeResponse) {
- currentMimeResponse = (MimeResponse) portletResponse;
- }
-
- }
-
- @Override
- public void handleUidlRequest(WrappedRequest request,
- WrappedResponse response, Callback callback, Root root)
- throws IOException, InvalidUIDLSecurityKeyException {
- setCurrentMimeReponse(response);
- super.handleUidlRequest(request, response, callback, root);
- currentMimeResponse = null;
- }
-
- @Override
- public void handleBrowserDetailsRequest(WrappedRequest request,
- WrappedResponse response, Application application)
- throws IOException {
- setCurrentMimeReponse(response);
- super.handleBrowserDetailsRequest(request, response, application);
- currentMimeResponse = null;
-
- }
-
- private Map<Connector, Map<String, StreamVariable>> ownerToNameToStreamVariable;
-
- @Override
- String getStreamVariableTargetUrl(Connector owner, String name,
- StreamVariable value) {
- if (ownerToNameToStreamVariable == null) {
- ownerToNameToStreamVariable = new HashMap<Connector, Map<String, StreamVariable>>();
- }
- Map<String, StreamVariable> nameToReceiver = ownerToNameToStreamVariable
- .get(owner);
- if (nameToReceiver == null) {
- nameToReceiver = new HashMap<String, StreamVariable>();
- ownerToNameToStreamVariable.put(owner, nameToReceiver);
- }
- nameToReceiver.put(name, value);
- ResourceURL resurl = createResourceURL();
- resurl.setResourceID("UPLOAD");
- resurl.setParameter("name", name);
- resurl.setParameter("rec-owner", owner.getConnectorId());
- resurl.setProperty("name", name);
- resurl.setProperty("rec-owner", owner.getConnectorId());
- return resurl.toString();
- }
-
- private ResourceURL createResourceURL() {
- if (currentMimeResponse == null) {
- throw new RuntimeException(
- "No reponse object available. Cannot create a resource URL");
- }
- return currentMimeResponse.createResourceURL();
- }
-
- @Override
- protected void cleanStreamVariable(Connector owner, String name) {
- Map<String, StreamVariable> map = ownerToNameToStreamVariable
- .get(owner);
- map.remove(name);
- if (map.isEmpty()) {
- ownerToNameToStreamVariable.remove(owner);
- }
- }
-
@Override
protected BootstrapHandler createBootstrapHandler() {
return new BootstrapHandler() {
@@ -211,12 +86,14 @@ public class PortletCommunicationManager extends AbstractCommunicationManager {
* some other things
*/
JSONObject defaults = super.getDefaultParameters(context);
- defaults.put("usePortletURLs", true);
- ResourceURL uidlUrlBase = getRenderResponse(context)
+ ResourceURL portletResourceUrl = getRenderResponse(context)
.createResourceURL();
- uidlUrlBase.setResourceID("UIDL");
- defaults.put("portletUidlURLBase", uidlUrlBase.toString());
+ portletResourceUrl
+ .setResourceID(AbstractApplicationPortlet.RESOURCE_URL_ID);
+ defaults.put(ApplicationConfiguration.PORTLET_RESOUCE_URL_BASE,
+ portletResourceUrl.toString());
+
defaults.put("pathInfo", "");
return defaults;
@@ -253,7 +130,7 @@ public class PortletCommunicationManager extends AbstractCommunicationManager {
@Override
protected String getInitialUIDL(WrappedRequest request, Root root)
- throws PaintException {
+ throws PaintException, JSONException {
return PortletCommunicationManager.this.getInitialUIDL(request,
root);
}
diff --git a/src/com/vaadin/terminal/gwt/server/ResourceReference.java b/src/com/vaadin/terminal/gwt/server/ResourceReference.java
index 56f2bed896..2104ad4b87 100644
--- a/src/com/vaadin/terminal/gwt/server/ResourceReference.java
+++ b/src/com/vaadin/terminal/gwt/server/ResourceReference.java
@@ -4,11 +4,11 @@
package com.vaadin.terminal.gwt.server;
import com.vaadin.Application;
+import com.vaadin.shared.communication.URLReference;
import com.vaadin.terminal.ApplicationResource;
import com.vaadin.terminal.ExternalResource;
import com.vaadin.terminal.Resource;
import com.vaadin.terminal.ThemeResource;
-import com.vaadin.terminal.gwt.client.communication.URLReference;
public class ResourceReference extends URLReference {
@@ -48,4 +48,20 @@ public class ResourceReference extends URLReference {
}
}
+
+ public static ResourceReference create(Resource resource) {
+ if (resource == null) {
+ return null;
+ } else {
+ return new ResourceReference(resource);
+ }
+ }
+
+ public static Resource getResource(URLReference reference) {
+ if (reference == null) {
+ return null;
+ }
+ assert reference instanceof ResourceReference;
+ return ((ResourceReference) reference).getResource();
+ }
}
diff --git a/src/com/vaadin/terminal/gwt/server/RestrictedRenderResponse.java b/src/com/vaadin/terminal/gwt/server/RestrictedRenderResponse.java
index c4ef3fc8e5..9fdffbf9a5 100644
--- a/src/com/vaadin/terminal/gwt/server/RestrictedRenderResponse.java
+++ b/src/com/vaadin/terminal/gwt/server/RestrictedRenderResponse.java
@@ -34,112 +34,137 @@ class RestrictedRenderResponse implements RenderResponse, Serializable {
this.response = response;
}
+ @Override
public void addProperty(String key, String value) {
response.addProperty(key, value);
}
+ @Override
public PortletURL createActionURL() {
return response.createActionURL();
}
+ @Override
public PortletURL createRenderURL() {
return response.createRenderURL();
}
+ @Override
public String encodeURL(String path) {
return response.encodeURL(path);
}
+ @Override
public void flushBuffer() throws IOException {
// NOP
// TODO throw?
}
+ @Override
public int getBufferSize() {
return response.getBufferSize();
}
+ @Override
public String getCharacterEncoding() {
return response.getCharacterEncoding();
}
+ @Override
public String getContentType() {
return response.getContentType();
}
+ @Override
public Locale getLocale() {
return response.getLocale();
}
+ @Override
public String getNamespace() {
return response.getNamespace();
}
+ @Override
public OutputStream getPortletOutputStream() throws IOException {
// write forbidden
return null;
}
+ @Override
public PrintWriter getWriter() throws IOException {
// write forbidden
return null;
}
+ @Override
public boolean isCommitted() {
return response.isCommitted();
}
+ @Override
public void reset() {
// NOP
// TODO throw?
}
+ @Override
public void resetBuffer() {
// NOP
// TODO throw?
}
+ @Override
public void setBufferSize(int size) {
// NOP
// TODO throw?
}
+ @Override
public void setContentType(String type) {
// NOP
// TODO throw?
}
+ @Override
public void setProperty(String key, String value) {
response.setProperty(key, value);
}
+ @Override
public void setTitle(String title) {
response.setTitle(title);
}
+ @Override
public void setNextPossiblePortletModes(Collection<PortletMode> portletModes) {
// NOP
// TODO throw?
}
+ @Override
public ResourceURL createResourceURL() {
return response.createResourceURL();
}
+ @Override
public CacheControl getCacheControl() {
return response.getCacheControl();
}
+ @Override
public void addProperty(Cookie cookie) {
// NOP
// TODO throw?
}
+ @Override
public void addProperty(String key, Element element) {
// NOP
// TODO throw?
}
+ @Override
public Element createElement(String tagName) throws DOMException {
// NOP
return null;
diff --git a/src/com/vaadin/terminal/gwt/server/ServerRpcManager.java b/src/com/vaadin/terminal/gwt/server/ServerRpcManager.java
index d9931a9610..1c7af82a36 100644
--- a/src/com/vaadin/terminal/gwt/server/ServerRpcManager.java
+++ b/src/com/vaadin/terminal/gwt/server/ServerRpcManager.java
@@ -12,7 +12,7 @@ import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
-import com.vaadin.terminal.gwt.client.Connector;
+import com.vaadin.shared.Connector;
/**
* Server side RPC manager that handles RPC calls coming from the client.
@@ -111,6 +111,7 @@ public class ServerRpcManager<T> implements RpcManager {
* @param invocation
* method invocation to perform
*/
+ @Override
public void applyInvocation(ServerRpcMethodInvocation invocation)
throws RpcInvocationException {
Method method = invocation.getMethod();
diff --git a/src/com/vaadin/terminal/gwt/server/ServerRpcMethodInvocation.java b/src/com/vaadin/terminal/gwt/server/ServerRpcMethodInvocation.java
index 95565c4379..ff81a27596 100644
--- a/src/com/vaadin/terminal/gwt/server/ServerRpcMethodInvocation.java
+++ b/src/com/vaadin/terminal/gwt/server/ServerRpcMethodInvocation.java
@@ -7,8 +7,8 @@ import java.lang.reflect.Method;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
-import com.vaadin.terminal.gwt.client.communication.MethodInvocation;
-import com.vaadin.terminal.gwt.client.communication.ServerRpc;
+import com.vaadin.shared.communication.MethodInvocation;
+import com.vaadin.shared.communication.ServerRpc;
public class ServerRpcMethodInvocation extends MethodInvocation {
diff --git a/src/com/vaadin/terminal/gwt/server/ServletPortletHelper.java b/src/com/vaadin/terminal/gwt/server/ServletPortletHelper.java
index 9b1e60e621..b2b962b0fd 100644
--- a/src/com/vaadin/terminal/gwt/server/ServletPortletHelper.java
+++ b/src/com/vaadin/terminal/gwt/server/ServletPortletHelper.java
@@ -3,6 +3,9 @@ package com.vaadin.terminal.gwt.server;
import java.io.Serializable;
import com.vaadin.Application;
+import com.vaadin.terminal.DeploymentConfiguration;
+import com.vaadin.terminal.WrappedRequest;
+import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.ui.Root;
/*
@@ -10,6 +13,8 @@ import com.vaadin.ui.Root;
*/
class ServletPortletHelper implements Serializable {
+ public static final String UPLOAD_URL_PREFIX = "APP/UPLOAD/";
+
public static class ApplicationClassException extends Exception {
public ApplicationClassException(String message, Throwable cause) {
@@ -22,8 +27,15 @@ class ServletPortletHelper implements Serializable {
}
static Class<? extends Application> getApplicationClass(
- String applicationParameter, String rootParameter,
- ClassLoader classLoader) throws ApplicationClassException {
+ DeploymentConfiguration deploymentConfiguration)
+ throws ApplicationClassException {
+ String applicationParameter = deploymentConfiguration
+ .getInitParameters().getProperty("application");
+ String rootParameter = deploymentConfiguration
+ .getInitParameters().getProperty(
+ Application.ROOT_PARAMETER);
+ ClassLoader classLoader = deploymentConfiguration.getClassLoader();
+
if (applicationParameter == null) {
// Validate the parameter value
@@ -70,4 +82,40 @@ class ServletPortletHelper implements Serializable {
+ " doesn't have a public no-args constructor");
}
}
+
+ private static boolean hasPathPrefix(WrappedRequest request, String prefix) {
+ String pathInfo = request.getRequestPathInfo();
+
+ if (pathInfo == null) {
+ return false;
+ }
+
+ if (!prefix.startsWith("/")) {
+ prefix = '/' + prefix;
+ }
+
+ if (pathInfo.startsWith(prefix)) {
+ return true;
+ }
+
+ return false;
+ }
+
+ public static boolean isFileUploadRequest(WrappedRequest request) {
+ return hasPathPrefix(request, UPLOAD_URL_PREFIX);
+ }
+
+ public static boolean isConnectorResourceRequest(WrappedRequest request) {
+ return hasPathPrefix(request,
+ ApplicationConnection.CONNECTOR_RESOURCE_PREFIX + "/");
+ }
+
+ public static boolean isUIDLRequest(WrappedRequest request) {
+ return hasPathPrefix(request, ApplicationConnection.UIDL_REQUEST_PATH);
+ }
+
+ public static boolean isApplicationResourceRequest(WrappedRequest request) {
+ return hasPathPrefix(request, ApplicationConnection.APP_REQUEST_PATH);
+ }
+
}
diff --git a/src/com/vaadin/terminal/gwt/server/StreamingErrorEventImpl.java b/src/com/vaadin/terminal/gwt/server/StreamingErrorEventImpl.java
index 7418867fc8..6ab3df2789 100644
--- a/src/com/vaadin/terminal/gwt/server/StreamingErrorEventImpl.java
+++ b/src/com/vaadin/terminal/gwt/server/StreamingErrorEventImpl.java
@@ -17,6 +17,7 @@ final class StreamingErrorEventImpl extends AbstractStreamingEvent implements
this.exception = exception;
}
+ @Override
public final Exception getException() {
return exception;
}
diff --git a/src/com/vaadin/terminal/gwt/server/StreamingStartEventImpl.java b/src/com/vaadin/terminal/gwt/server/StreamingStartEventImpl.java
index 6a7844abd0..274d05e111 100644
--- a/src/com/vaadin/terminal/gwt/server/StreamingStartEventImpl.java
+++ b/src/com/vaadin/terminal/gwt/server/StreamingStartEventImpl.java
@@ -16,6 +16,7 @@ final class StreamingStartEventImpl extends AbstractStreamingEvent implements
super(filename, type, contentLength, 0);
}
+ @Override
public void disposeStreamVariable() {
disposed = true;
}
diff --git a/src/com/vaadin/terminal/gwt/server/UnsupportedBrowserHandler.java b/src/com/vaadin/terminal/gwt/server/UnsupportedBrowserHandler.java
index 334a7acf8d..5248af595e 100644
--- a/src/com/vaadin/terminal/gwt/server/UnsupportedBrowserHandler.java
+++ b/src/com/vaadin/terminal/gwt/server/UnsupportedBrowserHandler.java
@@ -26,6 +26,7 @@ public class UnsupportedBrowserHandler implements RequestHandler {
/** Cookie used to ignore browser checks */
public static final String FORCE_LOAD_COOKIE = "vaadinforceload=1";
+ @Override
public boolean handleRequest(Application application,
WrappedRequest request, WrappedResponse response)
throws IOException {
diff --git a/src/com/vaadin/terminal/gwt/server/WebApplicationContext.java b/src/com/vaadin/terminal/gwt/server/WebApplicationContext.java
index 8a1ea792f5..36c08b2ed9 100644
--- a/src/com/vaadin/terminal/gwt/server/WebApplicationContext.java
+++ b/src/com/vaadin/terminal/gwt/server/WebApplicationContext.java
@@ -111,6 +111,7 @@ public class WebApplicationContext extends AbstractWebApplicationContext {
*
* @see com.vaadin.service.ApplicationContext#getBaseDirectory()
*/
+ @Override
public File getBaseDirectory() {
final String realPath = ApplicationServlet.getResourcePath(
session.getServletContext(), "/");
diff --git a/src/com/vaadin/terminal/gwt/server/WebBrowser.java b/src/com/vaadin/terminal/gwt/server/WebBrowser.java
index 38b5409594..4b92b12b66 100644
--- a/src/com/vaadin/terminal/gwt/server/WebBrowser.java
+++ b/src/com/vaadin/terminal/gwt/server/WebBrowser.java
@@ -7,9 +7,9 @@ package com.vaadin.terminal.gwt.server;
import java.util.Date;
import java.util.Locale;
+import com.vaadin.shared.VBrowserDetails;
import com.vaadin.terminal.Terminal;
import com.vaadin.terminal.WrappedRequest;
-import com.vaadin.terminal.gwt.client.VBrowserDetails;
/**
* Class that provides information about the web browser the user is using.
@@ -42,6 +42,7 @@ public class WebBrowser implements Terminal {
* @return Always returns null.
*/
+ @Override
public String getDefaultTheme() {
return null;
}
@@ -52,6 +53,7 @@ public class WebBrowser implements Terminal {
* @see com.vaadin.terminal.Terminal#getScreenHeight()
*/
+ @Override
public int getScreenHeight() {
return screenHeight;
}
@@ -62,6 +64,7 @@ public class WebBrowser implements Terminal {
* @see com.vaadin.terminal.Terminal#getScreenWidth()
*/
+ @Override
public int getScreenWidth() {
return screenWidth;
}
diff --git a/src/com/vaadin/terminal/gwt/server/WrappedHttpServletRequest.java b/src/com/vaadin/terminal/gwt/server/WrappedHttpServletRequest.java
index 0774a79990..cf58f398af 100644
--- a/src/com/vaadin/terminal/gwt/server/WrappedHttpServletRequest.java
+++ b/src/com/vaadin/terminal/gwt/server/WrappedHttpServletRequest.java
@@ -41,18 +41,22 @@ public class WrappedHttpServletRequest extends HttpServletRequestWrapper
this.deploymentConfiguration = deploymentConfiguration;
}
+ @Override
public String getRequestPathInfo() {
return getPathInfo();
}
+ @Override
public int getSessionMaxInactiveInterval() {
return getSession().getMaxInactiveInterval();
}
+ @Override
public Object getSessionAttribute(String name) {
return getSession().getAttribute(name);
}
+ @Override
public void setSessionAttribute(String name, Object attribute) {
getSession().setAttribute(name, attribute);
}
@@ -66,20 +70,25 @@ public class WrappedHttpServletRequest extends HttpServletRequestWrapper
return this;
}
+ @Override
public DeploymentConfiguration getDeploymentConfiguration() {
return deploymentConfiguration;
}
+ @Override
public BrowserDetails getBrowserDetails() {
return new BrowserDetails() {
+ @Override
public String getUriFragment() {
return null;
}
+ @Override
public String getWindowName() {
return null;
}
+ @Override
public WebBrowser getWebBrowser() {
WebApplicationContext context = (WebApplicationContext) Application
.getCurrent().getContext();
diff --git a/src/com/vaadin/terminal/gwt/server/WrappedHttpServletResponse.java b/src/com/vaadin/terminal/gwt/server/WrappedHttpServletResponse.java
index 14a391b21f..32b2f352a8 100644
--- a/src/com/vaadin/terminal/gwt/server/WrappedHttpServletResponse.java
+++ b/src/com/vaadin/terminal/gwt/server/WrappedHttpServletResponse.java
@@ -47,6 +47,7 @@ public class WrappedHttpServletResponse extends HttpServletResponseWrapper
return this;
}
+ @Override
public void setCacheTime(long milliseconds) {
doSetCacheTime(this, milliseconds);
}
@@ -67,6 +68,7 @@ public class WrappedHttpServletResponse extends HttpServletResponseWrapper
}
}
+ @Override
public DeploymentConfiguration getDeploymentConfiguration() {
return deploymentConfiguration;
}
diff --git a/src/com/vaadin/terminal/gwt/server/WrappedPortletRequest.java b/src/com/vaadin/terminal/gwt/server/WrappedPortletRequest.java
index 85d8d5c69c..a3fa172034 100644
--- a/src/com/vaadin/terminal/gwt/server/WrappedPortletRequest.java
+++ b/src/com/vaadin/terminal/gwt/server/WrappedPortletRequest.java
@@ -17,6 +17,7 @@ import com.vaadin.Application;
import com.vaadin.terminal.CombinedRequest;
import com.vaadin.terminal.DeploymentConfiguration;
import com.vaadin.terminal.WrappedRequest;
+import com.vaadin.terminal.gwt.client.ApplicationConnection;
/**
* Wrapper for {@link PortletRequest} and its subclasses.
@@ -46,10 +47,12 @@ public class WrappedPortletRequest implements WrappedRequest {
this.deploymentConfiguration = deploymentConfiguration;
}
+ @Override
public Object getAttribute(String name) {
return request.getAttribute(name);
}
+ @Override
public int getContentLength() {
try {
return ((ClientDataRequest) request).getContentLength();
@@ -59,6 +62,7 @@ public class WrappedPortletRequest implements WrappedRequest {
}
}
+ @Override
public InputStream getInputStream() throws IOException {
try {
return ((ClientDataRequest) request).getPortletInputStream();
@@ -68,34 +72,48 @@ public class WrappedPortletRequest implements WrappedRequest {
}
}
+ @Override
public String getParameter(String name) {
return request.getParameter(name);
}
+ @Override
public Map<String, String[]> getParameterMap() {
return request.getParameterMap();
}
+ @Override
public void setAttribute(String name, Object o) {
request.setAttribute(name, o);
}
+ @Override
public String getRequestPathInfo() {
if (request instanceof ResourceRequest) {
- return ((ResourceRequest) request).getResourceID();
+ ResourceRequest resourceRequest = (ResourceRequest) request;
+ String resourceID = resourceRequest.getResourceID();
+ if (AbstractApplicationPortlet.RESOURCE_URL_ID.equals(resourceID)) {
+ String resourcePath = resourceRequest
+ .getParameter(ApplicationConnection.V_RESOURCE_PATH);
+ return resourcePath;
+ }
+ return resourceID;
} else {
return null;
}
}
+ @Override
public int getSessionMaxInactiveInterval() {
return request.getPortletSession().getMaxInactiveInterval();
}
+ @Override
public Object getSessionAttribute(String name) {
return request.getPortletSession().getAttribute(name);
}
+ @Override
public void setSessionAttribute(String name, Object attribute) {
request.getPortletSession().setAttribute(name, attribute);
}
@@ -109,6 +127,7 @@ public class WrappedPortletRequest implements WrappedRequest {
return request;
}
+ @Override
public String getContentType() {
try {
return ((ResourceRequest) request).getContentType();
@@ -118,16 +137,20 @@ public class WrappedPortletRequest implements WrappedRequest {
}
}
+ @Override
public BrowserDetails getBrowserDetails() {
return new BrowserDetails() {
+ @Override
public String getUriFragment() {
return null;
}
+ @Override
public String getWindowName() {
return null;
}
+ @Override
public WebBrowser getWebBrowser() {
PortletApplicationContext2 context = (PortletApplicationContext2) Application
.getCurrent().getContext();
@@ -136,18 +159,22 @@ public class WrappedPortletRequest implements WrappedRequest {
};
}
+ @Override
public Locale getLocale() {
return request.getLocale();
}
+ @Override
public String getRemoteAddr() {
return null;
}
+ @Override
public boolean isSecure() {
return request.isSecure();
}
+ @Override
public String getHeader(String string) {
return null;
}
@@ -164,6 +191,7 @@ public class WrappedPortletRequest implements WrappedRequest {
return request.getPortalContext().getProperty(name);
}
+ @Override
public DeploymentConfiguration getDeploymentConfiguration() {
return deploymentConfiguration;
}
diff --git a/src/com/vaadin/terminal/gwt/server/WrappedPortletResponse.java b/src/com/vaadin/terminal/gwt/server/WrappedPortletResponse.java
index 8824396352..f7ecf26f3c 100644
--- a/src/com/vaadin/terminal/gwt/server/WrappedPortletResponse.java
+++ b/src/com/vaadin/terminal/gwt/server/WrappedPortletResponse.java
@@ -53,6 +53,7 @@ public class WrappedPortletResponse implements WrappedResponse {
this.deploymentConfiguration = deploymentConfiguration;
}
+ @Override
public OutputStream getOutputStream() throws IOException {
return ((MimeResponse) response).getPortletOutputStream();
}
@@ -66,36 +67,44 @@ public class WrappedPortletResponse implements WrappedResponse {
return response;
}
+ @Override
public void setContentType(String type) {
((MimeResponse) response).setContentType(type);
}
+ @Override
public PrintWriter getWriter() throws IOException {
return ((MimeResponse) response).getWriter();
}
+ @Override
public void setStatus(int responseStatus) {
response.setProperty(ResourceResponse.HTTP_STATUS_CODE,
Integer.toString(responseStatus));
}
+ @Override
public void setHeader(String name, String value) {
response.setProperty(name, value);
}
+ @Override
public void setDateHeader(String name, long timestamp) {
response.setProperty(name, HTTP_DATE_FORMAT.format(new Date(timestamp)));
}
+ @Override
public void setCacheTime(long milliseconds) {
WrappedHttpServletResponse.doSetCacheTime(this, milliseconds);
}
+ @Override
public void sendError(int errorCode, String message) throws IOException {
setStatus(errorCode);
getWriter().write(message);
}
+ @Override
public DeploymentConfiguration getDeploymentConfiguration() {
return deploymentConfiguration;
}
diff --git a/src/com/vaadin/terminal/gwt/widgetsetutils/AcceptCriteriaFactoryGenerator.java b/src/com/vaadin/terminal/gwt/widgetsetutils/AcceptCriteriaFactoryGenerator.java
index 6d90a51761..e5e2ee1f2c 100644
--- a/src/com/vaadin/terminal/gwt/widgetsetutils/AcceptCriteriaFactoryGenerator.java
+++ b/src/com/vaadin/terminal/gwt/widgetsetutils/AcceptCriteriaFactoryGenerator.java
@@ -15,7 +15,7 @@ import com.google.gwt.core.ext.typeinfo.JClassType;
import com.google.gwt.core.ext.typeinfo.TypeOracle;
import com.google.gwt.user.rebind.ClassSourceFileComposerFactory;
import com.google.gwt.user.rebind.SourceWriter;
-import com.vaadin.terminal.gwt.client.ui.dd.AcceptCriterion;
+import com.vaadin.shared.ui.dd.AcceptCriterion;
import com.vaadin.terminal.gwt.client.ui.dd.VAcceptCriterion;
import com.vaadin.terminal.gwt.client.ui.dd.VAcceptCriterionFactory;
diff --git a/src/com/vaadin/terminal/gwt/widgetsetutils/ClassPathExplorer.java b/src/com/vaadin/terminal/gwt/widgetsetutils/ClassPathExplorer.java
index 1c5b736492..6ee30183c1 100644
--- a/src/com/vaadin/terminal/gwt/widgetsetutils/ClassPathExplorer.java
+++ b/src/com/vaadin/terminal/gwt/widgetsetutils/ClassPathExplorer.java
@@ -49,6 +49,7 @@ public class ClassPathExplorer {
* File filter that only accepts directories.
*/
private final static FileFilter DIRECTORIES_ONLY = new FileFilter() {
+ @Override
public boolean accept(File f) {
if (f.exists() && f.isDirectory()) {
return true;
diff --git a/src/com/vaadin/terminal/gwt/widgetsetutils/CustomWidgetMapGenerator.java b/src/com/vaadin/terminal/gwt/widgetsetutils/CustomWidgetMapGenerator.java
index f0f3df20b0..89045c63b2 100644
--- a/src/com/vaadin/terminal/gwt/widgetsetutils/CustomWidgetMapGenerator.java
+++ b/src/com/vaadin/terminal/gwt/widgetsetutils/CustomWidgetMapGenerator.java
@@ -6,10 +6,10 @@ package com.vaadin.terminal.gwt.widgetsetutils;
import java.util.Collection;
import java.util.HashSet;
+import com.vaadin.shared.ui.Connect;
+import com.vaadin.shared.ui.Connect.LoadStyle;
import com.vaadin.terminal.gwt.client.ComponentConnector;
import com.vaadin.terminal.gwt.client.ServerConnector;
-import com.vaadin.terminal.gwt.client.ui.Connect;
-import com.vaadin.terminal.gwt.client.ui.Connect.LoadStyle;
/**
* An abstract helper class that can be used to easily build a widgetset with
diff --git a/src/com/vaadin/terminal/gwt/widgetsetutils/EagerWidgetMapGenerator.java b/src/com/vaadin/terminal/gwt/widgetsetutils/EagerWidgetMapGenerator.java
index 084e1c3857..4ff0592ede 100644
--- a/src/com/vaadin/terminal/gwt/widgetsetutils/EagerWidgetMapGenerator.java
+++ b/src/com/vaadin/terminal/gwt/widgetsetutils/EagerWidgetMapGenerator.java
@@ -3,8 +3,8 @@
*/
package com.vaadin.terminal.gwt.widgetsetutils;
+import com.vaadin.shared.ui.Connect.LoadStyle;
import com.vaadin.terminal.gwt.client.ServerConnector;
-import com.vaadin.terminal.gwt.client.ui.Connect.LoadStyle;
/**
* WidgetMap generator that builds a widgetset that packs all included widgets
diff --git a/src/com/vaadin/terminal/gwt/widgetsetutils/GeneratedRpcMethodProviderGenerator.java b/src/com/vaadin/terminal/gwt/widgetsetutils/GeneratedRpcMethodProviderGenerator.java
index b1d69b178b..e11a12a3b5 100644
--- a/src/com/vaadin/terminal/gwt/widgetsetutils/GeneratedRpcMethodProviderGenerator.java
+++ b/src/com/vaadin/terminal/gwt/widgetsetutils/GeneratedRpcMethodProviderGenerator.java
@@ -21,7 +21,7 @@ import com.google.gwt.core.ext.typeinfo.JType;
import com.google.gwt.core.ext.typeinfo.TypeOracle;
import com.google.gwt.user.rebind.ClassSourceFileComposerFactory;
import com.google.gwt.user.rebind.SourceWriter;
-import com.vaadin.terminal.gwt.client.communication.ClientRpc;
+import com.vaadin.shared.communication.ClientRpc;
import com.vaadin.terminal.gwt.client.communication.GeneratedRpcMethodProvider;
import com.vaadin.terminal.gwt.client.communication.RpcManager;
import com.vaadin.terminal.gwt.client.communication.RpcMethod;
diff --git a/src/com/vaadin/terminal/gwt/widgetsetutils/LazyWidgetMapGenerator.java b/src/com/vaadin/terminal/gwt/widgetsetutils/LazyWidgetMapGenerator.java
index f8366beb46..28f3dab482 100644
--- a/src/com/vaadin/terminal/gwt/widgetsetutils/LazyWidgetMapGenerator.java
+++ b/src/com/vaadin/terminal/gwt/widgetsetutils/LazyWidgetMapGenerator.java
@@ -3,8 +3,8 @@
*/
package com.vaadin.terminal.gwt.widgetsetutils;
+import com.vaadin.shared.ui.Connect.LoadStyle;
import com.vaadin.terminal.gwt.client.ServerConnector;
-import com.vaadin.terminal.gwt.client.ui.Connect.LoadStyle;
/**
* WidgetMap generator that builds a widgetset that optimizes the transferred
diff --git a/src/com/vaadin/terminal/gwt/widgetsetutils/RpcProxyCreatorGenerator.java b/src/com/vaadin/terminal/gwt/widgetsetutils/RpcProxyCreatorGenerator.java
index 040715fccf..8a6c374187 100644
--- a/src/com/vaadin/terminal/gwt/widgetsetutils/RpcProxyCreatorGenerator.java
+++ b/src/com/vaadin/terminal/gwt/widgetsetutils/RpcProxyCreatorGenerator.java
@@ -16,10 +16,10 @@ import com.google.gwt.core.ext.typeinfo.JClassType;
import com.google.gwt.core.ext.typeinfo.TypeOracle;
import com.google.gwt.user.rebind.ClassSourceFileComposerFactory;
import com.google.gwt.user.rebind.SourceWriter;
+import com.vaadin.shared.communication.ServerRpc;
import com.vaadin.terminal.gwt.client.ServerConnector;
import com.vaadin.terminal.gwt.client.communication.InitializableServerRpc;
import com.vaadin.terminal.gwt.client.communication.RpcProxy.RpcProxyCreator;
-import com.vaadin.terminal.gwt.client.communication.ServerRpc;
public class RpcProxyCreatorGenerator extends Generator {
@@ -31,13 +31,13 @@ public class RpcProxyCreatorGenerator extends Generator {
assert (typeOracle != null);
JClassType requestedType = typeOracle.findType(requestedClassName);
- String packageName = requestedType.getPackage().getName();
- String className = requestedType.getSimpleSourceName() + "Impl";
if (requestedType == null) {
logger.log(TreeLogger.ERROR, "Unable to find metadata for type '"
+ requestedClassName + "'", null);
throw new UnableToCompleteException();
}
+ String packageName = requestedType.getPackage().getName();
+ String className = requestedType.getSimpleSourceName() + "Impl";
createType(logger, ctx, packageName, className);
return packageName + "." + className;
diff --git a/src/com/vaadin/terminal/gwt/widgetsetutils/RpcProxyGenerator.java b/src/com/vaadin/terminal/gwt/widgetsetutils/RpcProxyGenerator.java
index d9bc8bc832..7a908e5b4d 100644
--- a/src/com/vaadin/terminal/gwt/widgetsetutils/RpcProxyGenerator.java
+++ b/src/com/vaadin/terminal/gwt/widgetsetutils/RpcProxyGenerator.java
@@ -17,11 +17,11 @@ import com.google.gwt.core.ext.typeinfo.JParameter;
import com.google.gwt.core.ext.typeinfo.TypeOracle;
import com.google.gwt.user.rebind.ClassSourceFileComposerFactory;
import com.google.gwt.user.rebind.SourceWriter;
+import com.vaadin.shared.communication.MethodInvocation;
+import com.vaadin.shared.communication.ServerRpc;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.ServerConnector;
import com.vaadin.terminal.gwt.client.communication.InitializableServerRpc;
-import com.vaadin.terminal.gwt.client.communication.MethodInvocation;
-import com.vaadin.terminal.gwt.client.communication.ServerRpc;
/**
* GWT generator that creates client side proxy classes for making RPC calls
diff --git a/src/com/vaadin/terminal/gwt/widgetsetutils/SerializerMapGenerator.java b/src/com/vaadin/terminal/gwt/widgetsetutils/SerializerMapGenerator.java
index 5e151323a0..3f1ad24066 100644
--- a/src/com/vaadin/terminal/gwt/widgetsetutils/SerializerMapGenerator.java
+++ b/src/com/vaadin/terminal/gwt/widgetsetutils/SerializerMapGenerator.java
@@ -22,17 +22,17 @@ import com.google.gwt.core.ext.typeinfo.JClassType;
import com.google.gwt.core.ext.typeinfo.JMethod;
import com.google.gwt.core.ext.typeinfo.JParameterizedType;
import com.google.gwt.core.ext.typeinfo.JType;
+import com.google.gwt.core.ext.typeinfo.NotFoundException;
import com.google.gwt.core.ext.typeinfo.TypeOracle;
-import com.google.gwt.json.client.JSONObject;
+import com.google.gwt.json.client.JSONValue;
import com.google.gwt.user.rebind.ClassSourceFileComposerFactory;
import com.google.gwt.user.rebind.SourceWriter;
+import com.vaadin.shared.communication.ClientRpc;
+import com.vaadin.shared.communication.ServerRpc;
+import com.vaadin.shared.communication.SharedState;
import com.vaadin.terminal.gwt.client.ApplicationConnection;
-import com.vaadin.terminal.gwt.client.ConnectorMap;
-import com.vaadin.terminal.gwt.client.communication.ClientRpc;
import com.vaadin.terminal.gwt.client.communication.JSONSerializer;
import com.vaadin.terminal.gwt.client.communication.SerializerMap;
-import com.vaadin.terminal.gwt.client.communication.ServerRpc;
-import com.vaadin.terminal.gwt.client.communication.SharedState;
/**
* GWT generator that creates a {@link SerializerMap} implementation (mapper
@@ -43,6 +43,7 @@ import com.vaadin.terminal.gwt.client.communication.SharedState;
*/
public class SerializerMapGenerator extends Generator {
+ private static final String FAIL_IF_NOT_SERIALIZABLE = "vFailIfNotSerializable";
private String packageName;
private String className;
@@ -54,7 +55,7 @@ public class SerializerMapGenerator extends Generator {
TypeOracle typeOracle = context.getTypeOracle();
Set<JClassType> typesNeedingSerializers = findTypesNeedingSerializers(
typeOracle, logger);
- warnIfNotJavaSerializable(typesNeedingSerializers, typeOracle,
+ checkForUnserializableTypes(typesNeedingSerializers, typeOracle,
logger);
Set<JClassType> typesWithExistingSerializers = findTypesWithExistingSerializers(
typeOracle, logger);
@@ -90,10 +91,11 @@ public class SerializerMapGenerator extends Generator {
* @param typesNeedingSerializers
* @param typeOracle
* @param logger
+ * @throws UnableToCompleteException
*/
- private void warnIfNotJavaSerializable(
+ private void checkForUnserializableTypes(
Set<JClassType> typesNeedingSerializers, TypeOracle typeOracle,
- TreeLogger logger) {
+ TreeLogger logger) throws UnableToCompleteException {
JClassType javaSerializable = typeOracle.findType(Serializable.class
.getName());
for (JClassType type : typesNeedingSerializers) {
@@ -103,33 +105,59 @@ public class SerializerMapGenerator extends Generator {
}
boolean serializable = type.isAssignableTo(javaSerializable);
if (!serializable) {
+ boolean abortCompile = "true".equals(System
+ .getProperty(FAIL_IF_NOT_SERIALIZABLE));
logger.log(
- Type.ERROR,
+ abortCompile ? Type.ERROR : Type.WARN,
type
+ " is used in RPC or shared state but does not implement "
+ Serializable.class.getName()
- + ". Communication will work but the Application on server side cannot be serialized if it refers to objects of this type.");
+ + ". Communication will work but the Application on server side cannot be serialized if it refers to objects of this type. "
+ + "If the system property "
+ + FAIL_IF_NOT_SERIALIZABLE
+ + " is set to \"true\", this causes the compilation to fail instead of just emitting a warning.");
+ if (abortCompile) {
+ throw new UnableToCompleteException();
+ }
}
}
}
private Set<JClassType> findTypesWithExistingSerializers(
- TypeOracle typeOracle, TreeLogger logger) {
+ TypeOracle typeOracle, TreeLogger logger)
+ throws UnableToCompleteException {
JClassType serializerInterface = typeOracle
.findType(JSONSerializer.class.getName());
+ JType[] deserializeParamTypes = new JType[] {
+ typeOracle
+ .findType(com.vaadin.terminal.gwt.client.communication.Type.class
+ .getName()),
+ typeOracle.findType(JSONValue.class.getName()),
+ typeOracle.findType(ApplicationConnection.class.getName()) };
+ String deserializeMethodName = "deserialize";
+ try {
+ serializerInterface.getMethod(deserializeMethodName,
+ deserializeParamTypes);
+ } catch (NotFoundException e) {
+ logger.log(Type.ERROR, "Could not find " + deserializeMethodName
+ + " in " + serializerInterface);
+ throw new UnableToCompleteException();
+ }
+
Set<JClassType> types = new HashSet<JClassType>();
for (JClassType serializer : serializerInterface.getSubtypes()) {
- JType[] deserializeParamTypes = new JType[] {
- typeOracle.findType(JSONObject.class.getName()),
- typeOracle.findType(ConnectorMap.class.getName()),
- typeOracle.findType(ApplicationConnection.class.getName()) };
- JMethod deserializeMethod = serializer.findMethod("deserialize",
- deserializeParamTypes);
+ JMethod deserializeMethod = serializer.findMethod(
+ deserializeMethodName, deserializeParamTypes);
if (deserializeMethod == null) {
+ logger.log(Type.DEBUG, "Could not find "
+ + deserializeMethodName + " in " + serializer);
continue;
}
+ JType returnType = deserializeMethod.getReturnType();
+ logger.log(Type.DEBUG, "Found " + deserializeMethodName
+ + " with return type " + returnType + " in " + serializer);
- types.add(deserializeMethod.getReturnType().isClass());
+ types.add(returnType.isClass());
}
return types;
}
diff --git a/src/com/vaadin/terminal/gwt/widgetsetutils/WidgetMapGenerator.java b/src/com/vaadin/terminal/gwt/widgetsetutils/WidgetMapGenerator.java
index b264a9c7fe..0d062ec4ff 100644
--- a/src/com/vaadin/terminal/gwt/widgetsetutils/WidgetMapGenerator.java
+++ b/src/com/vaadin/terminal/gwt/widgetsetutils/WidgetMapGenerator.java
@@ -22,10 +22,10 @@ import com.google.gwt.core.ext.typeinfo.JClassType;
import com.google.gwt.core.ext.typeinfo.TypeOracle;
import com.google.gwt.user.rebind.ClassSourceFileComposerFactory;
import com.google.gwt.user.rebind.SourceWriter;
-import com.vaadin.terminal.gwt.client.Connector;
+import com.vaadin.shared.Connector;
+import com.vaadin.shared.ui.Connect;
+import com.vaadin.shared.ui.Connect.LoadStyle;
import com.vaadin.terminal.gwt.client.ServerConnector;
-import com.vaadin.terminal.gwt.client.ui.Connect;
-import com.vaadin.terminal.gwt.client.ui.Connect.LoadStyle;
import com.vaadin.terminal.gwt.client.ui.UnknownComponentConnector;
import com.vaadin.terminal.gwt.client.ui.root.RootConnector;
import com.vaadin.terminal.gwt.server.ClientConnector;
diff --git a/src/com/vaadin/tools/WidgetsetCompiler.java b/src/com/vaadin/tools/WidgetsetCompiler.java
index 407f0e2387..ecc1946e60 100644
--- a/src/com/vaadin/tools/WidgetsetCompiler.java
+++ b/src/com/vaadin/tools/WidgetsetCompiler.java
@@ -31,7 +31,8 @@ import com.vaadin.terminal.gwt.widgetsetutils.WidgetSetBuilder;
* included in the classpath, as well as the gwt-dev-[platform].jar and other
* relevant JARs.
*
- * @deprecated with Java 6, can use com.google.gwt.dev.Compiler directly (also in Eclipse plug-in etc.)
+ * @deprecated with Java 6, can use com.google.gwt.dev.Compiler directly (also
+ * in Eclipse plug-in etc.)
*/
@Deprecated
public class WidgetsetCompiler {
@@ -50,6 +51,7 @@ public class WidgetsetCompiler {
// http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6316197)
Runnable runCompiler = new Runnable() {
+ @Override
public void run() {
try {
// GWTCompiler.main(args);
diff --git a/src/com/vaadin/ui/AbsoluteLayout.java b/src/com/vaadin/ui/AbsoluteLayout.java
index 7d8c402fc9..1c84ca2865 100644
--- a/src/com/vaadin/ui/AbsoluteLayout.java
+++ b/src/com/vaadin/ui/AbsoluteLayout.java
@@ -12,12 +12,12 @@ import java.util.Map;
import com.vaadin.event.LayoutEvents.LayoutClickEvent;
import com.vaadin.event.LayoutEvents.LayoutClickListener;
import com.vaadin.event.LayoutEvents.LayoutClickNotifier;
+import com.vaadin.shared.Connector;
+import com.vaadin.shared.MouseEventDetails;
+import com.vaadin.shared.ui.absolutelayout.AbsoluteLayoutServerRpc;
+import com.vaadin.shared.ui.absolutelayout.AbsoluteLayoutState;
import com.vaadin.terminal.Sizeable;
-import com.vaadin.terminal.gwt.client.Connector;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
import com.vaadin.terminal.gwt.client.ui.LayoutClickEventHandler;
-import com.vaadin.terminal.gwt.client.ui.absolutelayout.AbsoluteLayoutServerRpc;
-import com.vaadin.terminal.gwt.client.ui.absolutelayout.AbsoluteLayoutState;
/**
* AbsoluteLayout is a layout implementation that mimics html absolute
@@ -30,6 +30,7 @@ public class AbsoluteLayout extends AbstractLayout implements
private AbsoluteLayoutServerRpc rpc = new AbsoluteLayoutServerRpc() {
+ @Override
public void layoutClick(MouseEventDetails mouseDetails,
Connector clickedConnector) {
fireEvent(LayoutClickEvent.createEvent(AbsoluteLayout.this,
@@ -56,6 +57,7 @@ public class AbsoluteLayout extends AbstractLayout implements
* Gets an iterator for going through all components enclosed in the
* absolute layout.
*/
+ @Override
public Iterator<Component> getComponentIterator() {
return componentToCoordinates.keySet().iterator();
}
@@ -66,6 +68,7 @@ public class AbsoluteLayout extends AbstractLayout implements
*
* @return the number of contained components
*/
+ @Override
public int getComponentCount() {
return componentToCoordinates.size();
}
@@ -74,6 +77,7 @@ public class AbsoluteLayout extends AbstractLayout implements
* Replaces one component with another one. The new component inherits the
* old components position.
*/
+ @Override
public void replaceComponent(Component oldComponent, Component newComponent) {
ComponentPosition position = getPosition(oldComponent);
removeComponent(oldComponent);
@@ -612,12 +616,14 @@ public class AbsoluteLayout extends AbstractLayout implements
}
+ @Override
public void addListener(LayoutClickListener listener) {
addListener(LayoutClickEventHandler.LAYOUT_CLICK_EVENT_IDENTIFIER,
LayoutClickEvent.class, listener,
LayoutClickListener.clickMethod);
}
+ @Override
public void removeListener(LayoutClickListener listener) {
removeListener(LayoutClickEventHandler.LAYOUT_CLICK_EVENT_IDENTIFIER,
LayoutClickEvent.class, listener);
diff --git a/src/com/vaadin/ui/AbstractComponent.java b/src/com/vaadin/ui/AbstractComponent.java
index ba0e5db89c..e7cb38256c 100644
--- a/src/com/vaadin/ui/AbstractComponent.java
+++ b/src/com/vaadin/ui/AbstractComponent.java
@@ -20,11 +20,11 @@ import com.vaadin.event.ActionManager;
import com.vaadin.event.EventRouter;
import com.vaadin.event.MethodEventSource;
import com.vaadin.event.ShortcutListener;
+import com.vaadin.shared.ComponentState;
import com.vaadin.terminal.AbstractClientConnector;
import com.vaadin.terminal.ErrorMessage;
import com.vaadin.terminal.Resource;
import com.vaadin.terminal.Terminal;
-import com.vaadin.terminal.gwt.client.ComponentState;
import com.vaadin.terminal.gwt.server.ClientConnector;
import com.vaadin.terminal.gwt.server.ComponentSizeValidator;
import com.vaadin.terminal.gwt.server.ResourceReference;
@@ -101,10 +101,12 @@ public abstract class AbstractComponent extends AbstractClientConnector
/* Get/Set component properties */
+ @Override
public void setDebugId(String id) {
getState().setDebugId(id);
}
+ @Override
public String getDebugId() {
return getState().getDebugId();
}
@@ -141,6 +143,7 @@ public abstract class AbstractComponent extends AbstractClientConnector
* Gets the component's style. Don't add a JavaDoc comment here, we use the
* default documentation from implemented interface.
*/
+ @Override
public String getStyleName() {
String s = "";
if (getState().getStyles() != null) {
@@ -159,6 +162,7 @@ public abstract class AbstractComponent extends AbstractClientConnector
* Sets the component's style. Don't add a JavaDoc comment here, we use the
* default documentation from implemented interface.
*/
+ @Override
public void setStyleName(String style) {
if (style == null || "".equals(style)) {
getState().setStyles(null);
@@ -179,6 +183,7 @@ public abstract class AbstractComponent extends AbstractClientConnector
requestRepaint();
}
+ @Override
public void addStyleName(String style) {
if (style == null || "".equals(style)) {
return;
@@ -201,6 +206,7 @@ public abstract class AbstractComponent extends AbstractClientConnector
}
}
+ @Override
public void removeStyleName(String style) {
if (getState().getStyles() != null) {
String[] styleParts = style.split(" +");
@@ -217,6 +223,7 @@ public abstract class AbstractComponent extends AbstractClientConnector
* Get's the component's caption. Don't add a JavaDoc comment here, we use
* the default documentation from implemented interface.
*/
+ @Override
public String getCaption() {
return getState().getCaption();
}
@@ -229,6 +236,7 @@ public abstract class AbstractComponent extends AbstractClientConnector
* @param caption
* the new caption <code>String</code> for the component.
*/
+ @Override
public void setCaption(String caption) {
getState().setCaption(caption);
requestRepaint();
@@ -238,6 +246,7 @@ public abstract class AbstractComponent extends AbstractClientConnector
* Don't add a JavaDoc comment here, we use the default documentation from
* implemented interface.
*/
+ @Override
public Locale getLocale() {
if (locale != null) {
return locale;
@@ -283,13 +292,9 @@ public abstract class AbstractComponent extends AbstractClientConnector
* Gets the component's icon resource. Don't add a JavaDoc comment here, we
* use the default documentation from implemented interface.
*/
+ @Override
public Resource getIcon() {
- ResourceReference ref = ((ResourceReference) getState().getIcon());
- if (ref == null) {
- return null;
- } else {
- return ref.getResource();
- }
+ return ResourceReference.getResource(getState().getIcon());
}
/**
@@ -299,12 +304,9 @@ public abstract class AbstractComponent extends AbstractClientConnector
* @param icon
* the icon to be shown with the component's caption.
*/
+ @Override
public void setIcon(Resource icon) {
- if (icon == null) {
- getState().setIcon(null);
- } else {
- getState().setIcon(new ResourceReference(icon));
- }
+ getState().setIcon(ResourceReference.create(icon));
requestRepaint();
}
@@ -313,6 +315,7 @@ public abstract class AbstractComponent extends AbstractClientConnector
*
* @see com.vaadin.ui.Component#isEnabled()
*/
+ @Override
public boolean isEnabled() {
return getState().isEnabled();
}
@@ -322,6 +325,7 @@ public abstract class AbstractComponent extends AbstractClientConnector
*
* @see com.vaadin.ui.Component#setEnabled(boolean)
*/
+ @Override
public void setEnabled(boolean enabled) {
if (getState().isEnabled() != enabled) {
getState().setEnabled(enabled);
@@ -377,6 +381,7 @@ public abstract class AbstractComponent extends AbstractClientConnector
*
* @see com.vaadin.ui.Component#isVisible()
*/
+ @Override
public boolean isVisible() {
return getState().isVisible();
}
@@ -386,6 +391,7 @@ public abstract class AbstractComponent extends AbstractClientConnector
*
* @see com.vaadin.ui.Component#setVisible(boolean)
*/
+ @Override
public void setVisible(boolean visible) {
if (getState().isVisible() == visible) {
return;
@@ -566,6 +572,7 @@ public abstract class AbstractComponent extends AbstractClientConnector
* Tests if the component is in read-only mode. Don't add a JavaDoc comment
* here, we use the default documentation from implemented interface.
*/
+ @Override
public boolean isReadOnly() {
return getState().isReadOnly();
}
@@ -574,6 +581,7 @@ public abstract class AbstractComponent extends AbstractClientConnector
* Sets the component's read-only mode. Don't add a JavaDoc comment here, we
* use the default documentation from implemented interface.
*/
+ @Override
public void setReadOnly(boolean readOnly) {
getState().setReadOnly(readOnly);
requestRepaint();
@@ -704,6 +712,7 @@ public abstract class AbstractComponent extends AbstractClientConnector
*
* @see com.vaadin.ui.Component#updateState()
*/
+ @Override
public void updateState() {
// TODO This logic should be on the client side and the state should
// simply be a data object with "width" and "height".
@@ -863,6 +872,7 @@ public abstract class AbstractComponent extends AbstractClientConnector
* @param method
* the activation method.
*/
+ @Override
public void addListener(Class<?> eventType, Object target, Method method) {
if (eventRouter == null) {
eventRouter = new EventRouter();
@@ -904,6 +914,7 @@ public abstract class AbstractComponent extends AbstractClientConnector
* @param methodName
* the name of the activation method.
*/
+ @Override
public void addListener(Class<?> eventType, Object target, String methodName) {
if (eventRouter == null) {
eventRouter = new EventRouter();
@@ -929,6 +940,7 @@ public abstract class AbstractComponent extends AbstractClientConnector
* the target object that has registered to listen to events of
* type <code>eventType</code> with one or more methods.
*/
+ @Override
public void removeListener(Class<?> eventType, Object target) {
if (eventRouter != null) {
eventRouter.removeListener(eventType, target);
@@ -954,6 +966,7 @@ public abstract class AbstractComponent extends AbstractClientConnector
* the method owned by <code>target</code> that's registered to
* listen to events of type <code>eventType</code>.
*/
+ @Override
public void removeListener(Class<?> eventType, Object target, Method method) {
if (eventRouter != null) {
eventRouter.removeListener(eventType, target, method);
@@ -988,6 +1001,7 @@ public abstract class AbstractComponent extends AbstractClientConnector
* the name of the method owned by <code>target</code> that's
* registered to listen to events of type <code>eventType</code>.
*/
+ @Override
public void removeListener(Class<?> eventType, Object target,
String methodName) {
if (eventRouter != null) {
@@ -1032,6 +1046,7 @@ public abstract class AbstractComponent extends AbstractClientConnector
* Don't add a JavaDoc comment here, we use the default documentation from
* implemented interface.
*/
+ @Override
public void addListener(Component.Listener listener) {
addListener(Component.Event.class, listener, COMPONENT_EVENT_METHOD);
}
@@ -1041,6 +1056,7 @@ public abstract class AbstractComponent extends AbstractClientConnector
* JavaDoc comment here, we use the default documentation from implemented
* interface.
*/
+ @Override
public void removeListener(Component.Listener listener) {
removeListener(Component.Event.class, listener, COMPONENT_EVENT_METHOD);
}
@@ -1090,6 +1106,7 @@ public abstract class AbstractComponent extends AbstractClientConnector
*
* @see com.vaadin.terminal.Sizeable#getHeight()
*/
+ @Override
public float getHeight() {
return height;
}
@@ -1099,6 +1116,7 @@ public abstract class AbstractComponent extends AbstractClientConnector
*
* @see com.vaadin.terminal.Sizeable#getHeightUnits()
*/
+ @Override
public Unit getHeightUnits() {
return heightUnit;
}
@@ -1108,6 +1126,7 @@ public abstract class AbstractComponent extends AbstractClientConnector
*
* @see com.vaadin.terminal.Sizeable#getWidth()
*/
+ @Override
public float getWidth() {
return width;
}
@@ -1117,6 +1136,7 @@ public abstract class AbstractComponent extends AbstractClientConnector
*
* @see com.vaadin.terminal.Sizeable#getWidthUnits()
*/
+ @Override
public Unit getWidthUnits() {
return widthUnit;
}
@@ -1126,6 +1146,7 @@ public abstract class AbstractComponent extends AbstractClientConnector
*
* @see com.vaadin.terminal.Sizeable#setHeight(float, Unit)
*/
+ @Override
public void setHeight(float height, Unit unit) {
if (unit == null) {
throw new IllegalArgumentException("Unit can not be null");
@@ -1141,6 +1162,7 @@ public abstract class AbstractComponent extends AbstractClientConnector
*
* @see com.vaadin.terminal.Sizeable#setSizeFull()
*/
+ @Override
public void setSizeFull() {
setWidth(100, Unit.PERCENTAGE);
setHeight(100, Unit.PERCENTAGE);
@@ -1151,6 +1173,7 @@ public abstract class AbstractComponent extends AbstractClientConnector
*
* @see com.vaadin.terminal.Sizeable#setSizeUndefined()
*/
+ @Override
public void setSizeUndefined() {
setWidth(-1, Unit.PIXELS);
setHeight(-1, Unit.PIXELS);
@@ -1161,6 +1184,7 @@ public abstract class AbstractComponent extends AbstractClientConnector
*
* @see com.vaadin.terminal.Sizeable#setWidth(float, Unit)
*/
+ @Override
public void setWidth(float width, Unit unit) {
if (unit == null) {
throw new IllegalArgumentException("Unit can not be null");
@@ -1176,6 +1200,7 @@ public abstract class AbstractComponent extends AbstractClientConnector
*
* @see com.vaadin.terminal.Sizeable#setWidth(java.lang.String)
*/
+ @Override
public void setWidth(String width) {
Size size = parseStringSize(width);
if (size != null) {
@@ -1190,6 +1215,7 @@ public abstract class AbstractComponent extends AbstractClientConnector
*
* @see com.vaadin.terminal.Sizeable#setHeight(java.lang.String)
*/
+ @Override
public void setHeight(String height) {
Size size = parseStringSize(height);
if (size != null) {
diff --git a/src/com/vaadin/ui/AbstractComponentContainer.java b/src/com/vaadin/ui/AbstractComponentContainer.java
index 8ef458b704..bc27242bb8 100644
--- a/src/com/vaadin/ui/AbstractComponentContainer.java
+++ b/src/com/vaadin/ui/AbstractComponentContainer.java
@@ -38,6 +38,7 @@ public abstract class AbstractComponentContainer extends AbstractComponent
* Removes all components from the container. This should probably be
* re-implemented in extending classes for a more powerful implementation.
*/
+ @Override
public void removeAllComponents() {
final LinkedList<Component> l = new LinkedList<Component>();
@@ -57,6 +58,7 @@ public abstract class AbstractComponentContainer extends AbstractComponent
* add a JavaDoc comment here, we use the default documentation from
* implemented interface.
*/
+ @Override
public void moveComponentsFrom(ComponentContainer source) {
final LinkedList<Component> components = new LinkedList<Component>();
for (final Iterator<Component> i = source.getComponentIterator(); i
@@ -93,24 +95,28 @@ public abstract class AbstractComponentContainer extends AbstractComponent
}
/* documented in interface */
+ @Override
public void addListener(ComponentAttachListener listener) {
addListener(ComponentContainer.ComponentAttachEvent.class, listener,
COMPONENT_ATTACHED_METHOD);
}
/* documented in interface */
+ @Override
public void addListener(ComponentDetachListener listener) {
addListener(ComponentContainer.ComponentDetachEvent.class, listener,
COMPONENT_DETACHED_METHOD);
}
/* documented in interface */
+ @Override
public void removeListener(ComponentAttachListener listener) {
removeListener(ComponentContainer.ComponentAttachEvent.class, listener,
COMPONENT_ATTACHED_METHOD);
}
/* documented in interface */
+ @Override
public void removeListener(ComponentDetachListener listener) {
removeListener(ComponentContainer.ComponentDetachEvent.class, listener,
COMPONENT_DETACHED_METHOD);
@@ -147,6 +153,7 @@ public abstract class AbstractComponentContainer extends AbstractComponent
*
* @see com.vaadin.ui.ComponentContainer#addComponent(Component)
*/
+ @Override
public void addComponent(Component c) {
if (c instanceof ComponentContainer) {
// Make sure we're not adding the component inside it's own content
@@ -177,6 +184,7 @@ public abstract class AbstractComponentContainer extends AbstractComponent
*
* @see com.vaadin.ui.ComponentContainer#removeComponent(Component)
*/
+ @Override
public void removeComponent(Component c) {
if (c.getParent() == this) {
c.setParent(null);
@@ -325,6 +333,7 @@ public abstract class AbstractComponentContainer extends AbstractComponent
true);
}
+ @Override
public Iterator<Component> iterator() {
return getComponentIterator();
}
@@ -335,6 +344,7 @@ public abstract class AbstractComponentContainer extends AbstractComponent
* @see
* com.vaadin.ui.HasComponents#isComponentVisible(com.vaadin.ui.Component)
*/
+ @Override
public boolean isComponentVisible(Component childComponent) {
return true;
}
diff --git a/src/com/vaadin/ui/AbstractField.java b/src/com/vaadin/ui/AbstractField.java
index ce62fb43ed..6fe7f54df5 100644
--- a/src/com/vaadin/ui/AbstractField.java
+++ b/src/com/vaadin/ui/AbstractField.java
@@ -25,10 +25,10 @@ import com.vaadin.data.util.converter.ConverterUtil;
import com.vaadin.event.Action;
import com.vaadin.event.ShortcutAction;
import com.vaadin.event.ShortcutListener;
+import com.vaadin.shared.AbstractFieldState;
import com.vaadin.terminal.AbstractErrorMessage;
import com.vaadin.terminal.CompositeErrorMessage;
import com.vaadin.terminal.ErrorMessage;
-import com.vaadin.terminal.gwt.client.AbstractFieldState;
/**
* <p>
@@ -178,6 +178,7 @@ public abstract class AbstractField<T> extends AbstractComponent implements
*
* @return the type of the Field
*/
+ @Override
public abstract Class<? extends T> getType();
/**
@@ -206,6 +207,7 @@ public abstract class AbstractField<T> extends AbstractComponent implements
*
* @see com.vaadin.data.BufferedValidatable#isInvalidCommitted()
*/
+ @Override
public boolean isInvalidCommitted() {
return invalidCommitted;
}
@@ -215,6 +217,7 @@ public abstract class AbstractField<T> extends AbstractComponent implements
*
* @see com.vaadin.data.BufferedValidatable#setInvalidCommitted(boolean)
*/
+ @Override
public void setInvalidCommitted(boolean isCommitted) {
invalidCommitted = isCommitted;
}
@@ -223,6 +226,7 @@ public abstract class AbstractField<T> extends AbstractComponent implements
* Saves the current value to the data source Don't add a JavaDoc comment
* here, we use the default documentation from the implemented interface.
*/
+ @Override
public void commit() throws Buffered.SourceException, InvalidValueException {
if (dataSource != null && !dataSource.isReadOnly()) {
if ((isInvalidCommitted() || isValid())) {
@@ -271,6 +275,7 @@ public abstract class AbstractField<T> extends AbstractComponent implements
* Updates the value from the data source. Don't add a JavaDoc comment here,
* we use the default documentation from the implemented interface.
*/
+ @Override
public void discard() throws Buffered.SourceException {
if (dataSource != null) {
@@ -343,6 +348,7 @@ public abstract class AbstractField<T> extends AbstractComponent implements
* comment here, we use the default documentation from the implemented
* interface.
*/
+ @Override
public boolean isModified() {
return getState().isModified();
}
@@ -356,6 +362,7 @@ public abstract class AbstractField<T> extends AbstractComponent implements
* Tests if the field is in write-through mode. Don't add a JavaDoc comment
* here, we use the default documentation from the implemented interface.
*/
+ @Override
public boolean isWriteThrough() {
return writeThroughMode;
}
@@ -381,6 +388,7 @@ public abstract class AbstractField<T> extends AbstractComponent implements
* setReadThrough(true), setWriteThrough(true) equals
* setBuffered(false)
*/
+ @Override
@Deprecated
public void setWriteThrough(boolean writeThrough)
throws Buffered.SourceException, InvalidValueException {
@@ -397,6 +405,7 @@ public abstract class AbstractField<T> extends AbstractComponent implements
* Tests if the field is in read-through mode. Don't add a JavaDoc comment
* here, we use the default documentation from the implemented interface.
*/
+ @Override
public boolean isReadThrough() {
return readThroughMode;
}
@@ -420,6 +429,7 @@ public abstract class AbstractField<T> extends AbstractComponent implements
* setReadThrough(true), setWriteThrough(true) equals
* setBuffered(false)
*/
+ @Override
@Deprecated
public void setReadThrough(boolean readThrough)
throws Buffered.SourceException {
@@ -452,6 +462,7 @@ public abstract class AbstractField<T> extends AbstractComponent implements
* @param buffered
* true if buffered mode should be turned on, false otherwise
*/
+ @Override
public void setBuffered(boolean buffered) {
setReadThrough(!buffered);
setWriteThrough(!buffered);
@@ -464,6 +475,7 @@ public abstract class AbstractField<T> extends AbstractComponent implements
*
* @return true if buffered mode is on, false otherwise
*/
+ @Override
public boolean isBuffered() {
return !isReadThrough() && !isWriteThrough();
}
@@ -517,6 +529,7 @@ public abstract class AbstractField<T> extends AbstractComponent implements
*
* @return the current value of the field.
*/
+ @Override
public T getValue() {
return getFieldValue();
}
@@ -528,6 +541,7 @@ public abstract class AbstractField<T> extends AbstractComponent implements
* the New value of the field.
* @throws Property.ReadOnlyException
*/
+ @Override
public void setValue(Object newFieldValue)
throws Property.ReadOnlyException, Converter.ConversionException {
// This check is needed as long as setValue accepts Object instead of T
@@ -644,6 +658,7 @@ public abstract class AbstractField<T> extends AbstractComponent implements
* @return the current data source as a Property, or <code>null</code> if
* none defined.
*/
+ @Override
public Property getPropertyDataSource() {
return dataSource;
}
@@ -686,6 +701,7 @@ public abstract class AbstractField<T> extends AbstractComponent implements
* @param newDataSource
* the new data source Property.
*/
+ @Override
public void setPropertyDataSource(Property newDataSource) {
// Saves the old value
@@ -863,6 +879,7 @@ public abstract class AbstractField<T> extends AbstractComponent implements
* @param validator
* the new validator to be added.
*/
+ @Override
public void addValidator(Validator validator) {
if (validators == null) {
validators = new LinkedList<Validator>();
@@ -877,6 +894,7 @@ public abstract class AbstractField<T> extends AbstractComponent implements
* @return the Unmodifiable collection that holds all validators for the
* field.
*/
+ @Override
public Collection<Validator> getValidators() {
if (validators == null || validators.isEmpty()) {
return null;
@@ -890,6 +908,7 @@ public abstract class AbstractField<T> extends AbstractComponent implements
* @param validator
* the validator to remove.
*/
+ @Override
public void removeValidator(Validator validator) {
if (validators != null) {
validators.remove(validator);
@@ -919,6 +938,7 @@ public abstract class AbstractField<T> extends AbstractComponent implements
* current value is valid or if the field is empty and not required,
* <code>false</code> otherwise.
*/
+ @Override
public boolean isValid() {
try {
@@ -943,6 +963,7 @@ public abstract class AbstractField<T> extends AbstractComponent implements
*
* @see com.vaadin.data.Validatable#validate()
*/
+ @Override
public void validate() throws Validator.InvalidValueException {
if (isRequired() && isEmpty()) {
@@ -1014,6 +1035,7 @@ public abstract class AbstractField<T> extends AbstractComponent implements
* @return true iff the invalid values are allowed.
* @see com.vaadin.data.Validatable#isInvalidAllowed()
*/
+ @Override
public boolean isInvalidAllowed() {
return invalidAllowed;
}
@@ -1031,6 +1053,7 @@ public abstract class AbstractField<T> extends AbstractComponent implements
*
* @see com.vaadin.data.Validatable#setInvalidAllowed(boolean)
*/
+ @Override
public void setInvalidAllowed(boolean invalidAllowed)
throws UnsupportedOperationException {
this.invalidAllowed = invalidAllowed;
@@ -1103,6 +1126,7 @@ public abstract class AbstractField<T> extends AbstractComponent implements
* Adds a value change listener for the field. Don't add a JavaDoc comment
* here, we use the default documentation from the implemented interface.
*/
+ @Override
public void addListener(Property.ValueChangeListener listener) {
addListener(AbstractField.ValueChangeEvent.class, listener,
VALUE_CHANGE_METHOD);
@@ -1113,6 +1137,7 @@ public abstract class AbstractField<T> extends AbstractComponent implements
* comment here, we use the default documentation from the implemented
* interface.
*/
+ @Override
public void removeListener(Property.ValueChangeListener listener) {
removeListener(AbstractField.ValueChangeEvent.class, listener,
VALUE_CHANGE_METHOD);
@@ -1152,6 +1177,7 @@ public abstract class AbstractField<T> extends AbstractComponent implements
*
* @see Property.ReadOnlyStatusChangeListener
*/
+ @Override
public void readOnlyStatusChange(Property.ReadOnlyStatusChangeEvent event) {
getState().setPropertyReadOnly(event.getProperty().isReadOnly());
requestRepaint();
@@ -1184,6 +1210,7 @@ public abstract class AbstractField<T> extends AbstractComponent implements
*
* @return the Source of the event.
*/
+ @Override
public Property getProperty() {
return (Property) getSource();
}
@@ -1194,6 +1221,7 @@ public abstract class AbstractField<T> extends AbstractComponent implements
* JavaDoc comment here, we use the default documentation from the
* implemented interface.
*/
+ @Override
public void addListener(Property.ReadOnlyStatusChangeListener listener) {
addListener(Property.ReadOnlyStatusChangeEvent.class, listener,
READ_ONLY_STATUS_CHANGE_METHOD);
@@ -1204,6 +1232,7 @@ public abstract class AbstractField<T> extends AbstractComponent implements
* JavaDoc comment here, we use the default documentation from the
* implemented interface.
*/
+ @Override
public void removeListener(Property.ReadOnlyStatusChangeListener listener) {
removeListener(Property.ReadOnlyStatusChangeEvent.class, listener,
READ_ONLY_STATUS_CHANGE_METHOD);
@@ -1228,6 +1257,7 @@ public abstract class AbstractField<T> extends AbstractComponent implements
* the value change event telling the data source contents have
* changed.
*/
+ @Override
public void valueChange(Property.ValueChangeEvent event) {
if (isReadThrough()) {
if (committingValueToDataSource) {
@@ -1271,6 +1301,7 @@ public abstract class AbstractField<T> extends AbstractComponent implements
*
* @see com.vaadin.ui.Component.Focusable#getTabIndex()
*/
+ @Override
public int getTabIndex() {
return getState().getTabIndex();
}
@@ -1280,6 +1311,7 @@ public abstract class AbstractField<T> extends AbstractComponent implements
*
* @see com.vaadin.ui.Component.Focusable#setTabIndex(int)
*/
+ @Override
public void setTabIndex(int tabIndex) {
getState().setTabIndex(tabIndex);
requestRepaint();
@@ -1362,6 +1394,7 @@ public abstract class AbstractField<T> extends AbstractComponent implements
* @return <code>true</code> if the field is required, otherwise
* <code>false</code>.
*/
+ @Override
public boolean isRequired() {
return getState().isRequired();
}
@@ -1381,6 +1414,7 @@ public abstract class AbstractField<T> extends AbstractComponent implements
* @param required
* Is the field required.
*/
+ @Override
public void setRequired(boolean required) {
getState().setRequired(required);
requestRepaint();
@@ -1395,11 +1429,13 @@ public abstract class AbstractField<T> extends AbstractComponent implements
* @param requiredMessage
* Message to be shown when this field is required, but empty.
*/
+ @Override
public void setRequiredError(String requiredMessage) {
requiredError = requiredMessage;
requestRepaint();
}
+ @Override
public String getRequiredError() {
return requiredError;
}
diff --git a/src/com/vaadin/ui/AbstractJavaScriptComponent.java b/src/com/vaadin/ui/AbstractJavaScriptComponent.java
index 95c45f55f9..3668669d16 100644
--- a/src/com/vaadin/ui/AbstractJavaScriptComponent.java
+++ b/src/com/vaadin/ui/AbstractJavaScriptComponent.java
@@ -3,8 +3,9 @@
*/
package com.vaadin.ui;
+import com.vaadin.shared.ui.JavaScriptComponentState;
import com.vaadin.terminal.JavaScriptCallbackHelper;
-import com.vaadin.terminal.gwt.client.ui.JavaScriptComponentState;
+import com.vaadin.terminal.gwt.client.ApplicationConnection;
import com.vaadin.terminal.gwt.client.ui.JavaScriptWidget;
/**
@@ -37,9 +38,9 @@ import com.vaadin.terminal.gwt.client.ui.JavaScriptWidget;
* the connector's parent. If <code>connectorId</code> is provided, the id of
* the parent of the corresponding connector with the passed id is returned
* instead.</li>
- * <li><code>getWidgetElement([connectorId])</code> - returns the DOM Element
- * that is the root of a connector's widget. <code>null</code> is returned if
- * the connector can not be found or if the connector doesn't have a widget. If
+ * <li><code>getElement([connectorId])</code> - returns the DOM Element that is
+ * the root of a connector's widget. <code>null</code> is returned if the
+ * connector can not be found or if the connector doesn't have a widget. If
* <code>connectorId</code> is not provided, the connector id of the current
* connector will be used.</li>
* <li><code>getState()</code> - returns an object corresponding to the shared
@@ -66,6 +67,9 @@ import com.vaadin.terminal.gwt.client.ui.JavaScriptWidget;
* exception when called. The scheme for conversion between Java types in the
* RPC interface and the JavaScript values that should be passed to the
* functions is described bellow.</li>
+ * <li><code>translateVaadinUri(uri)</code> - Translates a Vaadin URI to a URL
+ * that can be used in the browser. This is just way of accessing
+ * {@link ApplicationConnection#translateVaadinUri(String)}</li>
* </ul>
* The connector wrapper also supports these special functions:
* <ul>
@@ -110,7 +114,7 @@ import com.vaadin.terminal.gwt.client.ui.JavaScriptWidget;
* @version @VERSION@
* @since 7.0.0
*/
-public class AbstractJavaScriptComponent extends AbstractComponent {
+public abstract class AbstractJavaScriptComponent extends AbstractComponent {
private JavaScriptCallbackHelper callbackHelper = new JavaScriptCallbackHelper(
this);
@@ -142,8 +146,9 @@ public class AbstractJavaScriptComponent extends AbstractComponent {
/**
* Invoke a named function that the connector JavaScript has added to the
* JavaScript connector wrapper object. The arguments should only contain
- * data types that can be represented in JavaScript, including primitive
- * boxing types, arrays, String, List, Set, Map, Connector and JavaBeans.
+ * data types that can be represented in JavaScript including primitives,
+ * their boxed types, arrays, String, List, Set, Map, Connector and
+ * JavaBeans.
*
* @param name
* the name of the function
diff --git a/src/com/vaadin/ui/AbstractLayout.java b/src/com/vaadin/ui/AbstractLayout.java
index 4876b40265..7b3a537d06 100644
--- a/src/com/vaadin/ui/AbstractLayout.java
+++ b/src/com/vaadin/ui/AbstractLayout.java
@@ -4,7 +4,7 @@
package com.vaadin.ui;
-import com.vaadin.terminal.gwt.client.ui.AbstractLayoutState;
+import com.vaadin.shared.ui.AbstractLayoutState;
import com.vaadin.ui.Layout.MarginHandler;
/**
@@ -32,6 +32,7 @@ public abstract class AbstractLayout extends AbstractComponentContainer
*
* @see com.vaadin.ui.Layout#setMargin(boolean)
*/
+ @Override
public void setMargin(boolean enabled) {
margins.setMargins(enabled);
getState().setMarginsBitmask(margins.getBitMask());
@@ -43,6 +44,7 @@ public abstract class AbstractLayout extends AbstractComponentContainer
*
* @see com.vaadin.ui.Layout.MarginHandler#getMargin()
*/
+ @Override
public MarginInfo getMargin() {
return margins;
}
@@ -52,6 +54,7 @@ public abstract class AbstractLayout extends AbstractComponentContainer
*
* @see com.vaadin.ui.Layout.MarginHandler#setMargin(MarginInfo)
*/
+ @Override
public void setMargin(MarginInfo marginInfo) {
margins.setMargins(marginInfo);
getState().setMarginsBitmask(margins.getBitMask());
@@ -63,6 +66,7 @@ public abstract class AbstractLayout extends AbstractComponentContainer
*
* @see com.vaadin.ui.Layout#setMargin(boolean, boolean, boolean, boolean)
*/
+ @Override
public void setMargin(boolean topEnabled, boolean rightEnabled,
boolean bottomEnabled, boolean leftEnabled) {
margins.setMargins(topEnabled, rightEnabled, bottomEnabled, leftEnabled);
diff --git a/src/com/vaadin/ui/AbstractMedia.java b/src/com/vaadin/ui/AbstractMedia.java
index 760d9878ca..71b2e38ef3 100644
--- a/src/com/vaadin/ui/AbstractMedia.java
+++ b/src/com/vaadin/ui/AbstractMedia.java
@@ -7,10 +7,10 @@ package com.vaadin.ui;
import java.util.ArrayList;
import java.util.List;
+import com.vaadin.shared.communication.URLReference;
+import com.vaadin.shared.ui.AbstractMediaState;
+import com.vaadin.shared.ui.MediaControl;
import com.vaadin.terminal.Resource;
-import com.vaadin.terminal.gwt.client.communication.URLReference;
-import com.vaadin.terminal.gwt.client.ui.AbstractMediaState;
-import com.vaadin.terminal.gwt.client.ui.MediaBaseConnector.MediaControl;
import com.vaadin.terminal.gwt.server.ResourceReference;
/**
@@ -18,7 +18,7 @@ import com.vaadin.terminal.gwt.server.ResourceReference;
*
* @author Vaadin Ltd
*/
-public class AbstractMedia extends AbstractComponent {
+public abstract class AbstractMedia extends AbstractComponent {
@Override
public AbstractMediaState getState() {
diff --git a/src/com/vaadin/ui/AbstractOrderedLayout.java b/src/com/vaadin/ui/AbstractOrderedLayout.java
index 2cd6fc2a9a..0581d0a279 100644
--- a/src/com/vaadin/ui/AbstractOrderedLayout.java
+++ b/src/com/vaadin/ui/AbstractOrderedLayout.java
@@ -10,13 +10,13 @@ import java.util.LinkedList;
import com.vaadin.event.LayoutEvents.LayoutClickEvent;
import com.vaadin.event.LayoutEvents.LayoutClickListener;
import com.vaadin.event.LayoutEvents.LayoutClickNotifier;
+import com.vaadin.shared.Connector;
+import com.vaadin.shared.MouseEventDetails;
+import com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutServerRpc;
+import com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState;
+import com.vaadin.shared.ui.orderedlayout.AbstractOrderedLayoutState.ChildComponentData;
import com.vaadin.terminal.Sizeable;
-import com.vaadin.terminal.gwt.client.Connector;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
import com.vaadin.terminal.gwt.client.ui.LayoutClickEventHandler;
-import com.vaadin.terminal.gwt.client.ui.orderedlayout.AbstractOrderedLayoutServerRpc;
-import com.vaadin.terminal.gwt.client.ui.orderedlayout.AbstractOrderedLayoutState;
-import com.vaadin.terminal.gwt.client.ui.orderedlayout.AbstractOrderedLayoutState.ChildComponentData;
@SuppressWarnings("serial")
public abstract class AbstractOrderedLayout extends AbstractLayout implements
@@ -24,6 +24,7 @@ public abstract class AbstractOrderedLayout extends AbstractLayout implements
private AbstractOrderedLayoutServerRpc rpc = new AbstractOrderedLayoutServerRpc() {
+ @Override
public void layoutClick(MouseEventDetails mouseDetails,
Connector clickedConnector) {
fireEvent(LayoutClickEvent.createEvent(AbstractOrderedLayout.this,
@@ -157,6 +158,7 @@ public abstract class AbstractOrderedLayout extends AbstractLayout implements
*
* @return the Iterator of the components inside the container.
*/
+ @Override
public Iterator<Component> getComponentIterator() {
return components.iterator();
}
@@ -167,11 +169,13 @@ public abstract class AbstractOrderedLayout extends AbstractLayout implements
*
* @return the number of contained components
*/
+ @Override
public int getComponentCount() {
return components.size();
}
/* Documented in superclass */
+ @Override
public void replaceComponent(Component oldComponent, Component newComponent) {
// Gets the locations
@@ -220,12 +224,14 @@ public abstract class AbstractOrderedLayout extends AbstractLayout implements
* @see com.vaadin.ui.Layout.AlignmentHandler#setComponentAlignment(com
* .vaadin.ui.Component, int, int)
*/
+ @Override
public void setComponentAlignment(Component childComponent,
int horizontalAlignment, int verticalAlignment) {
Alignment a = new Alignment(horizontalAlignment + verticalAlignment);
setComponentAlignment(childComponent, a);
}
+ @Override
public void setComponentAlignment(Component childComponent,
Alignment alignment) {
ChildComponentData childData = getState().getChildData().get(
@@ -247,6 +253,7 @@ public abstract class AbstractOrderedLayout extends AbstractLayout implements
* @see com.vaadin.ui.Layout.AlignmentHandler#getComponentAlignment(com
* .vaadin.ui.Component)
*/
+ @Override
public Alignment getComponentAlignment(Component childComponent) {
ChildComponentData childData = getState().getChildData().get(
childComponent);
@@ -263,6 +270,7 @@ public abstract class AbstractOrderedLayout extends AbstractLayout implements
*
* @see com.vaadin.ui.Layout.SpacingHandler#setSpacing(boolean)
*/
+ @Override
public void setSpacing(boolean spacing) {
getState().setSpacing(spacing);
requestRepaint();
@@ -273,6 +281,7 @@ public abstract class AbstractOrderedLayout extends AbstractLayout implements
*
* @see com.vaadin.ui.Layout.SpacingHandler#isSpacing()
*/
+ @Override
public boolean isSpacing() {
return getState().isSpacing();
}
@@ -334,12 +343,14 @@ public abstract class AbstractOrderedLayout extends AbstractLayout implements
return childData.getExpandRatio();
}
+ @Override
public void addListener(LayoutClickListener listener) {
addListener(LayoutClickEventHandler.LAYOUT_CLICK_EVENT_IDENTIFIER,
LayoutClickEvent.class, listener,
LayoutClickListener.clickMethod);
}
+ @Override
public void removeListener(LayoutClickListener listener) {
removeListener(LayoutClickEventHandler.LAYOUT_CLICK_EVENT_IDENTIFIER,
LayoutClickEvent.class, listener);
diff --git a/src/com/vaadin/ui/AbstractSelect.java b/src/com/vaadin/ui/AbstractSelect.java
index 6a927251af..0a97ceb649 100644
--- a/src/com/vaadin/ui/AbstractSelect.java
+++ b/src/com/vaadin/ui/AbstractSelect.java
@@ -27,12 +27,12 @@ import com.vaadin.event.dd.TargetDetailsImpl;
import com.vaadin.event.dd.acceptcriteria.ClientSideCriterion;
import com.vaadin.event.dd.acceptcriteria.ContainsDataFlavor;
import com.vaadin.event.dd.acceptcriteria.TargetDetailIs;
+import com.vaadin.shared.ui.dd.VerticalDropLocation;
import com.vaadin.terminal.KeyMapper;
import com.vaadin.terminal.PaintException;
import com.vaadin.terminal.PaintTarget;
import com.vaadin.terminal.Resource;
import com.vaadin.terminal.Vaadin6Component;
-import com.vaadin.terminal.gwt.client.ui.dd.VerticalDropLocation;
import com.vaadin.ui.AbstractSelect.ItemCaptionMode;
/**
@@ -320,6 +320,7 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
* @throws PaintException
* if the paint operation failed.
*/
+ @Override
public void paintContent(PaintTarget target) throws PaintException {
// Paints select attributes
@@ -422,6 +423,7 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
* @see com.vaadin.ui.AbstractComponent#changeVariables(java.lang.Object,
* java.util.Map)
*/
+ @Override
public void changeVariables(Object source, Map<String, Object> variables) {
// New option entered (and it is allowed)
@@ -434,7 +436,8 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
// Selection change
if (variables.containsKey("selected")) {
- final String[] ka = (String[]) variables.get("selected");
+ final String[] clientSideSelectedKeys = (String[]) variables
+ .get("selected");
// Multiselect mode
if (isMultiSelect()) {
@@ -442,19 +445,20 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
// TODO Optimize by adding repaintNotNeeded when applicable
// Converts the key-array to id-set
- final LinkedList<Object> s = new LinkedList<Object>();
- for (int i = 0; i < ka.length; i++) {
- final Object id = itemIdMapper.get(ka[i]);
+ final LinkedList<Object> acceptedSelections = new LinkedList<Object>();
+ for (int i = 0; i < clientSideSelectedKeys.length; i++) {
+ final Object id = itemIdMapper
+ .get(clientSideSelectedKeys[i]);
if (!isNullSelectionAllowed()
&& (id == null || id == getNullSelectionItemId())) {
// skip empty selection if nullselection is not allowed
requestRepaint();
} else if (id != null && containsId(id)) {
- s.add(id);
+ acceptedSelections.add(id);
}
}
- if (!isNullSelectionAllowed() && s.size() < 1) {
+ if (!isNullSelectionAllowed() && acceptedSelections.size() < 1) {
// empty selection not allowed, keep old value
requestRepaint();
return;
@@ -462,27 +466,32 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
// Limits the deselection to the set of visible items
// (non-visible items can not be deselected)
- final Collection<?> visible = getVisibleItemIds();
- if (visible != null) {
+ Collection<?> visibleNotSelected = getVisibleItemIds();
+ if (visibleNotSelected != null) {
+ visibleNotSelected = new HashSet<Object>(visibleNotSelected);
+ // Don't remove those that will be added to preserve order
+ visibleNotSelected.removeAll(acceptedSelections);
+
@SuppressWarnings("unchecked")
Set<Object> newsel = (Set<Object>) getValue();
if (newsel == null) {
- newsel = new HashSet<Object>();
+ newsel = new LinkedHashSet<Object>();
} else {
- newsel = new HashSet<Object>(newsel);
+ newsel = new LinkedHashSet<Object>(newsel);
}
- newsel.removeAll(visible);
- newsel.addAll(s);
+ newsel.removeAll(visibleNotSelected);
+ newsel.addAll(acceptedSelections);
setValue(newsel, true);
}
} else {
// Single select mode
if (!isNullSelectionAllowed()
- && (ka.length == 0 || ka[0] == null || ka[0] == getNullSelectionItemId())) {
+ && (clientSideSelectedKeys.length == 0
+ || clientSideSelectedKeys[0] == null || clientSideSelectedKeys[0] == getNullSelectionItemId())) {
requestRepaint();
return;
}
- if (ka.length == 0) {
+ if (clientSideSelectedKeys.length == 0) {
// Allows deselection only if the deselected item is
// visible
final Object current = getValue();
@@ -491,7 +500,8 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
setValue(null, true);
}
} else {
- final Object id = itemIdMapper.get(ka[0]);
+ final Object id = itemIdMapper
+ .get(clientSideSelectedKeys[0]);
if (!isNullSelectionAllowed() && id == null) {
requestRepaint();
} else if (id != null
@@ -542,6 +552,7 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
*
*/
public class DefaultNewItemHandler implements NewItemHandler {
+ @Override
public void addNewItem(String newItemCaption) {
// Checks for readonly
if (isReadOnly()) {
@@ -672,10 +683,10 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
if (isMultiSelect()) {
if (newValue == null) {
- super.setValue(new HashSet<Object>(), repaintIsNotNeeded);
+ super.setValue(new LinkedHashSet<Object>(), repaintIsNotNeeded);
} else if (Collection.class.isAssignableFrom(newValue.getClass())) {
- super.setValue(new HashSet<Object>((Collection<?>) newValue),
- repaintIsNotNeeded);
+ super.setValue(new LinkedHashSet<Object>(
+ (Collection<?>) newValue), repaintIsNotNeeded);
}
} else if (newValue == null || items.containsId(newValue)) {
super.setValue(newValue, repaintIsNotNeeded);
@@ -692,6 +703,7 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
* the item id.
* @return the item from the container.
*/
+ @Override
public Item getItem(Object itemId) {
return items.getItem(itemId);
}
@@ -701,6 +713,7 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
*
* @return the Collection of item ids.
*/
+ @Override
public Collection<?> getItemIds() {
return items.getItemIds();
}
@@ -710,6 +723,7 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
*
* @return the Collection of property ids.
*/
+ @Override
public Collection<?> getContainerPropertyIds() {
return items.getContainerPropertyIds();
}
@@ -721,6 +735,7 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
* the Id identifying the property.
* @see com.vaadin.data.Container#getType(java.lang.Object)
*/
+ @Override
public Class<?> getType(Object propertyId) {
return items.getType(propertyId);
}
@@ -732,6 +747,7 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
*
* @see com.vaadin.data.Container#size()
*/
+ @Override
public int size() {
return items.size();
}
@@ -742,6 +758,7 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
* @param itemId
* the Id the of item to be tested.
*/
+ @Override
public boolean containsId(Object itemId) {
if (itemId != null) {
return items.containsId(itemId);
@@ -756,6 +773,7 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
*
* @see com.vaadin.data.Container#getContainerProperty(Object, Object)
*/
+ @Override
public Property<?> getContainerProperty(Object itemId, Object propertyId) {
return items.getContainerProperty(itemId, propertyId);
}
@@ -771,6 +789,7 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
* @see com.vaadin.data.Container#addContainerProperty(java.lang.Object,
* java.lang.Class, java.lang.Object)
*/
+ @Override
public boolean addContainerProperty(Object propertyId, Class<?> type,
Object defaultValue) throws UnsupportedOperationException {
@@ -791,6 +810,7 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
* @return True if the operation succeeded.
* @see com.vaadin.data.Container#removeAllItems()
*/
+ @Override
public boolean removeAllItems() throws UnsupportedOperationException {
final boolean retval = items.removeAllItems();
@@ -812,6 +832,7 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
* @return the Id of the created item or null in case of failure.
* @see com.vaadin.data.Container#addItem()
*/
+ @Override
public Object addItem() throws UnsupportedOperationException {
final Object retval = items.addItem();
@@ -836,6 +857,7 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
* @return the Created item with the given id, or null in case of failure.
* @see com.vaadin.data.Container#addItem(java.lang.Object)
*/
+ @Override
public Item addItem(Object itemId) throws UnsupportedOperationException {
final Item retval = items.addItem(itemId);
@@ -851,6 +873,7 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
*
* @see com.vaadin.data.Container#removeItem(java.lang.Object)
*/
+ @Override
public boolean removeItem(Object itemId)
throws UnsupportedOperationException {
@@ -873,6 +896,7 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
* @return True if the operation succeeded.
* @see com.vaadin.data.Container#removeContainerProperty(java.lang.Object)
*/
+ @Override
public boolean removeContainerProperty(Object propertyId)
throws UnsupportedOperationException {
@@ -896,6 +920,7 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
* @param newDataSource
* the new data source.
*/
+ @Override
public void setContainerDataSource(Container newDataSource) {
if (newDataSource == null) {
newDataSource = new IndexedContainer();
@@ -950,6 +975,7 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
*
* @see com.vaadin.data.Container.Viewer#getContainerDataSource()
*/
+ @Override
public Container getContainerDataSource() {
return items;
}
@@ -1432,6 +1458,7 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
*
* @see com.vaadin.data.Container.PropertySetChangeListener#containerPropertySetChange(com.vaadin.data.Container.PropertySetChangeEvent)
*/
+ @Override
public void containerPropertySetChange(
Container.PropertySetChangeEvent event) {
firePropertySetChange();
@@ -1442,6 +1469,7 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
*
* @see com.vaadin.data.Container.PropertySetChangeNotifier#addListener(com.vaadin.data.Container.PropertySetChangeListener)
*/
+ @Override
public void addListener(Container.PropertySetChangeListener listener) {
if (propertySetEventListeners == null) {
propertySetEventListeners = new LinkedHashSet<Container.PropertySetChangeListener>();
@@ -1454,6 +1482,7 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
*
* @see com.vaadin.data.Container.PropertySetChangeNotifier#removeListener(com.vaadin.data.Container.PropertySetChangeListener)
*/
+ @Override
public void removeListener(Container.PropertySetChangeListener listener) {
if (propertySetEventListeners != null) {
propertySetEventListeners.remove(listener);
@@ -1468,6 +1497,7 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
*
* @see com.vaadin.data.Container.ItemSetChangeNotifier#addListener(com.vaadin.data.Container.ItemSetChangeListener)
*/
+ @Override
public void addListener(Container.ItemSetChangeListener listener) {
if (itemSetEventListeners == null) {
itemSetEventListeners = new LinkedHashSet<Container.ItemSetChangeListener>();
@@ -1480,6 +1510,7 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
*
* @see com.vaadin.data.Container.ItemSetChangeNotifier#removeListener(com.vaadin.data.Container.ItemSetChangeListener)
*/
+ @Override
public void removeListener(Container.ItemSetChangeListener listener) {
if (itemSetEventListeners != null) {
itemSetEventListeners.remove(listener);
@@ -1516,6 +1547,7 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
*
* @see com.vaadin.data.Container.ItemSetChangeListener#containerItemSetChange(com.vaadin.data.Container.ItemSetChangeEvent)
*/
+ @Override
public void containerItemSetChange(Container.ItemSetChangeEvent event) {
// Clears the item id mapping table
itemIdMapper.removeAll();
@@ -1566,6 +1598,7 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
*
* @see com.vaadin.data.Container.ItemSetChangeEvent#getContainer()
*/
+ @Override
public Container getContainer() {
return AbstractSelect.this;
}
@@ -1583,6 +1616,7 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
*
* @see com.vaadin.data.Container.PropertySetChangeEvent#getContainer()
*/
+ @Override
public Container getContainer() {
return AbstractSelect.this;
}
@@ -1778,10 +1812,12 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
captionChangeNotifiers.clear();
}
+ @Override
public void valueChange(com.vaadin.data.Property.ValueChangeEvent event) {
requestRepaint();
}
+ @Override
public void itemPropertySetChange(
com.vaadin.data.Item.PropertySetChangeEvent event) {
requestRepaint();
@@ -1809,6 +1845,7 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
super(select, itemId);
}
+ @Override
public boolean accept(DragAndDropEvent dragEvent) {
AbstractSelectTargetDetails dropTargetData = (AbstractSelectTargetDetails) dragEvent
.getTargetDetails();
@@ -1875,6 +1912,7 @@ public abstract class AbstractSelect extends AbstractField<Object> implements
super(select, itemId);
}
+ @Override
public boolean accept(DragAndDropEvent dragEvent) {
DataBoundTransferable transferable = (DataBoundTransferable) dragEvent
.getTransferable();
diff --git a/src/com/vaadin/ui/AbstractSplitPanel.java b/src/com/vaadin/ui/AbstractSplitPanel.java
index 876d39f2ae..90dc38ff65 100644
--- a/src/com/vaadin/ui/AbstractSplitPanel.java
+++ b/src/com/vaadin/ui/AbstractSplitPanel.java
@@ -10,12 +10,12 @@ import java.util.Iterator;
import com.vaadin.event.ComponentEventListener;
import com.vaadin.event.MouseEvents.ClickEvent;
+import com.vaadin.shared.MouseEventDetails;
+import com.vaadin.shared.ui.splitpanel.AbstractSplitPanelRpc;
+import com.vaadin.shared.ui.splitpanel.AbstractSplitPanelState;
+import com.vaadin.shared.ui.splitpanel.AbstractSplitPanelState.SplitterState;
import com.vaadin.terminal.Sizeable;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
import com.vaadin.terminal.gwt.client.ui.ClickEventHandler;
-import com.vaadin.terminal.gwt.client.ui.splitpanel.AbstractSplitPanelRpc;
-import com.vaadin.terminal.gwt.client.ui.splitpanel.AbstractSplitPanelState;
-import com.vaadin.terminal.gwt.client.ui.splitpanel.AbstractSplitPanelState.SplitterState;
import com.vaadin.tools.ReflectTools;
/**
@@ -38,11 +38,13 @@ public abstract class AbstractSplitPanel extends AbstractComponentContainer {
private AbstractSplitPanelRpc rpc = new AbstractSplitPanelRpc() {
+ @Override
public void splitterClick(MouseEventDetails mouseDetails) {
fireEvent(new SplitterClickEvent(AbstractSplitPanel.this,
mouseDetails));
}
+ @Override
public void setSplitterPosition(float position) {
getSplitterState().setPosition(position);
}
@@ -63,6 +65,7 @@ public abstract class AbstractSplitPanel extends AbstractComponentContainer {
int i = 0;
+ @Override
public boolean hasNext() {
if (i < getComponentCount()) {
return true;
@@ -70,6 +73,7 @@ public abstract class AbstractSplitPanel extends AbstractComponentContainer {
return false;
}
+ @Override
public Component next() {
if (!hasNext()) {
return null;
@@ -84,6 +88,7 @@ public abstract class AbstractSplitPanel extends AbstractComponentContainer {
return null;
}
+ @Override
public void remove() {
if (i == 1) {
if (getFirstComponent() != null) {
@@ -211,6 +216,7 @@ public abstract class AbstractSplitPanel extends AbstractComponentContainer {
* @see com.vaadin.ui.ComponentContainer#getComponentIterator()
*/
+ @Override
public Iterator<Component> getComponentIterator() {
return new ComponentIterator();
}
@@ -222,6 +228,7 @@ public abstract class AbstractSplitPanel extends AbstractComponentContainer {
* @return the number of contained components (zero, one or two)
*/
+ @Override
public int getComponentCount() {
int count = 0;
if (getFirstComponent() != null) {
@@ -235,6 +242,7 @@ public abstract class AbstractSplitPanel extends AbstractComponentContainer {
/* Documented in superclass */
+ @Override
public void replaceComponent(Component oldComponent, Component newComponent) {
if (oldComponent == getFirstComponent()) {
setFirstComponent(newComponent);
diff --git a/src/com/vaadin/ui/AbstractTextField.java b/src/com/vaadin/ui/AbstractTextField.java
index d584374bda..2326c07d97 100644
--- a/src/com/vaadin/ui/AbstractTextField.java
+++ b/src/com/vaadin/ui/AbstractTextField.java
@@ -15,10 +15,10 @@ import com.vaadin.event.FieldEvents.FocusNotifier;
import com.vaadin.event.FieldEvents.TextChangeEvent;
import com.vaadin.event.FieldEvents.TextChangeListener;
import com.vaadin.event.FieldEvents.TextChangeNotifier;
+import com.vaadin.shared.ui.textfield.AbstractTextFieldState;
import com.vaadin.terminal.PaintException;
import com.vaadin.terminal.PaintTarget;
import com.vaadin.terminal.Vaadin6Component;
-import com.vaadin.terminal.gwt.client.ui.textfield.AbstractTextFieldState;
import com.vaadin.terminal.gwt.client.ui.textfield.VTextField;
public abstract class AbstractTextField extends AbstractField<String> implements
@@ -95,6 +95,7 @@ public abstract class AbstractTextField extends AbstractField<String> implements
getState().setText(value);
}
+ @Override
public void paintContent(PaintTarget target) throws PaintException {
if (selectionPosition != -1) {
@@ -123,6 +124,7 @@ public abstract class AbstractTextField extends AbstractField<String> implements
}
+ @Override
public void changeVariables(Object source, Map<String, Object> variables) {
changingVariables = true;
@@ -498,11 +500,13 @@ public abstract class AbstractTextField extends AbstractField<String> implements
LAZY
}
+ @Override
public void addListener(TextChangeListener listener) {
addListener(TextChangeListener.EVENT_ID, TextChangeEvent.class,
listener, TextChangeListener.EVENT_METHOD);
}
+ @Override
public void removeListener(TextChangeListener listener) {
removeListener(TextChangeListener.EVENT_ID, TextChangeEvent.class,
listener);
@@ -645,20 +649,24 @@ public abstract class AbstractTextField extends AbstractField<String> implements
return lastKnownCursorPosition;
}
+ @Override
public void addListener(FocusListener listener) {
addListener(FocusEvent.EVENT_ID, FocusEvent.class, listener,
FocusListener.focusMethod);
}
+ @Override
public void removeListener(FocusListener listener) {
removeListener(FocusEvent.EVENT_ID, FocusEvent.class, listener);
}
+ @Override
public void addListener(BlurListener listener) {
addListener(BlurEvent.EVENT_ID, BlurEvent.class, listener,
BlurListener.blurMethod);
}
+ @Override
public void removeListener(BlurListener listener) {
removeListener(BlurEvent.EVENT_ID, BlurEvent.class, listener);
}
diff --git a/src/com/vaadin/ui/Alignment.java b/src/com/vaadin/ui/Alignment.java
index eb9e75e4d2..0d73da8504 100644
--- a/src/com/vaadin/ui/Alignment.java
+++ b/src/com/vaadin/ui/Alignment.java
@@ -5,7 +5,7 @@ package com.vaadin.ui;
import java.io.Serializable;
-import com.vaadin.terminal.gwt.client.ui.AlignmentInfo.Bits;
+import com.vaadin.shared.ui.AlignmentInfo.Bits;
/**
* Class containing information about alignment of a component. Use the
diff --git a/src/com/vaadin/ui/Button.java b/src/com/vaadin/ui/Button.java
index 0abc50f26f..0cb667d527 100644
--- a/src/com/vaadin/ui/Button.java
+++ b/src/com/vaadin/ui/Button.java
@@ -18,9 +18,9 @@ import com.vaadin.event.ShortcutAction;
import com.vaadin.event.ShortcutAction.KeyCode;
import com.vaadin.event.ShortcutAction.ModifierKey;
import com.vaadin.event.ShortcutListener;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
-import com.vaadin.terminal.gwt.client.ui.button.ButtonServerRpc;
-import com.vaadin.terminal.gwt.client.ui.button.ButtonState;
+import com.vaadin.shared.MouseEventDetails;
+import com.vaadin.shared.ui.button.ButtonServerRpc;
+import com.vaadin.shared.ui.button.ButtonState;
import com.vaadin.tools.ReflectTools;
import com.vaadin.ui.Component.Focusable;
@@ -39,10 +39,12 @@ public class Button extends AbstractComponent implements
private ButtonServerRpc rpc = new ButtonServerRpc() {
+ @Override
public void click(MouseEventDetails mouseEventDetails) {
fireClick(mouseEventDetails);
}
+ @Override
public void disableOnClick() {
// Could be optimized so the button is not repainted because of
// this (client side has already disabled the button)
@@ -332,20 +334,24 @@ public class Button extends AbstractComponent implements
fireEvent(new Button.ClickEvent(this, details));
}
+ @Override
public void addListener(BlurListener listener) {
addListener(BlurEvent.EVENT_ID, BlurEvent.class, listener,
BlurListener.blurMethod);
}
+ @Override
public void removeListener(BlurListener listener) {
removeListener(BlurEvent.EVENT_ID, BlurEvent.class, listener);
}
+ @Override
public void addListener(FocusListener listener) {
addListener(FocusEvent.EVENT_ID, FocusEvent.class, listener,
FocusListener.focusMethod);
}
+ @Override
public void removeListener(FocusListener listener) {
removeListener(FocusEvent.EVENT_ID, FocusEvent.class, listener);
@@ -474,6 +480,7 @@ public class Button extends AbstractComponent implements
*
* @see com.vaadin.ui.Component.Focusable#getTabIndex()
*/
+ @Override
public int getTabIndex() {
return getState().getTabIndex();
}
@@ -483,6 +490,7 @@ public class Button extends AbstractComponent implements
*
* @see com.vaadin.ui.Component.Focusable#setTabIndex(int)
*/
+ @Override
public void setTabIndex(int tabIndex) {
getState().setTabIndex(tabIndex);
requestRepaint();
diff --git a/src/com/vaadin/ui/CheckBox.java b/src/com/vaadin/ui/CheckBox.java
index 147a270059..30ac9b4626 100644
--- a/src/com/vaadin/ui/CheckBox.java
+++ b/src/com/vaadin/ui/CheckBox.java
@@ -10,14 +10,15 @@ import com.vaadin.event.FieldEvents.BlurListener;
import com.vaadin.event.FieldEvents.FocusAndBlurServerRpcImpl;
import com.vaadin.event.FieldEvents.FocusEvent;
import com.vaadin.event.FieldEvents.FocusListener;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
-import com.vaadin.terminal.gwt.client.ui.checkbox.CheckBoxServerRpc;
-import com.vaadin.terminal.gwt.client.ui.checkbox.CheckBoxState;
+import com.vaadin.shared.MouseEventDetails;
+import com.vaadin.shared.ui.checkbox.CheckBoxServerRpc;
+import com.vaadin.shared.ui.checkbox.CheckBoxState;
public class CheckBox extends AbstractField<Boolean> {
private CheckBoxServerRpc rpc = new CheckBoxServerRpc() {
+ @Override
public void setChecked(boolean checked,
MouseEventDetails mouseEventDetails) {
if (isReadOnly()) {
diff --git a/src/com/vaadin/ui/Component.java b/src/com/vaadin/ui/Component.java
index 81e0319880..a2c257ab68 100644
--- a/src/com/vaadin/ui/Component.java
+++ b/src/com/vaadin/ui/Component.java
@@ -11,11 +11,11 @@ import java.util.Locale;
import com.vaadin.Application;
import com.vaadin.event.FieldEvents;
+import com.vaadin.shared.ComponentState;
import com.vaadin.terminal.ErrorMessage;
import com.vaadin.terminal.Resource;
import com.vaadin.terminal.Sizeable;
import com.vaadin.terminal.VariableOwner;
-import com.vaadin.terminal.gwt.client.ComponentState;
import com.vaadin.terminal.gwt.server.ClientConnector;
/**
@@ -305,6 +305,7 @@ public interface Component extends ClientConnector, Sizeable, Serializable {
*
* @return the parent component
*/
+ @Override
public HasComponents getParent();
/**
@@ -507,6 +508,7 @@ public interface Component extends ClientConnector, Sizeable, Serializable {
* @return the Root of the component or <code>null</code> if it is not
* attached to a Root
*/
+ @Override
public Root getRoot();
/**
@@ -520,8 +522,8 @@ public interface Component extends ClientConnector, Sizeable, Serializable {
* <p>
* Getting a null value is often a problem in constructors of regular
* components and in the initializers of custom composite components. A
- * standard workaround is to use {@link Application#getCurrent()}
- * to retrieve the application instance that the current request relates to.
+ * standard workaround is to use {@link Application#getCurrent()} to
+ * retrieve the application instance that the current request relates to.
* Another way is to move the problematic initialization to
* {@link #attach()}, as described in the documentation of the method.
* </p>
@@ -585,6 +587,7 @@ public interface Component extends ClientConnector, Sizeable, Serializable {
* }
* </pre>
*/
+ @Override
public void attach();
/**
@@ -620,6 +623,7 @@ public interface Component extends ClientConnector, Sizeable, Serializable {
*
* @since 7.0
*/
+ @Override
public ComponentState getState();
/**
diff --git a/src/com/vaadin/ui/ConnectorTracker.java b/src/com/vaadin/ui/ConnectorTracker.java
index 75a75ad22a..e3d1bf86db 100644
--- a/src/com/vaadin/ui/ConnectorTracker.java
+++ b/src/com/vaadin/ui/ConnectorTracker.java
@@ -17,7 +17,7 @@ import com.vaadin.terminal.gwt.client.ServerConnector;
import com.vaadin.terminal.gwt.server.ClientConnector;
/**
- * A class which takes care of book keeping of {@link ClientConnector}s for one
+ * A class which takes care of book keeping of {@link ClientConnector}s for a
* Root.
* <p>
* Provides {@link #getConnector(String)} which can be used to lookup a
@@ -53,6 +53,14 @@ public class ConnectorTracker implements Serializable {
return Logger.getLogger(ConnectorTracker.class.getName());
}
+ /**
+ * Creates a new ConnectorTracker for the given root. A tracker is always
+ * attached to a root and the root cannot be changed during the lifetime of
+ * a {@link ConnectorTracker}.
+ *
+ * @param root
+ * The root to attach to. Cannot be null.
+ */
public ConnectorTracker(Root root) {
this.root = root;
}
@@ -144,61 +152,134 @@ public class ConnectorTracker implements Serializable {
while (iterator.hasNext()) {
String connectorId = iterator.next();
ClientConnector connector = connectorIdToConnector.get(connectorId);
- if (connector instanceof Component) {
- Component component = (Component) connector;
- if (component.getRoot() != root) {
- // If component is no longer part of this application,
- // remove it from the map. If it is re-attached to the
- // application at some point it will be re-added through
- // registerConnector(connector)
- iterator.remove();
- }
+ if (getRootForConnector(connector) != root) {
+ // If connector is no longer part of this root,
+ // remove it from the map. If it is re-attached to the
+ // application at some point it will be re-added through
+ // registerConnector(connector)
+
+ // This code should never be called as cleanup should take place
+ // in detach()
+ getLogger()
+ .warning(
+ "cleanConnectorMap unregistered connector "
+ + getConnectorAndParentInfo(connector)
+ + "). This should have been done when the connector was detached.");
+ iterator.remove();
}
}
}
+ /**
+ * Finds the root that the connector is attached to.
+ *
+ * @param connector
+ * The connector to lookup
+ * @return The root the connector is attached to or null if it is not
+ * attached to any root.
+ */
+ private Root getRootForConnector(ClientConnector connector) {
+ if (connector == null) {
+ return null;
+ }
+ if (connector instanceof Component) {
+ return ((Component) connector).getRoot();
+ }
+
+ return getRootForConnector(connector.getParent());
+ }
+
+ /**
+ * Mark the connector as dirty.
+ *
+ * @see #getDirtyConnectors()
+ *
+ * @param connector
+ * The connector that should be marked clean.
+ */
public void markDirty(ClientConnector connector) {
if (getLogger().isLoggable(Level.FINE)) {
if (!dirtyConnectors.contains(connector)) {
- getLogger()
- .fine(getDebugInfo(connector) + " " + "is now dirty");
+ getLogger().fine(
+ getConnectorAndParentInfo(connector) + " "
+ + "is now dirty");
}
}
dirtyConnectors.add(connector);
}
+ /**
+ * Mark the connector as clean.
+ *
+ * @param connector
+ * The connector that should be marked clean.
+ */
public void markClean(ClientConnector connector) {
if (getLogger().isLoggable(Level.FINE)) {
if (dirtyConnectors.contains(connector)) {
getLogger().fine(
- getDebugInfo(connector) + " " + "is no longer dirty");
+ getConnectorAndParentInfo(connector) + " "
+ + "is no longer dirty");
}
}
dirtyConnectors.remove(connector);
}
- private String getDebugInfo(ClientConnector connector) {
- String message = getObjectString(connector);
+ /**
+ * Returns {@link #getConnectorString(ClientConnector)} for the connector
+ * and its parent (if it has a parent).
+ *
+ * @param connector
+ * The connector
+ * @return A string describing the connector and its parent
+ */
+ private String getConnectorAndParentInfo(ClientConnector connector) {
+ String message = getConnectorString(connector);
if (connector.getParent() != null) {
- message += " (parent: " + getObjectString(connector.getParent())
+ message += " (parent: " + getConnectorString(connector.getParent())
+ ")";
}
return message;
}
- private String getObjectString(Object connector) {
- return connector.getClass().getName() + "@"
- + Integer.toHexString(connector.hashCode());
+ /**
+ * Returns a string with the connector name and id. Useful mostly for
+ * debugging and logging.
+ *
+ * @param connector
+ * The connector
+ * @return A string that describes the connector
+ */
+ private String getConnectorString(ClientConnector connector) {
+ if (connector == null) {
+ return "(null)";
+ }
+
+ String connectorId;
+ try {
+ connectorId = connector.getConnectorId();
+ } catch (RuntimeException e) {
+ // This happens if the connector is not attached to the application.
+ // SHOULD not happen in this case but theoretically can.
+ connectorId = "@" + Integer.toHexString(connector.hashCode());
+ }
+ return connector.getClass().getName() + "(" + connectorId + ")";
}
+ /**
+ * Mark all connectors in this root as dirty.
+ */
public void markAllConnectorsDirty() {
markConnectorsDirtyRecursively(root);
getLogger().fine("All connectors are now dirty");
}
+ /**
+ * Mark all connectors in this root as clean.
+ */
public void markAllConnectorsClean() {
dirtyConnectors.clear();
getLogger().fine("All connectors are now clean");
@@ -222,6 +303,16 @@ public class ConnectorTracker implements Serializable {
}
}
+ /**
+ * Returns a collection of all connectors which have been marked as dirty.
+ * <p>
+ * The state and pending RPC calls for dirty connectors are sent to the
+ * client in the following request.
+ * </p>
+ *
+ * @return A collection of all dirty connectors for this root. This list may
+ * contain invisible connectors.
+ */
public Collection<ClientConnector> getDirtyConnectors() {
return dirtyConnectors;
}
diff --git a/src/com/vaadin/ui/CssLayout.java b/src/com/vaadin/ui/CssLayout.java
index e8ec6bd041..356f0a3843 100644
--- a/src/com/vaadin/ui/CssLayout.java
+++ b/src/com/vaadin/ui/CssLayout.java
@@ -9,11 +9,11 @@ import java.util.LinkedList;
import com.vaadin.event.LayoutEvents.LayoutClickEvent;
import com.vaadin.event.LayoutEvents.LayoutClickListener;
import com.vaadin.event.LayoutEvents.LayoutClickNotifier;
-import com.vaadin.terminal.gwt.client.Connector;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
+import com.vaadin.shared.Connector;
+import com.vaadin.shared.MouseEventDetails;
+import com.vaadin.shared.ui.csslayout.CssLayoutServerRpc;
+import com.vaadin.shared.ui.csslayout.CssLayoutState;
import com.vaadin.terminal.gwt.client.ui.LayoutClickEventHandler;
-import com.vaadin.terminal.gwt.client.ui.csslayout.CssLayoutServerRpc;
-import com.vaadin.terminal.gwt.client.ui.csslayout.CssLayoutState;
/**
* CssLayout is a layout component that can be used in browser environment only.
@@ -60,6 +60,7 @@ public class CssLayout extends AbstractLayout implements LayoutClickNotifier {
private CssLayoutServerRpc rpc = new CssLayoutServerRpc() {
+ @Override
public void layoutClick(MouseEventDetails mouseDetails,
Connector clickedConnector) {
fireEvent(LayoutClickEvent.createEvent(CssLayout.this,
@@ -167,6 +168,7 @@ public class CssLayout extends AbstractLayout implements LayoutClickNotifier {
*
* @return the Iterator of the components inside the container.
*/
+ @Override
public Iterator<Component> getComponentIterator() {
return components.iterator();
}
@@ -177,6 +179,7 @@ public class CssLayout extends AbstractLayout implements LayoutClickNotifier {
*
* @return the number of contained components
*/
+ @Override
public int getComponentCount() {
return components.size();
}
@@ -223,6 +226,7 @@ public class CssLayout extends AbstractLayout implements LayoutClickNotifier {
}
/* Documented in superclass */
+ @Override
public void replaceComponent(Component oldComponent, Component newComponent) {
// Gets the locations
@@ -264,12 +268,14 @@ public class CssLayout extends AbstractLayout implements LayoutClickNotifier {
}
}
+ @Override
public void addListener(LayoutClickListener listener) {
addListener(LayoutClickEventHandler.LAYOUT_CLICK_EVENT_IDENTIFIER,
LayoutClickEvent.class, listener,
LayoutClickListener.clickMethod);
}
+ @Override
public void removeListener(LayoutClickListener listener) {
removeListener(LayoutClickEventHandler.LAYOUT_CLICK_EVENT_IDENTIFIER,
LayoutClickEvent.class, listener);
diff --git a/src/com/vaadin/ui/CustomComponent.java b/src/com/vaadin/ui/CustomComponent.java
index 98d650f6db..40b5dcd636 100644
--- a/src/com/vaadin/ui/CustomComponent.java
+++ b/src/com/vaadin/ui/CustomComponent.java
@@ -100,20 +100,24 @@ public class CustomComponent extends AbstractComponentContainer {
Serializable {
boolean first = getCompositionRoot() != null;
+ @Override
public boolean hasNext() {
return first;
}
+ @Override
public Component next() {
first = false;
return root;
}
+ @Override
public void remove() {
throw new UnsupportedOperationException();
}
}
+ @Override
public Iterator<Component> getComponentIterator() {
return new ComponentIterator();
}
@@ -124,6 +128,7 @@ public class CustomComponent extends AbstractComponentContainer {
*
* @return the number of contained components (zero or one)
*/
+ @Override
public int getComponentCount() {
return (root != null ? 1 : 0);
}
@@ -134,6 +139,7 @@ public class CustomComponent extends AbstractComponentContainer {
* @see com.vaadin.ui.ComponentContainer#replaceComponent(com.vaadin.ui.Component,
* com.vaadin.ui.Component)
*/
+ @Override
public void replaceComponent(Component oldComponent, Component newComponent) {
throw new UnsupportedOperationException();
}
diff --git a/src/com/vaadin/ui/CustomField.java b/src/com/vaadin/ui/CustomField.java
index 0998c11612..ab3797a58c 100644
--- a/src/com/vaadin/ui/CustomField.java
+++ b/src/com/vaadin/ui/CustomField.java
@@ -123,28 +123,34 @@ public abstract class CustomField<T> extends AbstractField<T> implements
Serializable {
boolean first = (root != null);
+ @Override
public boolean hasNext() {
return first;
}
+ @Override
public Component next() {
first = false;
return getContent();
}
+ @Override
public void remove() {
throw new UnsupportedOperationException();
}
}
+ @Override
public Iterator<Component> getComponentIterator() {
return new ComponentIterator();
}
+ @Override
public Iterator<Component> iterator() {
return getComponentIterator();
}
+ @Override
public int getComponentCount() {
return (null != getContent()) ? 1 : 0;
}
@@ -163,22 +169,27 @@ public abstract class CustomField<T> extends AbstractField<T> implements
// TODO remove these methods when ComponentContainer interface is cleaned up
+ @Override
public void addComponent(Component c) {
throw new UnsupportedOperationException();
}
+ @Override
public void removeComponent(Component c) {
throw new UnsupportedOperationException();
}
+ @Override
public void removeAllComponents() {
throw new UnsupportedOperationException();
}
+ @Override
public void replaceComponent(Component oldComponent, Component newComponent) {
throw new UnsupportedOperationException();
}
+ @Override
public void moveComponentsFrom(ComponentContainer source) {
throw new UnsupportedOperationException();
}
@@ -197,24 +208,29 @@ public abstract class CustomField<T> extends AbstractField<T> implements
}
}
+ @Override
public void addListener(ComponentAttachListener listener) {
addListener(ComponentContainer.ComponentAttachEvent.class, listener,
COMPONENT_ATTACHED_METHOD);
}
+ @Override
public void removeListener(ComponentAttachListener listener) {
removeListener(ComponentContainer.ComponentAttachEvent.class, listener,
COMPONENT_ATTACHED_METHOD);
}
+ @Override
public void addListener(ComponentDetachListener listener) {
// content never detached
}
+ @Override
public void removeListener(ComponentDetachListener listener) {
// content never detached
}
+ @Override
public boolean isComponentVisible(Component childComponent) {
return true;
}
diff --git a/src/com/vaadin/ui/CustomLayout.java b/src/com/vaadin/ui/CustomLayout.java
index 97cea1c49d..d7830603f0 100644
--- a/src/com/vaadin/ui/CustomLayout.java
+++ b/src/com/vaadin/ui/CustomLayout.java
@@ -12,10 +12,10 @@ import java.util.Iterator;
import java.util.Map;
import java.util.Set;
+import com.vaadin.shared.ui.customlayout.CustomLayoutState;
import com.vaadin.terminal.PaintException;
import com.vaadin.terminal.PaintTarget;
import com.vaadin.terminal.Vaadin6Component;
-import com.vaadin.terminal.gwt.client.ui.customlayout.CustomLayoutState;
import com.vaadin.terminal.gwt.server.JsonPaintTarget;
/**
@@ -185,6 +185,7 @@ public class CustomLayout extends AbstractLayout implements Vaadin6Component {
*
* @return the Iterator of the components inside the container.
*/
+ @Override
public Iterator<Component> getComponentIterator() {
return slots.values().iterator();
}
@@ -195,6 +196,7 @@ public class CustomLayout extends AbstractLayout implements Vaadin6Component {
*
* @return the number of contained components
*/
+ @Override
public int getComponentCount() {
return slots.values().size();
}
@@ -212,6 +214,7 @@ public class CustomLayout extends AbstractLayout implements Vaadin6Component {
}
/* Documented in superclass */
+ @Override
public void replaceComponent(Component oldComponent, Component newComponent) {
// Gets the locations
@@ -305,10 +308,12 @@ public class CustomLayout extends AbstractLayout implements Vaadin6Component {
"CustomLayout does not support margins.");
}
+ @Override
public void changeVariables(Object source, Map<String, Object> variables) {
// Nothing to see here
}
+ @Override
public void paintContent(PaintTarget target) throws PaintException {
// Workaround to make the CommunicationManager read the template file
// and send it to the client
diff --git a/src/com/vaadin/ui/DateField.java b/src/com/vaadin/ui/DateField.java
index 55ff67229c..d0a22f3c29 100644
--- a/src/com/vaadin/ui/DateField.java
+++ b/src/com/vaadin/ui/DateField.java
@@ -286,6 +286,7 @@ public class DateField extends AbstractField<Date> implements
* Paints this component. Don't add a JavaDoc comment here, we use the
* default documentation from implemented interface.
*/
+ @Override
public void paintContent(PaintTarget target) throws PaintException {
// Adds the locale as attribute
@@ -339,6 +340,7 @@ public class DateField extends AbstractField<Date> implements
* comment here, we use the default documentation from implemented
* interface.
*/
+ @Override
public void changeVariables(Object source, Map<String, Object> variables) {
if (!isReadOnly()
@@ -729,20 +731,24 @@ public class DateField extends AbstractField<Date> implements
return lenient;
}
+ @Override
public void addListener(FocusListener listener) {
addListener(FocusEvent.EVENT_ID, FocusEvent.class, listener,
FocusListener.focusMethod);
}
+ @Override
public void removeListener(FocusListener listener) {
removeListener(FocusEvent.EVENT_ID, FocusEvent.class, listener);
}
+ @Override
public void addListener(BlurListener listener) {
addListener(BlurEvent.EVENT_ID, BlurEvent.class, listener,
BlurListener.blurMethod);
}
+ @Override
public void removeListener(BlurListener listener) {
removeListener(BlurEvent.EVENT_ID, BlurEvent.class, listener);
}
diff --git a/src/com/vaadin/ui/DefaultFieldFactory.java b/src/com/vaadin/ui/DefaultFieldFactory.java
index 9d096094e3..e17f08c1c6 100644
--- a/src/com/vaadin/ui/DefaultFieldFactory.java
+++ b/src/com/vaadin/ui/DefaultFieldFactory.java
@@ -35,6 +35,7 @@ public class DefaultFieldFactory implements FormFieldFactory, TableFieldFactory
protected DefaultFieldFactory() {
}
+ @Override
public Field<?> createField(Item item, Object propertyId,
Component uiContext) {
Class<?> type = item.getItemProperty(propertyId).getType();
@@ -43,6 +44,7 @@ public class DefaultFieldFactory implements FormFieldFactory, TableFieldFactory
return field;
}
+ @Override
public Field<?> createField(Container container, Object itemId,
Object propertyId, Component uiContext) {
Property<?> containerProperty = container.getContainerProperty(itemId,
diff --git a/src/com/vaadin/ui/DragAndDropWrapper.java b/src/com/vaadin/ui/DragAndDropWrapper.java
index b623197a4c..67229a45fe 100644
--- a/src/com/vaadin/ui/DragAndDropWrapper.java
+++ b/src/com/vaadin/ui/DragAndDropWrapper.java
@@ -17,13 +17,13 @@ import com.vaadin.event.dd.DropHandler;
import com.vaadin.event.dd.DropTarget;
import com.vaadin.event.dd.TargetDetails;
import com.vaadin.event.dd.TargetDetailsImpl;
+import com.vaadin.shared.MouseEventDetails;
+import com.vaadin.shared.ui.dd.HorizontalDropLocation;
+import com.vaadin.shared.ui.dd.VerticalDropLocation;
import com.vaadin.terminal.PaintException;
import com.vaadin.terminal.PaintTarget;
import com.vaadin.terminal.StreamVariable;
import com.vaadin.terminal.Vaadin6Component;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
-import com.vaadin.terminal.gwt.client.ui.dd.HorizontalDropLocation;
-import com.vaadin.terminal.gwt.client.ui.dd.VerticalDropLocation;
import com.vaadin.terminal.gwt.client.ui.draganddropwrapper.VDragAndDropWrapper;
@SuppressWarnings("serial")
@@ -214,10 +214,12 @@ public class DragAndDropWrapper extends CustomComponent implements DropTarget,
requestRepaint();
}
+ @Override
public void changeVariables(Object source, Map<String, Object> variables) {
// TODO Remove once Vaadin6Component is no longer implemented
}
+ @Override
public void paintContent(PaintTarget target) throws PaintException {
target.addAttribute(VDragAndDropWrapper.DRAG_START_MODE,
dragStartMode.ordinal());
@@ -249,6 +251,7 @@ public class DragAndDropWrapper extends CustomComponent implements DropTarget,
private DropHandler dropHandler;
+ @Override
public DropHandler getDropHandler() {
return dropHandler;
}
@@ -258,11 +261,13 @@ public class DragAndDropWrapper extends CustomComponent implements DropTarget,
requestRepaint();
}
+ @Override
public TargetDetails translateDropTargetDetails(
Map<String, Object> clientVariables) {
return new WrapperTargetDetails(clientVariables);
}
+ @Override
public Transferable getTransferable(final Map<String, Object> rawVariables) {
return new WrapperTransferable(this, rawVariables);
}
@@ -286,6 +291,7 @@ public class DragAndDropWrapper extends CustomComponent implements DropTarget,
private boolean listenProgressOfUploadedFile;
+ @Override
public OutputStream getOutputStream() {
if (file.getStreamVariable() == null) {
return null;
@@ -293,15 +299,18 @@ public class DragAndDropWrapper extends CustomComponent implements DropTarget,
return file.getStreamVariable().getOutputStream();
}
+ @Override
public boolean listenProgress() {
return file.getStreamVariable().listenProgress();
}
+ @Override
public void onProgress(StreamingProgressEvent event) {
file.getStreamVariable().onProgress(
new ReceivingEventWrapper(event));
}
+ @Override
public void streamingStarted(StreamingStartEvent event) {
listenProgressOfUploadedFile = file.getStreamVariable() != null;
if (listenProgressOfUploadedFile) {
@@ -315,6 +324,7 @@ public class DragAndDropWrapper extends CustomComponent implements DropTarget,
event.disposeStreamVariable();
}
+ @Override
public void streamingFinished(StreamingEndEvent event) {
if (listenProgressOfUploadedFile) {
file.getStreamVariable().streamingFinished(
@@ -322,6 +332,7 @@ public class DragAndDropWrapper extends CustomComponent implements DropTarget,
}
}
+ @Override
public void streamingFailed(final StreamingErrorEvent event) {
if (listenProgressOfUploadedFile) {
file.getStreamVariable().streamingFailed(
@@ -329,6 +340,7 @@ public class DragAndDropWrapper extends CustomComponent implements DropTarget,
}
}
+ @Override
public boolean isInterrupted() {
return file.getStreamVariable().isInterrupted();
}
@@ -348,14 +360,17 @@ public class DragAndDropWrapper extends CustomComponent implements DropTarget,
wrappedEvent = e;
}
+ @Override
public String getMimeType() {
return file.getType();
}
+ @Override
public String getFileName() {
return file.getFileName();
}
+ @Override
public long getContentLength() {
return file.getFileSize();
}
@@ -364,6 +379,7 @@ public class DragAndDropWrapper extends CustomComponent implements DropTarget,
return ProxyReceiver.this;
}
+ @Override
public Exception getException() {
if (wrappedEvent instanceof StreamingErrorEvent) {
return ((StreamingErrorEvent) wrappedEvent).getException();
@@ -371,6 +387,7 @@ public class DragAndDropWrapper extends CustomComponent implements DropTarget,
return null;
}
+ @Override
public long getBytesReceived() {
return wrappedEvent.getBytesReceived();
}
@@ -379,6 +396,7 @@ public class DragAndDropWrapper extends CustomComponent implements DropTarget,
* Calling this method has no effect. DD files are receive only once
* anyway.
*/
+ @Override
public void disposeStreamVariable() {
}
diff --git a/src/com/vaadin/ui/Embedded.java b/src/com/vaadin/ui/Embedded.java
index 1bcd984666..6088c5aa66 100644
--- a/src/com/vaadin/ui/Embedded.java
+++ b/src/com/vaadin/ui/Embedded.java
@@ -10,14 +10,14 @@ import java.util.Map;
import com.vaadin.event.MouseEvents.ClickEvent;
import com.vaadin.event.MouseEvents.ClickListener;
+import com.vaadin.shared.MouseEventDetails;
+import com.vaadin.shared.ui.embedded.EmbeddedServerRpc;
import com.vaadin.terminal.PaintException;
import com.vaadin.terminal.PaintTarget;
import com.vaadin.terminal.Resource;
import com.vaadin.terminal.Vaadin6Component;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
import com.vaadin.terminal.gwt.client.ui.ClickEventHandler;
import com.vaadin.terminal.gwt.client.ui.embedded.EmbeddedConnector;
-import com.vaadin.terminal.gwt.client.ui.embedded.EmbeddedServerRpc;
/**
* Component for embedding external objects.
@@ -81,6 +81,7 @@ public class Embedded extends AbstractComponent implements Vaadin6Component {
private String altText;
private EmbeddedServerRpc rpc = new EmbeddedServerRpc() {
+ @Override
public void click(MouseEventDetails mouseDetails) {
fireEvent(new ClickEvent(Embedded.this, mouseDetails));
}
@@ -120,6 +121,7 @@ public class Embedded extends AbstractComponent implements Vaadin6Component {
/**
* Invoked when the component state should be painted.
*/
+ @Override
public void paintContent(PaintTarget target) throws PaintException {
switch (type) {
@@ -521,6 +523,7 @@ public class Embedded extends AbstractComponent implements Vaadin6Component {
ClickEvent.class, listener);
}
+ @Override
public void changeVariables(Object source, Map<String, Object> variables) {
// TODO Remove once Vaadin6Component is no longer implemented
}
diff --git a/src/com/vaadin/ui/Field.java b/src/com/vaadin/ui/Field.java
index 3a66db47b0..6dc40d192f 100644
--- a/src/com/vaadin/ui/Field.java
+++ b/src/com/vaadin/ui/Field.java
@@ -89,6 +89,7 @@ public interface Field<T> extends Component, BufferedValidatable, Property<T>,
*
* @return the Source Property of the event.
*/
+ @Override
public Property getProperty() {
return (Property) getSource();
}
diff --git a/src/com/vaadin/ui/Form.java b/src/com/vaadin/ui/Form.java
index 796ad17448..fbc4d5a8e6 100644
--- a/src/com/vaadin/ui/Form.java
+++ b/src/com/vaadin/ui/Form.java
@@ -24,6 +24,7 @@ import com.vaadin.event.Action;
import com.vaadin.event.Action.Handler;
import com.vaadin.event.Action.ShortcutNotifier;
import com.vaadin.event.ActionManager;
+import com.vaadin.shared.ui.form.FormState;
import com.vaadin.terminal.AbstractErrorMessage;
import com.vaadin.terminal.CompositeErrorMessage;
import com.vaadin.terminal.ErrorMessage;
@@ -31,7 +32,6 @@ import com.vaadin.terminal.PaintException;
import com.vaadin.terminal.PaintTarget;
import com.vaadin.terminal.UserError;
import com.vaadin.terminal.Vaadin6Component;
-import com.vaadin.terminal.gwt.client.ui.form.FormState;
/**
* Form component provides easy way of creating and managing sets fields.
@@ -126,6 +126,7 @@ public class Form extends AbstractField<Object> implements Item.Editor,
* See e.g. DateField#notifyFormOfValidityChange().
*/
private final ValueChangeListener fieldValueChangeListener = new ValueChangeListener() {
+ @Override
public void valueChange(com.vaadin.data.Property.ValueChangeEvent event) {
requestRepaint();
}
@@ -194,12 +195,14 @@ public class Form extends AbstractField<Object> implements Item.Editor,
}
/* Documented in interface */
+ @Override
public void paintContent(PaintTarget target) throws PaintException {
if (ownActionManager != null) {
ownActionManager.paintActions(null, target);
}
}
+ @Override
public void changeVariables(Object source, Map<String, Object> variables) {
// Actions
if (ownActionManager != null) {
@@ -467,6 +470,7 @@ public class Form extends AbstractField<Object> implements Item.Editor,
*
* @see com.vaadin.data.Item#addItemProperty(Object, Property)
*/
+ @Override
public boolean addItemProperty(Object id, Property property) {
// Checks inputs
@@ -598,6 +602,7 @@ public class Form extends AbstractField<Object> implements Item.Editor,
*
* @see com.vaadin.data.Item#getItemProperty(Object)
*/
+ @Override
public Property<?> getItemProperty(Object id) {
final Field<?> field = fields.get(id);
if (field == null) {
@@ -624,6 +629,7 @@ public class Form extends AbstractField<Object> implements Item.Editor,
}
/* Documented in interface */
+ @Override
public Collection<?> getItemPropertyIds() {
return Collections.unmodifiableCollection(propertyIds);
}
@@ -633,6 +639,7 @@ public class Form extends AbstractField<Object> implements Item.Editor,
*
* @see com.vaadin.data.Item#removeItemProperty(Object)
*/
+ @Override
public boolean removeItemProperty(Object id) {
ownProperties.remove(id);
@@ -687,6 +694,7 @@ public class Form extends AbstractField<Object> implements Item.Editor,
}
/* Documented in the interface */
+ @Override
public Item getItemDataSource() {
return itemDatasource;
}
@@ -701,6 +709,7 @@ public class Form extends AbstractField<Object> implements Item.Editor,
*
* @see com.vaadin.data.Item.Viewer#setItemDataSource(Item)
*/
+ @Override
public void setItemDataSource(Item newDataSource) {
setItemDataSource(newDataSource,
newDataSource != null ? newDataSource.getItemPropertyIds()
@@ -1301,10 +1310,12 @@ public class Form extends AbstractField<Object> implements Item.Editor,
return ownActionManager;
}
+ @Override
public void addActionHandler(Handler actionHandler) {
getOwnActionManager().addActionHandler(actionHandler);
}
+ @Override
public void removeActionHandler(Handler actionHandler) {
if (ownActionManager != null) {
ownActionManager.removeActionHandler(actionHandler);
@@ -1320,11 +1331,13 @@ public class Form extends AbstractField<Object> implements Item.Editor,
}
}
+ @Override
public <T extends Action & com.vaadin.event.Action.Listener> void addAction(
T action) {
getOwnActionManager().addAction(action);
}
+ @Override
public <T extends Action & com.vaadin.event.Action.Listener> void removeAction(
T action) {
if (ownActionManager != null) {
@@ -1332,6 +1345,7 @@ public class Form extends AbstractField<Object> implements Item.Editor,
}
}
+ @Override
public Iterator<Component> iterator() {
return getComponentIterator();
}
@@ -1345,6 +1359,7 @@ public class Form extends AbstractField<Object> implements Item.Editor,
int i = 0;
+ @Override
public boolean hasNext() {
if (i < getComponentCount()) {
return true;
@@ -1352,6 +1367,7 @@ public class Form extends AbstractField<Object> implements Item.Editor,
return false;
}
+ @Override
public Component next() {
if (!hasNext()) {
return null;
@@ -1365,6 +1381,7 @@ public class Form extends AbstractField<Object> implements Item.Editor,
return null;
}
+ @Override
public void remove() {
if (i == 1) {
if (getLayout() != null) {
@@ -1379,6 +1396,7 @@ public class Form extends AbstractField<Object> implements Item.Editor,
}
}
+ @Override
public Iterator<Component> getComponentIterator() {
return new ComponentIterator();
}
@@ -1395,6 +1413,7 @@ public class Form extends AbstractField<Object> implements Item.Editor,
return count;
}
+ @Override
public boolean isComponentVisible(Component childComponent) {
return true;
};
diff --git a/src/com/vaadin/ui/GridLayout.java b/src/com/vaadin/ui/GridLayout.java
index 0ab729ce5c..2391a9cd3a 100644
--- a/src/com/vaadin/ui/GridLayout.java
+++ b/src/com/vaadin/ui/GridLayout.java
@@ -15,15 +15,15 @@ import java.util.Map.Entry;
import com.vaadin.event.LayoutEvents.LayoutClickEvent;
import com.vaadin.event.LayoutEvents.LayoutClickListener;
import com.vaadin.event.LayoutEvents.LayoutClickNotifier;
+import com.vaadin.shared.Connector;
+import com.vaadin.shared.MouseEventDetails;
+import com.vaadin.shared.ui.gridlayout.GridLayoutServerRpc;
+import com.vaadin.shared.ui.gridlayout.GridLayoutState;
import com.vaadin.terminal.LegacyPaint;
import com.vaadin.terminal.PaintException;
import com.vaadin.terminal.PaintTarget;
import com.vaadin.terminal.Vaadin6Component;
-import com.vaadin.terminal.gwt.client.Connector;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
import com.vaadin.terminal.gwt.client.ui.LayoutClickEventHandler;
-import com.vaadin.terminal.gwt.client.ui.gridlayout.GridLayoutServerRpc;
-import com.vaadin.terminal.gwt.client.ui.gridlayout.GridLayoutState;
/**
* A layout where the components are laid out on a grid using cell coordinates.
@@ -58,6 +58,7 @@ public class GridLayout extends AbstractLayout implements
private GridLayoutServerRpc rpc = new GridLayoutServerRpc() {
+ @Override
public void layoutClick(MouseEventDetails mouseDetails,
Connector clickedConnector) {
fireEvent(LayoutClickEvent.createEvent(GridLayout.this,
@@ -417,6 +418,7 @@ public class GridLayout extends AbstractLayout implements
*
* @return the Iterator of the components inside the layout.
*/
+ @Override
public Iterator<Component> getComponentIterator() {
return Collections.unmodifiableCollection(components).iterator();
}
@@ -427,10 +429,12 @@ public class GridLayout extends AbstractLayout implements
*
* @return the number of contained components
*/
+ @Override
public int getComponentCount() {
return components.size();
}
+ @Override
public void changeVariables(Object source, Map<String, Object> variables) {
// TODO Remove once Vaadin6Component is no longer implemented
}
@@ -443,6 +447,7 @@ public class GridLayout extends AbstractLayout implements
* @throws PaintException
* if the paint operation failed.
*/
+ @Override
public void paintContent(PaintTarget target) throws PaintException {
// TODO refactor attribute names in future release.
target.addAttribute("structuralChange", structuralChange);
@@ -668,6 +673,7 @@ public class GridLayout extends AbstractLayout implements
* @see com.vaadin.ui.Layout.AlignmentHandler#getComponentAlignment(com
* .vaadin.ui.Component)
*/
+ @Override
public Alignment getComponentAlignment(Component childComponent) {
Alignment alignment = componentToAlignment.get(childComponent);
if (alignment == null) {
@@ -1094,6 +1100,7 @@ public class GridLayout extends AbstractLayout implements
}
/* Documented in superclass */
+ @Override
public void replaceComponent(Component oldComponent, Component newComponent) {
// Gets the locations
@@ -1143,6 +1150,7 @@ public class GridLayout extends AbstractLayout implements
* @see com.vaadin.ui.Layout.AlignmentHandler#setComponentAlignment(com
* .vaadin.ui.Component, int, int)
*/
+ @Override
public void setComponentAlignment(Component childComponent,
int horizontalAlignment, int verticalAlignment) {
componentToAlignment.put(childComponent, new Alignment(
@@ -1150,6 +1158,7 @@ public class GridLayout extends AbstractLayout implements
requestRepaint();
}
+ @Override
public void setComponentAlignment(Component childComponent,
Alignment alignment) {
componentToAlignment.put(childComponent, alignment);
@@ -1161,6 +1170,7 @@ public class GridLayout extends AbstractLayout implements
*
* @see com.vaadin.ui.Layout.SpacingHandler#setSpacing(boolean)
*/
+ @Override
public void setSpacing(boolean spacing) {
getState().setSpacing(spacing);
requestRepaint();
@@ -1171,6 +1181,7 @@ public class GridLayout extends AbstractLayout implements
*
* @see com.vaadin.ui.Layout.SpacingHandler#isSpacing()
*/
+ @Override
public boolean isSpacing() {
return getState().isSpacing();
}
@@ -1388,12 +1399,14 @@ public class GridLayout extends AbstractLayout implements
return null;
}
+ @Override
public void addListener(LayoutClickListener listener) {
addListener(LayoutClickEventHandler.LAYOUT_CLICK_EVENT_IDENTIFIER,
LayoutClickEvent.class, listener,
LayoutClickListener.clickMethod);
}
+ @Override
public void removeListener(LayoutClickListener listener) {
removeListener(LayoutClickEventHandler.LAYOUT_CLICK_EVENT_IDENTIFIER,
LayoutClickEvent.class, listener);
diff --git a/src/com/vaadin/ui/HelloWorldExtension.java b/src/com/vaadin/ui/HelloWorldExtension.java
deleted file mode 100644
index e705954f2e..0000000000
--- a/src/com/vaadin/ui/HelloWorldExtension.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-@VaadinApache2LicenseForJavaFiles@
- */
-package com.vaadin.ui;
-
-import com.vaadin.terminal.AbstractExtension;
-import com.vaadin.terminal.gwt.client.ui.helloworldfeature.GreetAgainRpc;
-import com.vaadin.terminal.gwt.client.ui.helloworldfeature.HelloWorldRpc;
-import com.vaadin.terminal.gwt.client.ui.helloworldfeature.HelloWorldState;
-
-public class HelloWorldExtension extends AbstractExtension {
-
- public HelloWorldExtension() {
- registerRpc(new HelloWorldRpc() {
- public void onMessageSent(String message) {
- Notification.show(message);
- }
- });
- }
-
- @Override
- public HelloWorldState getState() {
- return (HelloWorldState) super.getState();
- }
-
- public void setGreeting(String greeting) {
- getState().setGreeting(greeting);
- requestRepaint();
- }
-
- public String getGreeting() {
- return getState().getGreeting();
- }
-
- public void greetAgain() {
- getRpcProxy(GreetAgainRpc.class).greetAgain();
- }
-}
diff --git a/src/com/vaadin/ui/JavaScript.java b/src/com/vaadin/ui/JavaScript.java
index d256717711..53efb62965 100644
--- a/src/com/vaadin/ui/JavaScript.java
+++ b/src/com/vaadin/ui/JavaScript.java
@@ -9,11 +9,11 @@ import java.util.Map;
import com.vaadin.external.json.JSONArray;
import com.vaadin.external.json.JSONException;
+import com.vaadin.shared.communication.ServerRpc;
+import com.vaadin.shared.extension.javascriptmanager.ExecuteJavaScriptRpc;
+import com.vaadin.shared.extension.javascriptmanager.JavaScriptManagerState;
import com.vaadin.terminal.AbstractExtension;
import com.vaadin.terminal.Page;
-import com.vaadin.terminal.gwt.client.communication.ServerRpc;
-import com.vaadin.terminal.gwt.client.extensions.javascriptmanager.ExecuteJavaScriptRpc;
-import com.vaadin.terminal.gwt.client.extensions.javascriptmanager.JavaScriptManagerState;
/**
* Provides access to JavaScript functionality in the web browser. To get an
@@ -41,6 +41,7 @@ public class JavaScript extends AbstractExtension {
*/
public JavaScript() {
registerRpc(new JavaScriptCallbackRpc() {
+ @Override
public void call(String name, JSONArray arguments) {
JavaScriptCallback callback = callbacks.get(name);
// TODO handle situation if name is not registered
@@ -115,6 +116,16 @@ public class JavaScript extends AbstractExtension {
}
/**
+ * Executes the given JavaScript code in the browser.
+ *
+ * @param script
+ * The JavaScript code to run.
+ */
+ public static void eval(String script) {
+ getCurrent().execute(script);
+ }
+
+ /**
* Get the JavaScript object for the current Page, or null if there is no
* current page.
*
diff --git a/src/com/vaadin/ui/Label.java b/src/com/vaadin/ui/Label.java
index e1c64605d7..7e50a37805 100644
--- a/src/com/vaadin/ui/Label.java
+++ b/src/com/vaadin/ui/Label.java
@@ -5,12 +5,13 @@
package com.vaadin.ui;
import java.lang.reflect.Method;
+import java.util.logging.Logger;
import com.vaadin.data.Property;
import com.vaadin.data.util.converter.Converter;
import com.vaadin.data.util.converter.ConverterUtil;
-import com.vaadin.terminal.gwt.client.ui.label.ContentMode;
-import com.vaadin.terminal.gwt.client.ui.label.LabelState;
+import com.vaadin.shared.ui.label.ContentMode;
+import com.vaadin.shared.ui.label.LabelState;
/**
* Label component for showing non-editable short texts.
@@ -41,6 +42,9 @@ public class Label extends AbstractComponent implements Property<String>,
Property.Viewer, Property.ValueChangeListener,
Property.ValueChangeNotifier, Comparable<Label> {
+ private static final Logger logger = Logger
+ .getLogger(Label.class.getName());
+
/**
* @deprecated From 7.0, use {@link ContentMode#TEXT} instead
*/
@@ -142,11 +146,15 @@ public class Label extends AbstractComponent implements Property<String>,
}
/**
- * Gets the value of the label. Value of the label is the XML contents of
- * the label.
+ * Gets the value of the label.
+ * <p>
+ * The value of the label is the text that is shown to the end user.
+ * Depending on the {@link ContentMode} it is plain text or markup.
+ * </p>
*
- * @return the Value of the label.
+ * @return the value of the label.
*/
+ @Override
public String getValue() {
if (getPropertyDataSource() == null) {
// Use internal value if we are running without a data source
@@ -163,6 +171,7 @@ public class Label extends AbstractComponent implements Property<String>,
* @param newStringValue
* the New value of the label.
*/
+ @Override
public void setValue(Object newStringValue) {
if (newStringValue != null && newStringValue.getClass() != String.class) {
throw new Converter.ConversionException("Value of type "
@@ -179,15 +188,20 @@ public class Label extends AbstractComponent implements Property<String>,
}
/**
+ * Returns the value displayed by this label.
+ *
* @see java.lang.Object#toString()
- * @deprecated use the data source value or {@link #getStringValue()}
- * instead
+ * @deprecated As of 7.0.0, use {@link #getValue()} to get the value of the
+ * label or {@link #getPropertyDataSource()} .getValue() to get
+ * the value of the data source.
*/
@Deprecated
@Override
public String toString() {
- throw new UnsupportedOperationException(
- "Use getValue() instead of Label.toString()");
+ logger.warning("You are using Label.toString() to get the value for a "
+ + getClass().getSimpleName()
+ + ". This is not recommended and will not be supported in future versions.");
+ return getValue();
}
/**
@@ -195,6 +209,7 @@ public class Label extends AbstractComponent implements Property<String>,
*
* @see com.vaadin.data.Property#getType()
*/
+ @Override
public Class<String> getType() {
return String.class;
}
@@ -205,6 +220,7 @@ public class Label extends AbstractComponent implements Property<String>,
* @return the data source property.
* @see com.vaadin.data.Property.Viewer#getPropertyDataSource()
*/
+ @Override
public Property getPropertyDataSource() {
return dataSource;
}
@@ -216,6 +232,7 @@ public class Label extends AbstractComponent implements Property<String>,
* the new data source Property
* @see com.vaadin.data.Property.Viewer#setPropertyDataSource(com.vaadin.data.Property)
*/
+ @Override
public void setPropertyDataSource(Property newDataSource) {
// Stops listening the old data source changes
if (dataSource != null
@@ -312,6 +329,7 @@ public class Label extends AbstractComponent implements Property<String>,
*
* @see com.vaadin.data.Property.ValueChangeEvent#getProperty()
*/
+ @Override
public Property getProperty() {
return (Property) getSource();
}
@@ -324,6 +342,7 @@ public class Label extends AbstractComponent implements Property<String>,
* the Listener to be added.
* @see com.vaadin.data.Property.ValueChangeNotifier#addListener(com.vaadin.data.Property.ValueChangeListener)
*/
+ @Override
public void addListener(Property.ValueChangeListener listener) {
addListener(Label.ValueChangeEvent.class, listener, VALUE_CHANGE_METHOD);
}
@@ -335,6 +354,7 @@ public class Label extends AbstractComponent implements Property<String>,
* the Listener to be removed.
* @see com.vaadin.data.Property.ValueChangeNotifier#removeListener(com.vaadin.data.Property.ValueChangeListener)
*/
+ @Override
public void removeListener(Property.ValueChangeListener listener) {
removeListener(Label.ValueChangeEvent.class, listener,
VALUE_CHANGE_METHOD);
@@ -353,6 +373,7 @@ public class Label extends AbstractComponent implements Property<String>,
*
* @see com.vaadin.data.Property.ValueChangeListener#valueChange(Property.ValueChangeEvent)
*/
+ @Override
public void valueChange(Property.ValueChangeEvent event) {
// Update the internal value from the data source
getState().setText(getValue());
@@ -397,6 +418,7 @@ public class Label extends AbstractComponent implements Property<String>,
* less than, equal to, or greater than the specified object.
* @see java.lang.Comparable#compareTo(java.lang.Object)
*/
+ @Override
public int compareTo(Label other) {
String thisValue = getComparableValue();
diff --git a/src/com/vaadin/ui/Layout.java b/src/com/vaadin/ui/Layout.java
index 67bfaa75ff..d083f9afdc 100644
--- a/src/com/vaadin/ui/Layout.java
+++ b/src/com/vaadin/ui/Layout.java
@@ -6,8 +6,8 @@ package com.vaadin.ui;
import java.io.Serializable;
-import com.vaadin.terminal.gwt.client.ui.AlignmentInfo.Bits;
-import com.vaadin.terminal.gwt.client.ui.VMarginInfo;
+import com.vaadin.shared.ui.VMarginInfo;
+import com.vaadin.shared.ui.AlignmentInfo.Bits;
/**
* Extension to the {@link ComponentContainer} interface which adds the
diff --git a/src/com/vaadin/ui/Link.java b/src/com/vaadin/ui/Link.java
index db0dc58e6b..fd105f3255 100644
--- a/src/com/vaadin/ui/Link.java
+++ b/src/com/vaadin/ui/Link.java
@@ -96,6 +96,7 @@ public class Link extends AbstractComponent implements Vaadin6Component {
* @throws PaintException
* if the paint operation failed.
*/
+ @Override
public void paintContent(PaintTarget target) throws PaintException {
if (resource != null) {
@@ -234,6 +235,7 @@ public class Link extends AbstractComponent implements Vaadin6Component {
requestRepaint();
}
+ @Override
public void changeVariables(Object source, Map<String, Object> variables) {
// TODO Remove once Vaadin6Component is no longer implemented
}
diff --git a/src/com/vaadin/ui/LoginForm.java b/src/com/vaadin/ui/LoginForm.java
index 1d5203bc6b..db7e5f9dd9 100644
--- a/src/com/vaadin/ui/LoginForm.java
+++ b/src/com/vaadin/ui/LoginForm.java
@@ -48,33 +48,40 @@ public class LoginForm extends CustomComponent {
private ApplicationResource loginPage = new ApplicationResource() {
+ @Override
public Application getApplication() {
return LoginForm.this.getApplication();
}
+ @Override
public int getBufferSize() {
return getLoginHTML().length;
}
+ @Override
public long getCacheTime() {
return -1;
}
+ @Override
public String getFilename() {
return "login";
}
+ @Override
public DownloadStream getStream() {
return new DownloadStream(new ByteArrayInputStream(getLoginHTML()),
getMIMEType(), getFilename());
}
+ @Override
public String getMIMEType() {
return "text/html; charset=utf-8";
}
};
private final RequestHandler requestHandler = new RequestHandler() {
+ @Override
public boolean handleRequest(Application application,
WrappedRequest request, WrappedResponse response)
throws IOException {
@@ -84,7 +91,7 @@ public class LoginForm extends CustomComponent {
response.setContentType("text/html; charset=utf-8");
response.getWriter()
.write("<html><body>Login form handled."
- + "<script type='text/javascript'>top.vaadin.forceSync();"
+ + "<script type='text/javascript'>parent.parent.vaadin.forceSync();"
+ "</script></body></html>");
Map<String, String[]> parameters = request.getParameterMap();
diff --git a/src/com/vaadin/ui/MenuBar.java b/src/com/vaadin/ui/MenuBar.java
index f94bd7ea64..5b5dc13e20 100644
--- a/src/com/vaadin/ui/MenuBar.java
+++ b/src/com/vaadin/ui/MenuBar.java
@@ -39,6 +39,7 @@ public class MenuBar extends AbstractComponent implements Vaadin6Component {
private boolean htmlContentAllowed;
/** Paint (serialise) the component for the client. */
+ @Override
public void paintContent(PaintTarget target) throws PaintException {
target.addAttribute(VMenuBar.OPEN_ROOT_MENU_ON_HOWER, openRootOnHover);
@@ -125,6 +126,7 @@ public class MenuBar extends AbstractComponent implements Vaadin6Component {
}
/** Deserialize changes received from client. */
+ @Override
public void changeVariables(Object source, Map<String, Object> variables) {
Stack<MenuItem> items = new Stack<MenuItem>();
boolean found = false;
diff --git a/src/com/vaadin/ui/Notification.java b/src/com/vaadin/ui/Notification.java
index 0358283cb4..502e5ff788 100644
--- a/src/com/vaadin/ui/Notification.java
+++ b/src/com/vaadin/ui/Notification.java
@@ -76,8 +76,7 @@ public class Notification implements Serializable {
/**
* Creates a "humanized" notification message.
*
- * Care should be taken to to avoid XSS vulnerabilities as the caption is by
- * default rendered as html.
+ * The caption is rendered as plain text with HTML automatically escaped.
*
* @param caption
* The message to show
@@ -89,8 +88,7 @@ public class Notification implements Serializable {
/**
* Creates a notification message of the specified type.
*
- * Care should be taken to to avoid XSS vulnerabilities as the caption is by
- * default rendered as html.
+ * The caption is rendered as plain text with HTML automatically escaped.
*
* @param caption
* The message to show
@@ -105,8 +103,8 @@ public class Notification implements Serializable {
* Creates a "humanized" notification message with a bigger caption and
* smaller description.
*
- * Care should be taken to to avoid XSS vulnerabilities as the caption and
- * description are by default rendered as html.
+ * The caption and description are rendered as plain text with HTML
+ * automatically escaped.
*
* @param caption
* The message caption
@@ -121,8 +119,8 @@ public class Notification implements Serializable {
* Creates a notification message of the specified type, with a bigger
* caption and smaller description.
*
- * Care should be taken to to avoid XSS vulnerabilities as the caption and
- * description are by default rendered as html.
+ * The caption and description are rendered as plain text with HTML
+ * automatically escaped.
*
* @param caption
* The message caption
@@ -132,7 +130,7 @@ public class Notification implements Serializable {
* The type of message
*/
public Notification(String caption, String description, int type) {
- this(caption, description, type, true);
+ this(caption, description, type, false);
}
/**
@@ -335,8 +333,7 @@ public class Notification implements Serializable {
* Shows a notification message on the middle of the current page. The
* message automatically disappears ("humanized message").
*
- * Care should be taken to to avoid XSS vulnerabilities as the caption is
- * rendered as html.
+ * The caption is rendered as plain text with HTML automatically escaped.
*
* @see #Notification(String)
* @see #show(Page)
@@ -354,8 +351,7 @@ public class Notification implements Serializable {
* defined in {@link Notification}, for instance
* Notification.TYPE_WARNING_MESSAGE.
*
- * Care should be taken to to avoid XSS vulnerabilities as the caption is
- * rendered as html.
+ * The caption is rendered as plain text with HTML automatically escaped.
*
* @see #Notification(String, int)
* @see #show(Page)
diff --git a/src/com/vaadin/ui/OptionGroup.java b/src/com/vaadin/ui/OptionGroup.java
index a4aaf7ec99..e3bcdd61b7 100644
--- a/src/com/vaadin/ui/OptionGroup.java
+++ b/src/com/vaadin/ui/OptionGroup.java
@@ -75,20 +75,24 @@ public class OptionGroup extends AbstractSelect implements
}
}
+ @Override
public void addListener(BlurListener listener) {
addListener(BlurEvent.EVENT_ID, BlurEvent.class, listener,
BlurListener.blurMethod);
}
+ @Override
public void removeListener(BlurListener listener) {
removeListener(BlurEvent.EVENT_ID, BlurEvent.class, listener);
}
+ @Override
public void addListener(FocusListener listener) {
addListener(FocusEvent.EVENT_ID, FocusEvent.class, listener,
FocusListener.focusMethod);
}
+ @Override
public void removeListener(FocusListener listener) {
removeListener(FocusEvent.EVENT_ID, FocusEvent.class, listener);
diff --git a/src/com/vaadin/ui/Panel.java b/src/com/vaadin/ui/Panel.java
index c339100cda..3c26b73f09 100644
--- a/src/com/vaadin/ui/Panel.java
+++ b/src/com/vaadin/ui/Panel.java
@@ -13,14 +13,14 @@ import com.vaadin.event.Action.Handler;
import com.vaadin.event.ActionManager;
import com.vaadin.event.MouseEvents.ClickEvent;
import com.vaadin.event.MouseEvents.ClickListener;
+import com.vaadin.shared.MouseEventDetails;
+import com.vaadin.shared.ui.panel.PanelServerRpc;
+import com.vaadin.shared.ui.panel.PanelState;
import com.vaadin.terminal.PaintException;
import com.vaadin.terminal.PaintTarget;
import com.vaadin.terminal.Scrollable;
import com.vaadin.terminal.Vaadin6Component;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
import com.vaadin.terminal.gwt.client.ui.ClickEventHandler;
-import com.vaadin.terminal.gwt.client.ui.panel.PanelServerRpc;
-import com.vaadin.terminal.gwt.client.ui.panel.PanelState;
import com.vaadin.ui.Component.Focusable;
/**
@@ -49,6 +49,7 @@ public class Panel extends AbstractComponentContainer implements Scrollable,
protected ActionManager actionManager;
private PanelServerRpc rpc = new PanelServerRpc() {
+ @Override
public void click(MouseEventDetails mouseDetails) {
fireEvent(new ClickEvent(Panel.this, mouseDetails));
}
@@ -188,6 +189,7 @@ public class Panel extends AbstractComponentContainer implements Scrollable,
* com.vaadin.terminal.Vaadin6Component#paintContent(com.vaadin.terminal
* .PaintTarget)
*/
+ @Override
public void paintContent(PaintTarget target) throws PaintException {
if (actionManager != null) {
actionManager.paintActions(null, target);
@@ -229,6 +231,7 @@ public class Panel extends AbstractComponentContainer implements Scrollable,
* @return the Iterator of the components inside the container.
* @see com.vaadin.ui.ComponentContainer#getComponentIterator()
*/
+ @Override
public Iterator<Component> getComponentIterator() {
return Collections.singleton((Component) content).iterator();
}
@@ -239,6 +242,7 @@ public class Panel extends AbstractComponentContainer implements Scrollable,
*
* @see com.vaadin.terminal.VariableOwner#changeVariables(Object, Map)
*/
+ @Override
@SuppressWarnings("unchecked")
public void changeVariables(Object source, Map<String, Object> variables) {
// Get new size
@@ -277,6 +281,7 @@ public class Panel extends AbstractComponentContainer implements Scrollable,
*
* @see com.vaadin.terminal.Scrollable#setScrollable(boolean)
*/
+ @Override
public int getScrollLeft() {
return getState().getScrollLeft();
}
@@ -286,6 +291,7 @@ public class Panel extends AbstractComponentContainer implements Scrollable,
*
* @see com.vaadin.terminal.Scrollable#setScrollable(boolean)
*/
+ @Override
public int getScrollTop() {
return getState().getScrollTop();
}
@@ -295,6 +301,7 @@ public class Panel extends AbstractComponentContainer implements Scrollable,
*
* @see com.vaadin.terminal.Scrollable#setScrollLeft(int)
*/
+ @Override
public void setScrollLeft(int scrollLeft) {
if (scrollLeft < 0) {
throw new IllegalArgumentException(
@@ -309,6 +316,7 @@ public class Panel extends AbstractComponentContainer implements Scrollable,
*
* @see com.vaadin.terminal.Scrollable#setScrollTop(int)
*/
+ @Override
public void setScrollTop(int scrollTop) {
if (scrollTop < 0) {
throw new IllegalArgumentException(
@@ -319,6 +327,7 @@ public class Panel extends AbstractComponentContainer implements Scrollable,
}
/* Documented in superclass */
+ @Override
public void replaceComponent(Component oldComponent, Component newComponent) {
content.replaceComponent(oldComponent, newComponent);
@@ -329,6 +338,7 @@ public class Panel extends AbstractComponentContainer implements Scrollable,
*
* @see com.vaadin.ui.ComponentContainer.ComponentAttachListener#componentAttachedToContainer(com.vaadin.ui.ComponentContainer.ComponentAttachEvent)
*/
+ @Override
public void componentAttachedToContainer(ComponentAttachEvent event) {
if (event.getContainer() == content) {
fireComponentAttachEvent(event.getAttachedComponent());
@@ -340,6 +350,7 @@ public class Panel extends AbstractComponentContainer implements Scrollable,
*
* @see com.vaadin.ui.ComponentContainer.ComponentDetachListener#componentDetachedFromContainer(com.vaadin.ui.ComponentContainer.ComponentDetachEvent)
*/
+ @Override
public void componentDetachedFromContainer(ComponentDetachEvent event) {
if (event.getContainer() == content) {
fireComponentDetachEvent(event.getDetachedComponent());
@@ -367,11 +378,13 @@ public class Panel extends AbstractComponentContainer implements Scrollable,
return actionManager;
}
+ @Override
public <T extends Action & com.vaadin.event.Action.Listener> void addAction(
T action) {
getActionManager().addAction(action);
}
+ @Override
public <T extends Action & com.vaadin.event.Action.Listener> void removeAction(
T action) {
if (actionManager != null) {
@@ -379,10 +392,12 @@ public class Panel extends AbstractComponentContainer implements Scrollable,
}
}
+ @Override
public void addActionHandler(Handler actionHandler) {
getActionManager().addActionHandler(actionHandler);
}
+ @Override
public void removeActionHandler(Handler actionHandler) {
if (actionManager != null) {
actionManager.removeActionHandler(actionHandler);
@@ -429,6 +444,7 @@ public class Panel extends AbstractComponentContainer implements Scrollable,
/**
* {@inheritDoc}
*/
+ @Override
public int getTabIndex() {
return getState().getTabIndex();
}
@@ -436,6 +452,7 @@ public class Panel extends AbstractComponentContainer implements Scrollable,
/**
* {@inheritDoc}
*/
+ @Override
public void setTabIndex(int tabIndex) {
getState().setTabIndex(tabIndex);
requestRepaint();
@@ -455,6 +472,7 @@ public class Panel extends AbstractComponentContainer implements Scrollable,
*
* @see com.vaadin.ui.ComponentContainer#getComponentCount()
*/
+ @Override
public int getComponentCount() {
// This is so wrong... (#2924)
return content.getComponentCount();
diff --git a/src/com/vaadin/ui/PopupView.java b/src/com/vaadin/ui/PopupView.java
index 911d926053..766181b50f 100644
--- a/src/com/vaadin/ui/PopupView.java
+++ b/src/com/vaadin/ui/PopupView.java
@@ -58,10 +58,12 @@ public class PopupView extends AbstractComponentContainer implements
first = (component == null);
}
+ @Override
public boolean hasNext() {
return !first;
}
+ @Override
public Component next() {
if (!first) {
first = true;
@@ -71,6 +73,7 @@ public class PopupView extends AbstractComponentContainer implements
}
}
+ @Override
public void remove() {
throw new UnsupportedOperationException();
}
@@ -90,10 +93,12 @@ public class PopupView extends AbstractComponentContainer implements
*/
public PopupView(final java.lang.String small, final Component large) {
this(new PopupView.Content() {
+ @Override
public java.lang.String getMinimizedValueAsHTML() {
return small;
}
+ @Override
public Component getPopupComponent() {
return large;
}
@@ -223,6 +228,7 @@ public class PopupView extends AbstractComponentContainer implements
*
* @see com.vaadin.ui.ComponentContainer#getComponentIterator()
*/
+ @Override
public Iterator<Component> getComponentIterator() {
return new SingleComponentIterator(visibleComponent);
}
@@ -233,6 +239,7 @@ public class PopupView extends AbstractComponentContainer implements
*
* @return the number of contained components (zero or one)
*/
+ @Override
public int getComponentCount() {
return (visibleComponent != null ? 1 : 0);
}
@@ -280,6 +287,7 @@ public class PopupView extends AbstractComponentContainer implements
* com.vaadin.ui.Component)
* @throws UnsupportedOperationException
*/
+ @Override
public void replaceComponent(Component oldComponent, Component newComponent)
throws UnsupportedOperationException {
@@ -307,6 +315,7 @@ public class PopupView extends AbstractComponentContainer implements
*
* @see com.vaadin.ui.AbstractComponent#paintContent(com.vaadin.terminal.PaintTarget)
*/
+ @Override
public void paintContent(PaintTarget target) throws PaintException {
String html = content.getMinimizedValueAsHTML();
if (html == null) {
@@ -331,6 +340,7 @@ public class PopupView extends AbstractComponentContainer implements
* @see com.vaadin.ui.AbstractComponent#changeVariables(java.lang.Object,
* java.util.Map)
*/
+ @Override
public void changeVariables(Object source, Map<String, Object> variables) {
if (variables.containsKey("popupVisibility")) {
setPopupVisible(((Boolean) variables.get("popupVisibility"))
diff --git a/src/com/vaadin/ui/ProgressIndicator.java b/src/com/vaadin/ui/ProgressIndicator.java
index 4d585cfdd7..fef54a267c 100644
--- a/src/com/vaadin/ui/ProgressIndicator.java
+++ b/src/com/vaadin/ui/ProgressIndicator.java
@@ -111,6 +111,7 @@ public class ProgressIndicator extends AbstractField<Number> implements
* @throws PaintException
* if the Paint Operation fails.
*/
+ @Override
public void paintContent(PaintTarget target) throws PaintException {
target.addAttribute("indeterminate", indeterminate);
target.addAttribute("pollinginterval", pollingInterval);
@@ -247,6 +248,7 @@ public class ProgressIndicator extends AbstractField<Number> implements
return pollingInterval;
}
+ @Override
public void changeVariables(Object source, Map<String, Object> variables) {
// TODO Remove once Vaadin6Component is no longer implemented
diff --git a/src/com/vaadin/ui/RichTextArea.java b/src/com/vaadin/ui/RichTextArea.java
index 16d4761b40..cec952926b 100644
--- a/src/com/vaadin/ui/RichTextArea.java
+++ b/src/com/vaadin/ui/RichTextArea.java
@@ -103,6 +103,7 @@ public class RichTextArea extends AbstractField<String> implements
setCaption(caption);
}
+ @Override
public void paintContent(PaintTarget target) throws PaintException {
if (selectAll) {
target.addAttribute("selectAll", true);
@@ -185,6 +186,7 @@ public class RichTextArea extends AbstractField<String> implements
}
}
+ @Override
public void changeVariables(Object source, Map<String, Object> variables) {
// Sets the text
if (variables.containsKey("text") && !isReadOnly()) {
diff --git a/src/com/vaadin/ui/Root.java b/src/com/vaadin/ui/Root.java
index 7ae687be79..bd4842632b 100644
--- a/src/com/vaadin/ui/Root.java
+++ b/src/com/vaadin/ui/Root.java
@@ -20,6 +20,9 @@ import com.vaadin.event.Action.Handler;
import com.vaadin.event.ActionManager;
import com.vaadin.event.MouseEvents.ClickEvent;
import com.vaadin.event.MouseEvents.ClickListener;
+import com.vaadin.shared.MouseEventDetails;
+import com.vaadin.shared.ui.root.RootServerRpc;
+import com.vaadin.shared.ui.root.RootState;
import com.vaadin.terminal.Page;
import com.vaadin.terminal.Page.BrowserWindowResizeEvent;
import com.vaadin.terminal.Page.BrowserWindowResizeListener;
@@ -29,9 +32,6 @@ import com.vaadin.terminal.Resource;
import com.vaadin.terminal.Vaadin6Component;
import com.vaadin.terminal.WrappedRequest;
import com.vaadin.terminal.WrappedRequest.BrowserDetails;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
-import com.vaadin.terminal.gwt.client.ui.root.RootServerRpc;
-import com.vaadin.terminal.gwt.client.ui.root.RootState;
import com.vaadin.terminal.gwt.client.ui.root.VRoot;
import com.vaadin.ui.Window.CloseListener;
@@ -419,6 +419,7 @@ public abstract class Root extends AbstractComponentContainer implements
private Page page = new Page(this);
private RootServerRpc rpc = new RootServerRpc() {
+ @Override
public void click(MouseEventDetails mouseDetails) {
fireEvent(new ClickEvent(Root.this, mouseDetails));
}
@@ -502,6 +503,7 @@ public abstract class Root extends AbstractComponentContainer implements
return this;
}
+ @Override
public void replaceComponent(Component oldComponent, Component newComponent) {
throw new UnsupportedOperationException();
}
@@ -511,6 +513,7 @@ public abstract class Root extends AbstractComponentContainer implements
return application;
}
+ @Override
public void paintContent(PaintTarget target) throws PaintException {
page.paintContent(target);
@@ -550,6 +553,7 @@ public abstract class Root extends AbstractComponentContainer implements
fireEvent(new ClickEvent(this, mouseDetails));
}
+ @Override
@SuppressWarnings("unchecked")
public void changeVariables(Object source, Map<String, Object> variables) {
if (variables.containsKey(CLICK_EVENT_ID)) {
@@ -578,6 +582,7 @@ public abstract class Root extends AbstractComponentContainer implements
*
* @see com.vaadin.ui.ComponentContainer#getComponentIterator()
*/
+ @Override
public Iterator<Component> getComponentIterator() {
// TODO could directly create some kind of combined iterator instead of
// creating a new ArrayList
@@ -597,6 +602,7 @@ public abstract class Root extends AbstractComponentContainer implements
*
* @see com.vaadin.ui.ComponentContainer#getComponentCount()
*/
+ @Override
public int getComponentCount() {
return windows.size() + (getContent() == null ? 0 : 1);
}
@@ -956,11 +962,13 @@ public abstract class Root extends AbstractComponentContainer implements
return actionManager;
}
+ @Override
public <T extends Action & com.vaadin.event.Action.Listener> void addAction(
T action) {
getActionManager().addAction(action);
}
+ @Override
public <T extends Action & com.vaadin.event.Action.Listener> void removeAction(
T action) {
if (actionManager != null) {
@@ -968,10 +976,12 @@ public abstract class Root extends AbstractComponentContainer implements
}
}
+ @Override
public void addActionHandler(Handler actionHandler) {
getActionManager().addActionHandler(actionHandler);
}
+ @Override
public void removeActionHandler(Handler actionHandler) {
if (actionManager != null) {
actionManager.removeActionHandler(actionHandler);
@@ -1071,11 +1081,14 @@ public abstract class Root extends AbstractComponentContainer implements
* @param caption
* The message
*
- * @deprecated As of 7.0, use Notification.show instead
+ * @deprecated As of 7.0, use Notification.show instead but be aware that
+ * Notification.show does not allow HTML.
*/
@Deprecated
public void showNotification(String caption) {
- getPage().showNotification(new Notification(caption));
+ Notification notification = new Notification(caption);
+ notification.setHtmlContentAllowed(true);// Backwards compatibility
+ getPage().showNotification(notification);
}
/**
@@ -1094,11 +1107,14 @@ public abstract class Root extends AbstractComponentContainer implements
* @param type
* The message type
*
- * @deprecated As of 7.0, use Notification.show instead
+ * @deprecated As of 7.0, use Notification.show instead but be aware that
+ * Notification.show does not allow HTML.
*/
@Deprecated
public void showNotification(String caption, int type) {
- getPage().showNotification(new Notification(caption, type));
+ Notification notification = new Notification(caption, type);
+ notification.setHtmlContentAllowed(true);// Backwards compatibility
+ getPage().showNotification(notification);
}
/**
@@ -1117,11 +1133,14 @@ public abstract class Root extends AbstractComponentContainer implements
* @param description
* The message description
*
- * @deprecated As of 7.0, use Notification.show instead
+ * @deprecated As of 7.0, use new Notification(...).show(Page) instead but
+ * be aware that HTML by default not allowed.
*/
@Deprecated
public void showNotification(String caption, String description) {
- getPage().showNotification(new Notification(caption, description));
+ Notification notification = new Notification(caption, description);
+ notification.setHtmlContentAllowed(true);// Backwards compatibility
+ getPage().showNotification(notification);
}
/**
@@ -1143,12 +1162,14 @@ public abstract class Root extends AbstractComponentContainer implements
* @param type
* The message type
*
- * @deprecated As of 7.0, use Notification.show instead
+ * @deprecated As of 7.0, use new Notification(...).show(Page) instead but
+ * be aware that HTML by default not allowed.
*/
@Deprecated
public void showNotification(String caption, String description, int type) {
- getPage()
- .showNotification(new Notification(caption, description, type));
+ Notification notification = new Notification(caption, description, type);
+ notification.setHtmlContentAllowed(true);// Backwards compatibility
+ getPage().showNotification(notification);
}
/**
@@ -1173,7 +1194,7 @@ public abstract class Root extends AbstractComponentContainer implements
* Whether html in the caption and description should be
* displayed as html or as plain text
*
- * @deprecated As of 7.0, use Notification.show instead
+ * @deprecated As of 7.0, use new Notification(...).show(Page).
*/
@Deprecated
public void showNotification(String caption, String description, int type,
diff --git a/src/com/vaadin/ui/Select.java b/src/com/vaadin/ui/Select.java
index 5398f11391..f60935c64b 100644
--- a/src/com/vaadin/ui/Select.java
+++ b/src/com/vaadin/ui/Select.java
@@ -677,10 +677,12 @@ public class Select extends AbstractSelect implements AbstractSelect.Filtering,
super.requestRepaint();
}
+ @Override
public void setFilteringMode(int filteringMode) {
this.filteringMode = filteringMode;
}
+ @Override
public int getFilteringMode() {
return filteringMode;
}
@@ -719,20 +721,24 @@ public class Select extends AbstractSelect implements AbstractSelect.Filtering,
return columns;
}
+ @Override
public void addListener(BlurListener listener) {
addListener(BlurEvent.EVENT_ID, BlurEvent.class, listener,
BlurListener.blurMethod);
}
+ @Override
public void removeListener(BlurListener listener) {
removeListener(BlurEvent.EVENT_ID, BlurEvent.class, listener);
}
+ @Override
public void addListener(FocusListener listener) {
addListener(FocusEvent.EVENT_ID, FocusEvent.class, listener,
FocusListener.focusMethod);
}
+ @Override
public void removeListener(FocusListener listener) {
removeListener(FocusEvent.EVENT_ID, FocusEvent.class, listener);
diff --git a/src/com/vaadin/ui/Slider.java b/src/com/vaadin/ui/Slider.java
index dc5dc0be98..94afe4e2bd 100644
--- a/src/com/vaadin/ui/Slider.java
+++ b/src/com/vaadin/ui/Slider.java
@@ -278,6 +278,7 @@ public class Slider extends AbstractField<Double> implements Vaadin6Component {
super.setValue(newFieldValue);
}
+ @Override
public void paintContent(PaintTarget target) throws PaintException {
target.addAttribute("min", min);
@@ -307,6 +308,7 @@ public class Slider extends AbstractField<Double> implements Vaadin6Component {
* @param source
* @param variables
*/
+ @Override
public void changeVariables(Object source, Map<String, Object> variables) {
if (variables.containsKey("value")) {
final Object value = variables.get("value");
diff --git a/src/com/vaadin/ui/TabSheet.java b/src/com/vaadin/ui/TabSheet.java
index 061809de67..c52e9394c0 100644
--- a/src/com/vaadin/ui/TabSheet.java
+++ b/src/com/vaadin/ui/TabSheet.java
@@ -109,6 +109,7 @@ public class TabSheet extends AbstractComponentContainer implements Focusable,
setImmediate(true);
setCloseHandler(new CloseHandler() {
+ @Override
public void onTabClose(TabSheet tabsheet, Component c) {
tabsheet.removeComponent(c);
}
@@ -122,6 +123,7 @@ public class TabSheet extends AbstractComponentContainer implements Focusable,
* @return the unmodifiable Iterator of the tab content components
*/
+ @Override
public Iterator<Component> getComponentIterator() {
return Collections.unmodifiableList(components).iterator();
}
@@ -133,6 +135,7 @@ public class TabSheet extends AbstractComponentContainer implements Focusable,
* @return the number of contained components
*/
+ @Override
public int getComponentCount() {
return components.size();
}
@@ -366,6 +369,7 @@ public class TabSheet extends AbstractComponentContainer implements Focusable,
* if the paint operation failed.
*/
+ @Override
public void paintContent(PaintTarget target) throws PaintException {
if (areTabsHidden()) {
@@ -691,6 +695,7 @@ public class TabSheet extends AbstractComponentContainer implements Focusable,
// inherits javadoc
+ @Override
public void changeVariables(Object source, Map<String, Object> variables) {
if (variables.containsKey("selected")) {
setSelectedTab(keyMapper.get((String) variables.get("selected")));
@@ -728,6 +733,7 @@ public class TabSheet extends AbstractComponentContainer implements Focusable,
* {@inheritDoc}
*/
+ @Override
public void replaceComponent(Component oldComponent, Component newComponent) {
if (selected == oldComponent) {
@@ -1083,28 +1089,34 @@ public class TabSheet extends AbstractComponentContainer implements Focusable,
* Returns the tab caption. Can never be null.
*/
+ @Override
public String getCaption() {
return caption;
}
+ @Override
public void setCaption(String caption) {
this.caption = caption;
requestRepaint();
}
+ @Override
public Resource getIcon() {
return icon;
}
+ @Override
public void setIcon(Resource icon) {
this.icon = icon;
requestRepaint();
}
+ @Override
public boolean isEnabled() {
return enabled;
}
+ @Override
public void setEnabled(boolean enabled) {
this.enabled = enabled;
if (updateSelection()) {
@@ -1113,10 +1125,12 @@ public class TabSheet extends AbstractComponentContainer implements Focusable,
requestRepaint();
}
+ @Override
public boolean isVisible() {
return visible;
}
+ @Override
public void setVisible(boolean visible) {
this.visible = visible;
if (updateSelection()) {
@@ -1125,10 +1139,12 @@ public class TabSheet extends AbstractComponentContainer implements Focusable,
requestRepaint();
}
+ @Override
public boolean isClosable() {
return closable;
}
+ @Override
public void setClosable(boolean closable) {
this.closable = closable;
requestRepaint();
@@ -1138,24 +1154,29 @@ public class TabSheet extends AbstractComponentContainer implements Focusable,
}
+ @Override
public String getDescription() {
return description;
}
+ @Override
public void setDescription(String description) {
this.description = description;
requestRepaint();
}
+ @Override
public ErrorMessage getComponentError() {
return componentError;
}
+ @Override
public void setComponentError(ErrorMessage componentError) {
this.componentError = componentError;
requestRepaint();
}
+ @Override
public Component getComponent() {
for (Map.Entry<Component, Tab> entry : tabs.entrySet()) {
if (entry.getValue() == this) {
@@ -1165,11 +1186,13 @@ public class TabSheet extends AbstractComponentContainer implements Focusable,
return null;
}
+ @Override
public void setStyleName(String styleName) {
this.styleName = styleName;
requestRepaint();
}
+ @Override
public String getStyleName() {
return styleName;
}
@@ -1245,29 +1268,35 @@ public class TabSheet extends AbstractComponentContainer implements Focusable,
super.focus();
}
+ @Override
public int getTabIndex() {
return tabIndex;
}
+ @Override
public void setTabIndex(int tabIndex) {
this.tabIndex = tabIndex;
requestRepaint();
}
+ @Override
public void addListener(BlurListener listener) {
addListener(BlurEvent.EVENT_ID, BlurEvent.class, listener,
BlurListener.blurMethod);
}
+ @Override
public void removeListener(BlurListener listener) {
removeListener(BlurEvent.EVENT_ID, BlurEvent.class, listener);
}
+ @Override
public void addListener(FocusListener listener) {
addListener(FocusEvent.EVENT_ID, FocusEvent.class, listener,
FocusListener.focusMethod);
}
+ @Override
public void removeListener(FocusListener listener) {
removeListener(FocusEvent.EVENT_ID, FocusEvent.class, listener);
diff --git a/src/com/vaadin/ui/Table.java b/src/com/vaadin/ui/Table.java
index a1cc4f95fe..39b7fb7473 100644
--- a/src/com/vaadin/ui/Table.java
+++ b/src/com/vaadin/ui/Table.java
@@ -40,12 +40,12 @@ import com.vaadin.event.dd.DragSource;
import com.vaadin.event.dd.DropHandler;
import com.vaadin.event.dd.DropTarget;
import com.vaadin.event.dd.acceptcriteria.ServerSideCriterion;
+import com.vaadin.shared.MouseEventDetails;
import com.vaadin.terminal.KeyMapper;
import com.vaadin.terminal.LegacyPaint;
import com.vaadin.terminal.PaintException;
import com.vaadin.terminal.PaintTarget;
import com.vaadin.terminal.Resource;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
import com.vaadin.terminal.gwt.client.ui.table.VScrollTable;
/**
@@ -538,6 +538,13 @@ public class Table extends AbstractSelect implements Action.Container,
private HashMap<Object, Converter<String, Object>> propertyValueConverters = new HashMap<Object, Converter<String, Object>>();
+ /**
+ * Set to true if the client-side should be informed that the key mapper has
+ * been reset so it can avoid sending back references to keys that are no
+ * longer present.
+ */
+ private boolean keyMapperReset;
+
/* Table constructors */
/**
@@ -1587,9 +1594,10 @@ public class Table extends AbstractSelect implements Action.Container,
// Collects the basic facts about the table page
final int pagelen = getPageLength();
- int firstIndex = getCurrentPageFirstItemIndex();
int rows, totalRows;
rows = totalRows = size();
+ int firstIndex = Math
+ .min(getCurrentPageFirstItemIndex(), totalRows - 1);
if (rows > 0 && firstIndex >= 0) {
rows -= firstIndex;
}
@@ -2409,8 +2417,9 @@ public class Table extends AbstractSelect implements Action.Container,
* The end key
* @return
*/
- private Set<Object> getItemIdsInRange(Object itemId, final int length) {
- HashSet<Object> ids = new HashSet<Object>();
+ private LinkedHashSet<Object> getItemIdsInRange(Object itemId,
+ final int length) {
+ LinkedHashSet<Object> ids = new LinkedHashSet<Object>();
for (int i = 0; i < length; i++) {
assert itemId != null; // should not be null unless client-server
// are out of sync
@@ -2430,21 +2439,15 @@ public class Table extends AbstractSelect implements Action.Container,
final String[] ka = (String[]) variables.get("selected");
final String[] ranges = (String[]) variables.get("selectedRanges");
- Set<Object> renderedItemIds = getCurrentlyRenderedItemIds();
+ Set<Object> renderedButNotSelectedItemIds = getCurrentlyRenderedItemIds();
@SuppressWarnings("unchecked")
- HashSet<Object> newValue = new HashSet<Object>(
+ HashSet<Object> newValue = new LinkedHashSet<Object>(
(Collection<Object>) getValue());
if (variables.containsKey("clearSelections")) {
// the client side has instructed to swipe all previous selections
newValue.clear();
- } else {
- /*
- * first clear all selections that are currently rendered rows (the
- * ones that the client side counterpart is aware of)
- */
- newValue.removeAll(renderedItemIds);
}
/*
@@ -2461,6 +2464,7 @@ public class Table extends AbstractSelect implements Action.Container,
requestRepaint();
} else if (id != null && containsId(id)) {
newValue.add(id);
+ renderedButNotSelectedItemIds.remove(id);
}
}
@@ -2470,9 +2474,17 @@ public class Table extends AbstractSelect implements Action.Container,
String[] split = range.split("-");
Object startItemId = itemIdMapper.get(split[0]);
int length = Integer.valueOf(split[1]);
- newValue.addAll(getItemIdsInRange(startItemId, length));
+ LinkedHashSet<Object> itemIdsInRange = getItemIdsInRange(
+ startItemId, length);
+ newValue.addAll(itemIdsInRange);
+ renderedButNotSelectedItemIds.removeAll(itemIdsInRange);
}
}
+ /*
+ * finally clear all currently rendered rows (the ones that the client
+ * side counterpart is aware of) that the client didn't send as selected
+ */
+ newValue.removeAll(renderedButNotSelectedItemIds);
if (!isNullSelectionAllowed() && newValue.isEmpty()) {
// empty selection not allowed, keep old value
@@ -2885,6 +2897,11 @@ public class Table extends AbstractSelect implements Action.Container,
paintVisibleColumns(target);
+ if (keyMapperReset) {
+ keyMapperReset = false;
+ target.addAttribute(VScrollTable.ATTRIBUTE_KEY_MAPPER_RESET, true);
+ }
+
if (dropHandler != null) {
dropHandler.getAcceptCriterion().paint(target);
}
@@ -3681,6 +3698,7 @@ public class Table extends AbstractSelect implements Action.Container,
* @see com.vaadin.event.Action.Container#addActionHandler(Action.Handler)
*/
+ @Override
public void addActionHandler(Action.Handler actionHandler) {
if (actionHandler != null) {
@@ -3708,6 +3726,7 @@ public class Table extends AbstractSelect implements Action.Container,
* @see com.vaadin.event.Action.Container#removeActionHandler(Action.Handler)
*/
+ @Override
public void removeActionHandler(Action.Handler actionHandler) {
if (actionHandlers != null && actionHandlers.contains(actionHandler)) {
@@ -4046,6 +4065,10 @@ public class Table extends AbstractSelect implements Action.Container,
public void containerItemSetChange(Container.ItemSetChangeEvent event) {
super.containerItemSetChange(event);
+ // super method clears the key map, must inform client about this to
+ // avoid getting invalid keys back (#8584)
+ keyMapperReset = true;
+
// ensure that page still has first item in page, ignore buffer refresh
// (forced in this method)
setCurrentPageFirstItemIndex(getCurrentPageFirstItemIndex(), false);
@@ -4117,6 +4140,7 @@ public class Table extends AbstractSelect implements Action.Container,
* @see com.vaadin.data.Container.Ordered#nextItemId(java.lang.Object)
*/
+ @Override
public Object nextItemId(Object itemId) {
return ((Container.Ordered) items).nextItemId(itemId);
}
@@ -4128,6 +4152,7 @@ public class Table extends AbstractSelect implements Action.Container,
* @see com.vaadin.data.Container.Ordered#prevItemId(java.lang.Object)
*/
+ @Override
public Object prevItemId(Object itemId) {
return ((Container.Ordered) items).prevItemId(itemId);
}
@@ -4138,6 +4163,7 @@ public class Table extends AbstractSelect implements Action.Container,
* @see com.vaadin.data.Container.Ordered#firstItemId()
*/
+ @Override
public Object firstItemId() {
return ((Container.Ordered) items).firstItemId();
}
@@ -4148,6 +4174,7 @@ public class Table extends AbstractSelect implements Action.Container,
* @see com.vaadin.data.Container.Ordered#lastItemId()
*/
+ @Override
public Object lastItemId() {
return ((Container.Ordered) items).lastItemId();
}
@@ -4159,6 +4186,7 @@ public class Table extends AbstractSelect implements Action.Container,
* @see com.vaadin.data.Container.Ordered#isFirstId(java.lang.Object)
*/
+ @Override
public boolean isFirstId(Object itemId) {
return ((Container.Ordered) items).isFirstId(itemId);
}
@@ -4170,6 +4198,7 @@ public class Table extends AbstractSelect implements Action.Container,
* @see com.vaadin.data.Container.Ordered#isLastId(java.lang.Object)
*/
+ @Override
public boolean isLastId(Object itemId) {
return ((Container.Ordered) items).isLastId(itemId);
}
@@ -4180,6 +4209,7 @@ public class Table extends AbstractSelect implements Action.Container,
* @see com.vaadin.data.Container.Ordered#addItemAfter(java.lang.Object)
*/
+ @Override
public Object addItemAfter(Object previousItemId)
throws UnsupportedOperationException {
Object itemId = ((Container.Ordered) items)
@@ -4197,6 +4227,7 @@ public class Table extends AbstractSelect implements Action.Container,
* java.lang.Object)
*/
+ @Override
public Item addItemAfter(Object previousItemId, Object newItemId)
throws UnsupportedOperationException {
Item item = ((Container.Ordered) items).addItemAfter(previousItemId,
@@ -4290,6 +4321,7 @@ public class Table extends AbstractSelect implements Action.Container,
*
*/
+ @Override
public void sort(Object[] propertyId, boolean[] ascending)
throws UnsupportedOperationException {
final Container c = getContainerDataSource();
@@ -4331,6 +4363,7 @@ public class Table extends AbstractSelect implements Action.Container,
* @see com.vaadin.data.Container.Sortable#getSortableContainerPropertyIds()
*/
+ @Override
public Collection<?> getSortableContainerPropertyIds() {
final Container c = getContainerDataSource();
if (c instanceof Container.Sortable && isSortEnabled()) {
@@ -4544,11 +4577,13 @@ public class Table extends AbstractSelect implements Action.Container,
public abstract String getStyle(Object itemId, Object propertyId);
}
+ @Override
public void addListener(ItemClickListener listener) {
addListener(VScrollTable.ITEM_CLICK_EVENT_ID, ItemClickEvent.class,
listener, ItemClickEvent.ITEM_CLICK_METHOD);
}
+ @Override
public void removeListener(ItemClickListener listener) {
removeListener(VScrollTable.ITEM_CLICK_EVENT_ID, ItemClickEvent.class,
listener);
@@ -4625,11 +4660,13 @@ public class Table extends AbstractSelect implements Action.Container,
}
+ @Override
public TableTransferable getTransferable(Map<String, Object> rawVariables) {
TableTransferable transferable = new TableTransferable(rawVariables);
return transferable;
}
+ @Override
public DropHandler getDropHandler() {
return dropHandler;
}
@@ -4638,6 +4675,7 @@ public class Table extends AbstractSelect implements Action.Container,
this.dropHandler = dropHandler;
}
+ @Override
public AbstractSelectTargetDetails translateDropTargetDetails(
Map<String, Object> clientVariables) {
return new AbstractSelectTargetDetails(clientVariables);
@@ -4706,6 +4744,7 @@ public class Table extends AbstractSelect implements Action.Container,
* com.vaadin.event.dd.acceptcriteria.AcceptCriterion#accepts(com.vaadin
* .event.dd.DragAndDropEvent)
*/
+ @Override
@SuppressWarnings("unchecked")
public boolean accept(DragAndDropEvent dragEvent) {
AbstractSelectTargetDetails dropTargetData = (AbstractSelectTargetDetails) dragEvent
@@ -5381,10 +5420,12 @@ public class Table extends AbstractSelect implements Action.Container,
super.setVisible(visible);
}
+ @Override
public Iterator<Component> iterator() {
return getComponentIterator();
}
+ @Override
public Iterator<Component> getComponentIterator() {
if (visibleComponents == null) {
Collection<Component> empty = Collections.emptyList();
@@ -5394,6 +5435,7 @@ public class Table extends AbstractSelect implements Action.Container,
return visibleComponents.iterator();
}
+ @Override
public boolean isComponentVisible(Component childComponent) {
return true;
}
diff --git a/src/com/vaadin/ui/TextArea.java b/src/com/vaadin/ui/TextArea.java
index 4c0b563b00..d7837dd33f 100644
--- a/src/com/vaadin/ui/TextArea.java
+++ b/src/com/vaadin/ui/TextArea.java
@@ -5,7 +5,7 @@
package com.vaadin.ui;
import com.vaadin.data.Property;
-import com.vaadin.terminal.gwt.client.ui.textarea.TextAreaState;
+import com.vaadin.shared.ui.textarea.TextAreaState;
/**
* A text field that supports multi line editing.
diff --git a/src/com/vaadin/ui/Tree.java b/src/com/vaadin/ui/Tree.java
index dacb3a2027..c15975d879 100644
--- a/src/com/vaadin/ui/Tree.java
+++ b/src/com/vaadin/ui/Tree.java
@@ -37,12 +37,12 @@ import com.vaadin.event.dd.TargetDetails;
import com.vaadin.event.dd.acceptcriteria.ClientSideCriterion;
import com.vaadin.event.dd.acceptcriteria.ServerSideCriterion;
import com.vaadin.event.dd.acceptcriteria.TargetDetailIs;
+import com.vaadin.shared.MouseEventDetails;
+import com.vaadin.shared.ui.dd.VerticalDropLocation;
import com.vaadin.terminal.KeyMapper;
import com.vaadin.terminal.PaintException;
import com.vaadin.terminal.PaintTarget;
import com.vaadin.terminal.Resource;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
-import com.vaadin.terminal.gwt.client.ui.dd.VerticalDropLocation;
import com.vaadin.terminal.gwt.client.ui.tree.TreeConnector;
import com.vaadin.terminal.gwt.client.ui.tree.VTree;
import com.vaadin.tools.ReflectTools;
@@ -721,6 +721,7 @@ public class Tree extends AbstractSelect implements Container.Hierarchical,
*
* @see com.vaadin.data.Container.Hierarchical#areChildrenAllowed(Object)
*/
+ @Override
public boolean areChildrenAllowed(Object itemId) {
return ((Container.Hierarchical) items).areChildrenAllowed(itemId);
}
@@ -730,6 +731,7 @@ public class Tree extends AbstractSelect implements Container.Hierarchical,
*
* @see com.vaadin.data.Container.Hierarchical#getChildren(Object)
*/
+ @Override
public Collection<?> getChildren(Object itemId) {
return ((Container.Hierarchical) items).getChildren(itemId);
}
@@ -739,6 +741,7 @@ public class Tree extends AbstractSelect implements Container.Hierarchical,
*
* @see com.vaadin.data.Container.Hierarchical#getParent(Object)
*/
+ @Override
public Object getParent(Object itemId) {
return ((Container.Hierarchical) items).getParent(itemId);
}
@@ -748,6 +751,7 @@ public class Tree extends AbstractSelect implements Container.Hierarchical,
*
* @see com.vaadin.data.Container.Hierarchical#hasChildren(Object)
*/
+ @Override
public boolean hasChildren(Object itemId) {
return ((Container.Hierarchical) items).hasChildren(itemId);
}
@@ -757,6 +761,7 @@ public class Tree extends AbstractSelect implements Container.Hierarchical,
*
* @see com.vaadin.data.Container.Hierarchical#isRoot(Object)
*/
+ @Override
public boolean isRoot(Object itemId) {
return ((Container.Hierarchical) items).isRoot(itemId);
}
@@ -766,6 +771,7 @@ public class Tree extends AbstractSelect implements Container.Hierarchical,
*
* @see com.vaadin.data.Container.Hierarchical#rootItemIds()
*/
+ @Override
public Collection<?> rootItemIds() {
return ((Container.Hierarchical) items).rootItemIds();
}
@@ -776,6 +782,7 @@ public class Tree extends AbstractSelect implements Container.Hierarchical,
* @see com.vaadin.data.Container.Hierarchical#setChildrenAllowed(Object,
* boolean)
*/
+ @Override
public boolean setChildrenAllowed(Object itemId, boolean areChildrenAllowed) {
final boolean success = ((Container.Hierarchical) items)
.setChildrenAllowed(itemId, areChildrenAllowed);
@@ -791,6 +798,7 @@ public class Tree extends AbstractSelect implements Container.Hierarchical,
* @see com.vaadin.data.Container.Hierarchical#setParent(java.lang.Object ,
* java.lang.Object)
*/
+ @Override
public boolean setParent(Object itemId, Object newParentId) {
final boolean success = ((Container.Hierarchical) items).setParent(
itemId, newParentId);
@@ -1015,6 +1023,7 @@ public class Tree extends AbstractSelect implements Container.Hierarchical,
*
* @see com.vaadin.event.Action.Container#addActionHandler(Action.Handler)
*/
+ @Override
public void addActionHandler(Action.Handler actionHandler) {
if (actionHandler != null) {
@@ -1036,6 +1045,7 @@ public class Tree extends AbstractSelect implements Container.Hierarchical,
*
* @see com.vaadin.event.Action.Container#removeActionHandler(Action.Handler)
*/
+ @Override
public void removeActionHandler(Action.Handler actionHandler) {
if (actionHandlers != null && actionHandlers.contains(actionHandler)) {
@@ -1150,11 +1160,13 @@ public class Tree extends AbstractSelect implements Container.Hierarchical,
private DropHandler dropHandler;
+ @Override
public void addListener(ItemClickListener listener) {
addListener(VTree.ITEM_CLICK_EVENT_ID, ItemClickEvent.class, listener,
ItemClickEvent.ITEM_CLICK_METHOD);
}
+ @Override
public void removeListener(ItemClickListener listener) {
removeListener(VTree.ITEM_CLICK_EVENT_ID, ItemClickEvent.class,
listener);
@@ -1206,6 +1218,7 @@ public class Tree extends AbstractSelect implements Container.Hierarchical,
return super.removeItem(itemId);
}
+ @Override
public DropHandler getDropHandler() {
return dropHandler;
}
@@ -1304,6 +1317,7 @@ public class Tree extends AbstractSelect implements Container.Hierarchical,
* @see
* com.vaadin.event.dd.DropTarget#translateDropTargetDetails(java.util.Map)
*/
+ @Override
public TreeTargetDetails translateDropTargetDetails(
Map<String, Object> clientVariables) {
return new TreeTargetDetails(clientVariables);
@@ -1371,6 +1385,7 @@ public class Tree extends AbstractSelect implements Container.Hierarchical,
*
* @see com.vaadin.event.dd.DragSource#getTransferable(java.util.Map)
*/
+ @Override
public Transferable getTransferable(Map<String, Object> payload) {
TreeTransferable transferable = new TreeTransferable(this, payload);
// updating drag source variables
@@ -1418,6 +1433,7 @@ public class Tree extends AbstractSelect implements Container.Hierarchical,
* com.vaadin.event.dd.acceptCriteria.AcceptCriterion#accepts(com.vaadin
* .event.dd.DragAndDropEvent)
*/
+ @Override
public boolean accept(DragAndDropEvent dragEvent) {
AbstractSelectTargetDetails dropTargetData = (AbstractSelectTargetDetails) dragEvent
.getTargetDetails();
@@ -1541,6 +1557,7 @@ public class Tree extends AbstractSelect implements Container.Hierarchical,
this.depthToCheck = depthToCheck;
}
+ @Override
public boolean accept(DragAndDropEvent dragEvent) {
try {
TreeTargetDetails eventDetails = (TreeTargetDetails) dragEvent
diff --git a/src/com/vaadin/ui/TreeTable.java b/src/com/vaadin/ui/TreeTable.java
index 3294f6fab0..6132b652f7 100644
--- a/src/com/vaadin/ui/TreeTable.java
+++ b/src/com/vaadin/ui/TreeTable.java
@@ -82,6 +82,7 @@ public class TreeTable extends Table implements Hierarchical {
* scalability with some container implementations.
*/
+ @Override
public int getDepth(Object itemId) {
int depth = 0;
Hierarchical hierarchicalContainer = getContainerDataSource();
@@ -92,6 +93,7 @@ public class TreeTable extends Table implements Hierarchical {
return depth;
}
+ @Override
public void containerItemSetChange(ItemSetChangeEvent event) {
}
@@ -110,44 +112,54 @@ public class TreeTable extends Table implements Hierarchical {
return (Collapsible) getContainerDataSource();
}
+ @Override
public void toggleChildVisibility(Object itemId) {
c().setCollapsed(itemId, !c().isCollapsed(itemId));
}
+ @Override
public boolean isNodeOpen(Object itemId) {
return !c().isCollapsed(itemId);
}
+ @Override
public int size() {
return TreeTable.super.size();
}
+ @Override
public Object getIdByIndex(int index) {
return TreeTable.super.getIdByIndex(index);
}
+ @Override
public int indexOfId(Object id) {
return TreeTable.super.indexOfId(id);
}
+ @Override
public boolean isLastId(Object itemId) {
// using the default impl
return TreeTable.super.isLastId(itemId);
}
+ @Override
public Object lastItemId() {
// using the default impl
return TreeTable.super.lastItemId();
}
+ @Override
public Object nextItemId(Object itemId) {
return TreeTable.super.nextItemId(itemId);
}
+ @Override
public Object prevItemId(Object itemId) {
return TreeTable.super.prevItemId(itemId);
}
+ @Override
public Collection<?> getItemIds() {
return TreeTable.super.getItemIds();
}
@@ -165,18 +177,22 @@ public class TreeTable extends Table implements Hierarchical {
private final HashSet<Object> openItems = new HashSet<Object>();
+ @Override
public boolean isNodeOpen(Object itemId) {
return openItems.contains(itemId);
}
+ @Override
public int size() {
return getPreOrder().size();
}
+ @Override
public Collection<Object> getItemIds() {
return Collections.unmodifiableCollection(getPreOrder());
}
+ @Override
public boolean isLastId(Object itemId) {
if (itemId == null) {
return false;
@@ -185,6 +201,7 @@ public class TreeTable extends Table implements Hierarchical {
return itemId.equals(lastItemId());
}
+ @Override
public Object lastItemId() {
if (getPreOrder().size() > 0) {
return getPreOrder().get(getPreOrder().size() - 1);
@@ -193,6 +210,7 @@ public class TreeTable extends Table implements Hierarchical {
}
}
+ @Override
public Object nextItemId(Object itemId) {
int indexOf = getPreOrder().indexOf(itemId);
if (indexOf == -1) {
@@ -206,6 +224,7 @@ public class TreeTable extends Table implements Hierarchical {
}
}
+ @Override
public Object prevItemId(Object itemId) {
int indexOf = getPreOrder().indexOf(itemId);
indexOf--;
@@ -216,6 +235,7 @@ public class TreeTable extends Table implements Hierarchical {
}
}
+ @Override
public void toggleChildVisibility(Object itemId) {
boolean removed = openItems.remove(itemId);
if (!removed) {
@@ -265,10 +285,12 @@ public class TreeTable extends Table implements Hierarchical {
}
+ @Override
public int indexOfId(Object id) {
return getPreOrder().indexOf(id);
}
+ @Override
public Object getIdByIndex(int index) {
return getPreOrder().get(index);
}
@@ -610,36 +632,44 @@ public class TreeTable extends Table implements Hierarchical {
return getContainerStrategy().getItemIds();
}
+ @Override
public boolean areChildrenAllowed(Object itemId) {
return getContainerDataSource().areChildrenAllowed(itemId);
}
+ @Override
public Collection<?> getChildren(Object itemId) {
return getContainerDataSource().getChildren(itemId);
}
+ @Override
public Object getParent(Object itemId) {
return getContainerDataSource().getParent(itemId);
}
+ @Override
public boolean hasChildren(Object itemId) {
return getContainerDataSource().hasChildren(itemId);
}
+ @Override
public boolean isRoot(Object itemId) {
return getContainerDataSource().isRoot(itemId);
}
+ @Override
public Collection<?> rootItemIds() {
return getContainerDataSource().rootItemIds();
}
+ @Override
public boolean setChildrenAllowed(Object itemId, boolean areChildrenAllowed)
throws UnsupportedOperationException {
return getContainerDataSource().setChildrenAllowed(itemId,
areChildrenAllowed);
}
+ @Override
public boolean setParent(Object itemId, Object newParentId)
throws UnsupportedOperationException {
return getContainerDataSource().setParent(itemId, newParentId);
diff --git a/src/com/vaadin/ui/Upload.java b/src/com/vaadin/ui/Upload.java
index 4dff71e45b..9d533b67f6 100644
--- a/src/com/vaadin/ui/Upload.java
+++ b/src/com/vaadin/ui/Upload.java
@@ -122,6 +122,7 @@ public class Upload extends AbstractComponent implements Component.Focusable,
* @see com.vaadin.ui.AbstractComponent#changeVariables(java.lang.Object,
* java.util.Map)
*/
+ @Override
public void changeVariables(Object source, Map<String, Object> variables) {
if (variables.containsKey("pollForStart")) {
int id = (Integer) variables.get("pollForStart");
@@ -141,6 +142,7 @@ public class Upload extends AbstractComponent implements Component.Focusable,
* @throws PaintException
* if the paint operation failed.
*/
+ @Override
public void paintContent(PaintTarget target) throws PaintException {
if (notStarted) {
target.addAttribute("notStarted", true);
@@ -782,6 +784,7 @@ public class Upload extends AbstractComponent implements Component.Focusable,
*
* @see com.vaadin.ui.Component.Focusable#getTabIndex()
*/
+ @Override
public int getTabIndex() {
return tabIndex;
}
@@ -791,6 +794,7 @@ public class Upload extends AbstractComponent implements Component.Focusable,
*
* @see com.vaadin.ui.Component.Focusable#setTabIndex(int)
*/
+ @Override
public void setTabIndex(int tabIndex) {
this.tabIndex = tabIndex;
}
@@ -974,20 +978,24 @@ public class Upload extends AbstractComponent implements Component.Focusable,
streamVariable = new com.vaadin.terminal.StreamVariable() {
private StreamingStartEvent lastStartedEvent;
+ @Override
public boolean listenProgress() {
return (progressListeners != null && !progressListeners
.isEmpty());
}
+ @Override
public void onProgress(StreamingProgressEvent event) {
fireUpdateProgress(event.getBytesReceived(),
event.getContentLength());
}
+ @Override
public boolean isInterrupted() {
return interrupted;
}
+ @Override
public OutputStream getOutputStream() {
OutputStream receiveUpload = receiver.receiveUpload(
lastStartedEvent.getFileName(),
@@ -996,6 +1004,7 @@ public class Upload extends AbstractComponent implements Component.Focusable,
return receiveUpload;
}
+ @Override
public void streamingStarted(StreamingStartEvent event) {
startUpload();
contentLength = event.getContentLength();
@@ -1003,6 +1012,7 @@ public class Upload extends AbstractComponent implements Component.Focusable,
lastStartedEvent = event;
}
+ @Override
public void streamingFinished(StreamingEndEvent event) {
fireUploadSuccess(event.getFileName(), event.getMimeType(),
event.getContentLength());
@@ -1010,6 +1020,7 @@ public class Upload extends AbstractComponent implements Component.Focusable,
requestRepaint();
}
+ @Override
public void streamingFailed(StreamingErrorEvent event) {
Exception exception = event.getException();
if (exception instanceof NoInputStreamException) {
diff --git a/src/com/vaadin/ui/Video.java b/src/com/vaadin/ui/Video.java
index 0a2eccca0f..d4f95a5be3 100644
--- a/src/com/vaadin/ui/Video.java
+++ b/src/com/vaadin/ui/Video.java
@@ -4,8 +4,8 @@
package com.vaadin.ui;
+import com.vaadin.shared.ui.video.VideoState;
import com.vaadin.terminal.Resource;
-import com.vaadin.terminal.gwt.client.ui.video.VideoState;
import com.vaadin.terminal.gwt.server.ResourceReference;
/**
@@ -67,7 +67,7 @@ public class Video extends AbstractMedia {
* @param poster
*/
public void setPoster(Resource poster) {
- getState().setPoster(new ResourceReference(poster));
+ getState().setPoster(ResourceReference.create(poster));
requestRepaint();
}
@@ -75,7 +75,7 @@ public class Video extends AbstractMedia {
* @return The poster image.
*/
public Resource getPoster() {
- return ((ResourceReference) getState().getPoster()).getResource();
+ return ResourceReference.getResource(getState().getPoster());
}
}
diff --git a/src/com/vaadin/ui/Window.java b/src/com/vaadin/ui/Window.java
index 8866362587..e413d35e6d 100644
--- a/src/com/vaadin/ui/Window.java
+++ b/src/com/vaadin/ui/Window.java
@@ -19,13 +19,13 @@ import com.vaadin.event.ShortcutAction;
import com.vaadin.event.ShortcutAction.KeyCode;
import com.vaadin.event.ShortcutAction.ModifierKey;
import com.vaadin.event.ShortcutListener;
+import com.vaadin.shared.MouseEventDetails;
+import com.vaadin.shared.ui.window.WindowServerRpc;
+import com.vaadin.shared.ui.window.WindowState;
import com.vaadin.terminal.PaintException;
import com.vaadin.terminal.PaintTarget;
import com.vaadin.terminal.Vaadin6Component;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
import com.vaadin.terminal.gwt.client.ui.root.VRoot;
-import com.vaadin.terminal.gwt.client.ui.window.WindowServerRpc;
-import com.vaadin.terminal.gwt.client.ui.window.WindowState;
/**
* A component that represents a floating popup window that can be added to a
@@ -44,6 +44,10 @@ import com.vaadin.terminal.gwt.client.ui.window.WindowState;
* <p>
* The caption is displayed in the window header.
* </p>
+ * <p>
+ * In Vaadin versions prior to 7.0.0, Window was also used as application level
+ * windows. This function is now covered by the {@link Root} class.
+ * </p>
*
* @author Vaadin Ltd.
* @version
@@ -56,6 +60,7 @@ public class Window extends Panel implements FocusNotifier, BlurNotifier,
private WindowServerRpc rpc = new WindowServerRpc() {
+ @Override
public void click(MouseEventDetails mouseDetails) {
fireEvent(new ClickEvent(Window.this, mouseDetails));
}
@@ -793,11 +798,13 @@ public class Window extends Panel implements FocusNotifier, BlurNotifier,
* @see com.vaadin.event.FieldEvents.FocusNotifier#addListener(com.vaadin.event.FieldEvents.FocusListener)
*/
+ @Override
public void addListener(FocusListener listener) {
addListener(FocusEvent.EVENT_ID, FocusEvent.class, listener,
FocusListener.focusMethod);
}
+ @Override
public void removeListener(FocusListener listener) {
removeListener(FocusEvent.EVENT_ID, FocusEvent.class, listener);
}
@@ -810,11 +817,13 @@ public class Window extends Panel implements FocusNotifier, BlurNotifier,
* @see com.vaadin.event.FieldEvents.BlurNotifier#addListener(com.vaadin.event.FieldEvents.BlurListener)
*/
+ @Override
public void addListener(BlurListener listener) {
addListener(BlurEvent.EVENT_ID, BlurEvent.class, listener,
BlurListener.blurMethod);
}
+ @Override
public void removeListener(BlurListener listener) {
removeListener(BlurEvent.EVENT_ID, BlurEvent.class, listener);
}