From b0004167abaa8874f94556da83cb6d0aa0b5e3e6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Leif=20=C3=85strand?= Date: Wed, 25 Jul 2012 12:43:44 +0000 Subject: [PATCH] Fix typo preventing StreamVariable cleanup (#9171) svn changeset:24025/svn branch:6.8 --- .../gwt/server/CommunicationManager.java | 32 +++++++++-- .../server/TestStreamVariableMapping.java | 57 +++++++++++++++++++ 2 files changed, 84 insertions(+), 5 deletions(-) create mode 100644 tests/server-side/com/vaadin/tests/server/TestStreamVariableMapping.java diff --git a/src/com/vaadin/terminal/gwt/server/CommunicationManager.java b/src/com/vaadin/terminal/gwt/server/CommunicationManager.java index 9c67a03bb3..9f6e0a8aaa 100644 --- a/src/com/vaadin/terminal/gwt/server/CommunicationManager.java +++ b/src/com/vaadin/terminal/gwt/server/CommunicationManager.java @@ -233,8 +233,8 @@ public class CommunicationManager extends AbstractCommunicationManager { String variableName = parts[1]; String paintableId = parts[0]; - StreamVariable streamVariable = pidToNameToStreamVariable.get( - paintableId).get(variableName); + StreamVariable streamVariable = getStreamVariable(paintableId, + variableName); String secKey = streamVariableToSeckey.get(streamVariable); if (secKey.equals(parts[2])) { @@ -262,6 +262,28 @@ public class CommunicationManager extends AbstractCommunicationManager { } + /** + * Gets a stream variable based on paintable id and variable name. Returns + * null if no matching variable has been registered. + * + * @param paintableId + * id of paintable to get variable for + * @param variableName + * name of the stream variable + * @return the corresponding stream variable, or null if not + * found + */ + public StreamVariable getStreamVariable(String paintableId, + String variableName) { + Map nameToStreamVariable = pidToNameToStreamVariable + .get(paintableId); + if (nameToStreamVariable == null) { + return null; + } + StreamVariable streamVariable = nameToStreamVariable.get(variableName); + return streamVariable; + } + /** * Handles UIDL request * @@ -359,7 +381,7 @@ public class CommunicationManager extends AbstractCommunicationManager { private Map streamVariableToSeckey; @Override - String getStreamVariableTargetUrl(VariableOwner owner, String name, + public String getStreamVariableTargetUrl(VariableOwner owner, String name, StreamVariable value) { /* * We will use the same APP/* URI space as ApplicationResources but @@ -402,10 +424,10 @@ public class CommunicationManager extends AbstractCommunicationManager { } @Override - protected void cleanStreamVariable(VariableOwner owner, String name) { + public void cleanStreamVariable(VariableOwner owner, String name) { Map nameToStreamVar = pidToNameToStreamVariable .get(getPaintableId((Paintable) owner)); - nameToStreamVar.remove("name"); + nameToStreamVar.remove(name); if (nameToStreamVar.isEmpty()) { pidToNameToStreamVariable.remove(getPaintableId((Paintable) owner)); } diff --git a/tests/server-side/com/vaadin/tests/server/TestStreamVariableMapping.java b/tests/server-side/com/vaadin/tests/server/TestStreamVariableMapping.java new file mode 100644 index 0000000000..7e9aefcbd9 --- /dev/null +++ b/tests/server-side/com/vaadin/tests/server/TestStreamVariableMapping.java @@ -0,0 +1,57 @@ +package com.vaadin.tests.server; + +import junit.framework.TestCase; + +import org.easymock.EasyMock; + +import com.vaadin.Application; +import com.vaadin.terminal.StreamVariable; +import com.vaadin.terminal.gwt.server.CommunicationManager; +import com.vaadin.ui.Upload; + +public class TestStreamVariableMapping extends TestCase { + private static final String variableName = "myName"; + + private Upload owner; + private StreamVariable streamVariable; + + private CommunicationManager cm; + + @Override + protected void setUp() throws Exception { + owner = new Upload(); + streamVariable = EasyMock.createMock(StreamVariable.class); + cm = createCommunicationManager(); + + super.setUp(); + } + + public void testAddStreamVariable() { + String targetUrl = cm.getStreamVariableTargetUrl(owner, variableName, + streamVariable); + assertTrue(targetUrl.startsWith("app://APP/UPLOAD/PID0/myName/")); + + StreamVariable streamVariable2 = cm.getStreamVariable( + cm.getPaintableId(owner), variableName); + assertSame(streamVariable, streamVariable2); + } + + public void testRemoverVariable() { + cm.getStreamVariableTargetUrl(owner, variableName, streamVariable); + assertNotNull(cm.getStreamVariable(cm.getPaintableId(owner), + variableName)); + + cm.cleanStreamVariable(owner, variableName); + assertNull(cm.getStreamVariable(cm.getPaintableId(owner), variableName)); + } + + private CommunicationManager createCommunicationManager() { + return new CommunicationManager(new Application() { + @Override + public void init() { + // TODO Auto-generated method stub + } + }); + } + +} -- 2.39.5