+++ /dev/null
-/*
- * Copyright 2011 Vaadin Ltd.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-package com.vaadin.navigator;
-
-import java.io.Serializable;
-
-/**
- * Fragment manager that handles interaction between Navigator and URI fragments
- * or other similar view identification and bookmarking system.
- *
- * Alternative implementations can be created for HTML5 pushState, for portlet
- * URL navigation and other similar systems.
- *
- * This interface is mostly for internal use by {@link Navigator}.
- *
- * @author Vaadin Ltd
- * @since 7.0
- */
-public interface FragmentManager extends Serializable {
- /**
- * Return the current fragment (location string) including view name and any
- * optional parameters.
- *
- * @return current view and parameter string, not null
- */
- public String getFragment();
-
- /**
- * Set the current fragment (location string) in the application URL or
- * similar location, including view name and any optional parameters.
- *
- * @param fragment
- * new view and parameter string, not null
- */
- public void setFragment(String fragment);
-}
\ No newline at end of file
--- /dev/null
+/*
+ * Copyright 2011 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.vaadin.navigator;
+
+import java.io.Serializable;
+
+/**
+ * An interface for handling interaction between Navigator and the browser
+ * location URI or other similar view identification and bookmarking system. The
+ * state is limited to a single string because in the usual cases it forms a
+ * part of a URI.
+ * <p>
+ * Different implementations can be created for hashbang URIs, HTML5 pushState,
+ * portlet URL navigation and other similar systems.
+ * <p>
+ * This interface is mostly for internal use by {@link Navigator}.
+ *
+ * @author Vaadin Ltd
+ * @since 7.0
+ */
+public interface NavigationStateManager extends Serializable {
+ /**
+ * Returns the current navigation state including view name and any optional
+ * parameters.
+ *
+ * @return current view and parameter string, not null
+ */
+ public String getState();
+
+ /**
+ * Set the current navigation state in the location URI or similar location,
+ * including view name and any optional parameters.
+ *
+ * @param fragment
+ * new view and parameter string, not null
+ */
+ public void setState(String state);
+}
\ No newline at end of file
* This class is mostly for internal use by Navigator, and is only public
* and static to enable testing.
*/
- public static class UriFragmentManager implements FragmentManager,
+ public static class UriFragmentManager implements NavigationStateManager,
FragmentChangedListener {
private final Page page;
private final Navigator navigator;
}
@Override
- public String getFragment() {
+ public String getState() {
return page.getFragment();
}
@Override
- public void setFragment(String fragment) {
+ public void setState(String fragment) {
page.setFragment(fragment, false);
}
@Override
public void fragmentChanged(FragmentChangedEvent event) {
- UriFragmentManager.this.navigator.navigateTo(getFragment());
+ UriFragmentManager.this.navigator.navigateTo(getState());
}
}
}
}
- private final FragmentManager fragmentManager;
+ private final NavigationStateManager fragmentManager;
private final ViewDisplay display;
private View currentView = null;
private List<ViewChangeListener> listeners = new LinkedList<ViewChangeListener>();
* @param display
* where to display the views
*/
- public Navigator(FragmentManager fragmentManager, ViewDisplay display) {
+ public Navigator(NavigationStateManager fragmentManager, ViewDisplay display) {
this.display = display;
this.fragmentManager = fragmentManager;
}
if (!fragmentParameters.equals("")) {
currentFragment += "/" + fragmentParameters;
}
- if (!currentFragment.equals(getFragmentManager().getFragment())) {
- getFragmentManager().setFragment(currentFragment);
+ if (!currentFragment.equals(getFragmentManager().getState())) {
+ getFragmentManager().setState(currentFragment);
}
}
*
* @return fragment manager in use
*/
- protected FragmentManager getFragmentManager() {
+ protected NavigationStateManager getFragmentManager() {
return fragmentManager;
}
import org.easymock.EasyMock;
import org.easymock.IMocksControl;
-import com.vaadin.navigator.FragmentManager;
+import com.vaadin.navigator.NavigationStateManager;
import com.vaadin.navigator.Navigator;
import com.vaadin.navigator.View;
import com.vaadin.navigator.ViewChangeListener;
}
}
- public static class NullFragmentManager implements FragmentManager {
+ public static class NullFragmentManager implements NavigationStateManager {
@Override
- public String getFragment() {
+ public String getState() {
return null;
}
@Override
- public void setFragment(String fragment) {
+ public void setState(String fragment) {
// do nothing
}
}
public void testBasicNavigation() {
IMocksControl control = EasyMock.createControl();
- FragmentManager manager = control.createMock(FragmentManager.class);
+ NavigationStateManager manager = control.createMock(NavigationStateManager.class);
ViewDisplay display = control.createMock(ViewDisplay.class);
ViewProvider provider = control.createMock(ViewProvider.class);
View view1 = control.createMock(View.class);
// prepare mocks: what to expect
EasyMock.expect(provider.getViewName("test1")).andReturn("test1");
EasyMock.expect(provider.getView("test1")).andReturn(view1);
- EasyMock.expect(manager.getFragment()).andReturn("");
+ EasyMock.expect(manager.getState()).andReturn("");
view1.navigateTo("");
display.showView(view1);
- manager.setFragment("test1");
+ manager.setState("test1");
EasyMock.expect(provider.getViewName("test2/")).andReturn("test2");
EasyMock.expect(provider.getView("test2")).andReturn(view2);
- EasyMock.expect(manager.getFragment()).andReturn("view1");
+ EasyMock.expect(manager.getState()).andReturn("view1");
view2.navigateTo("");
display.showView(view2);
- manager.setFragment("test2");
+ manager.setState("test2");
EasyMock.expect(provider.getViewName("test1/params"))
.andReturn("test1");
EasyMock.expect(provider.getView("test1")).andReturn(view1);
- EasyMock.expect(manager.getFragment()).andReturn("view2");
+ EasyMock.expect(manager.getState()).andReturn("view2");
view1.navigateTo("params");
display.showView(view1);
- manager.setFragment("test1/params");
+ manager.setState("test1/params");
control.replay();
public void testMainView() {
IMocksControl control = EasyMock.createControl();
- FragmentManager manager = control.createMock(FragmentManager.class);
+ NavigationStateManager manager = control.createMock(NavigationStateManager.class);
ViewDisplay display = control.createMock(ViewDisplay.class);
ViewProvider provider = control.createMock(ViewProvider.class);
View view1 = control.createMock(View.class);
// prepare mocks: what to expect
EasyMock.expect(provider.getViewName("test2")).andReturn("test2");
EasyMock.expect(provider.getView("test2")).andReturn(view2);
- EasyMock.expect(manager.getFragment()).andReturn("view1");
+ EasyMock.expect(manager.getState()).andReturn("view1");
view2.navigateTo("");
display.showView(view2);
- manager.setFragment("test2");
+ manager.setState("test2");
EasyMock.expect(provider.getViewName("")).andReturn("test1");
EasyMock.expect(provider.getView("test1")).andReturn(view1);
- EasyMock.expect(manager.getFragment()).andReturn("");
+ EasyMock.expect(manager.getState()).andReturn("");
view1.navigateTo("");
display.showView(view1);
- manager.setFragment("test1");
+ manager.setState("test1");
EasyMock.expect(provider.getViewName("test1/params"))
.andReturn("test1");
EasyMock.expect(provider.getView("test1")).andReturn(view1);
- EasyMock.expect(manager.getFragment()).andReturn("view2");
+ EasyMock.expect(manager.getState()).andReturn("view2");
view1.navigateTo("params");
display.showView(view1);
- manager.setFragment("test1/params");
+ manager.setState("test1/params");
control.replay();
public void testListeners() {
IMocksControl control = EasyMock.createControl();
- FragmentManager manager = control.createMock(FragmentManager.class);
+ NavigationStateManager manager = control.createMock(NavigationStateManager.class);
ViewDisplay display = control.createMock(ViewDisplay.class);
ViewProvider provider = control.createMock(ViewProvider.class);
View view1 = control.createMock(View.class);
ViewChangeEvent event1 = new ViewChangeEvent(navigator, null, view1,
"test1", "");
listener.addExpectedIsViewChangeAllowed(event1, true);
- EasyMock.expect(manager.getFragment()).andReturn("");
+ EasyMock.expect(manager.getState()).andReturn("");
view1.navigateTo("");
display.showView(view1);
- manager.setFragment("test1");
+ manager.setState("test1");
listener.addExpectedNavigatorViewChange(event1);
EasyMock.expect(provider.getViewName("test2")).andReturn("test2");
ViewChangeEvent event2 = new ViewChangeEvent(navigator, view1, view2,
"test2", "");
listener.addExpectedIsViewChangeAllowed(event2, true);
- EasyMock.expect(manager.getFragment()).andReturn("view1");
+ EasyMock.expect(manager.getState()).andReturn("view1");
view2.navigateTo("");
display.showView(view2);
- manager.setFragment("test2");
+ manager.setState("test2");
listener.addExpectedNavigatorViewChange(event2);
control.replay();
public void testBlockNavigation() {
IMocksControl control = EasyMock.createControl();
- FragmentManager manager = control.createMock(FragmentManager.class);
+ NavigationStateManager manager = control.createMock(NavigationStateManager.class);
ViewDisplay display = control.createMock(ViewDisplay.class);
ViewProvider provider = control.createMock(ViewProvider.class);
View view1 = control.createMock(View.class);
// first listener blocks first view change
EasyMock.expect(provider.getViewName("test1")).andReturn("test1");
EasyMock.expect(provider.getView("test1")).andReturn(view1);
- EasyMock.expect(manager.getFragment()).andReturn("");
+ EasyMock.expect(manager.getState()).andReturn("");
ViewChangeEvent event1 = new ViewChangeEvent(navigator, null, view1,
"test1", "");
listener1.addExpectedIsViewChangeAllowed(event1, false);
// second listener blocks second view change
EasyMock.expect(provider.getViewName("test1/test")).andReturn("test1");
EasyMock.expect(provider.getView("test1")).andReturn(view1);
- EasyMock.expect(manager.getFragment()).andReturn("");
+ EasyMock.expect(manager.getState()).andReturn("");
ViewChangeEvent event2 = new ViewChangeEvent(navigator, null, view1,
"test1", "test");
listener1.addExpectedIsViewChangeAllowed(event2, true);
// both listeners allow view change
EasyMock.expect(provider.getViewName("test1/bar")).andReturn("test1");
EasyMock.expect(provider.getView("test1")).andReturn(view1);
- EasyMock.expect(manager.getFragment()).andReturn("");
+ EasyMock.expect(manager.getState()).andReturn("");
ViewChangeEvent event3 = new ViewChangeEvent(navigator, null, view1,
"test1", "bar");
listener1.addExpectedIsViewChangeAllowed(event3, true);
listener2.addExpectedIsViewChangeAllowed(event3, true);
view1.navigateTo("bar");
display.showView(view1);
- manager.setFragment("test1/bar");
+ manager.setState("test1/bar");
listener1.addExpectedNavigatorViewChange(event3);
listener2.addExpectedNavigatorViewChange(event3);
// both listeners allow view change from non-null view
EasyMock.expect(provider.getViewName("test2")).andReturn("test2");
EasyMock.expect(provider.getView("test2")).andReturn(view2);
- EasyMock.expect(manager.getFragment()).andReturn("view1");
+ EasyMock.expect(manager.getState()).andReturn("view1");
ViewChangeEvent event4 = new ViewChangeEvent(navigator, view1, view2,
"test2", "");
listener1.addExpectedIsViewChangeAllowed(event4, true);
listener2.addExpectedIsViewChangeAllowed(event4, true);
view2.navigateTo("");
display.showView(view2);
- manager.setFragment("test2");
+ manager.setState("test2");
listener1.addExpectedNavigatorViewChange(event4);
listener2.addExpectedNavigatorViewChange(event4);