diff options
author | Leif Åstrand <leif@vaadin.com> | 2012-06-14 13:27:34 +0300 |
---|---|---|
committer | Leif Åstrand <leif@vaadin.com> | 2012-06-14 13:27:34 +0300 |
commit | 332195ec278f128043ae842ace48f1b1df340047 (patch) | |
tree | 8edda3e363817a74b6c57039e9d2fcad5edb8545 | |
parent | adcf03c1b5f05b38cda25819b732745c1a4859fc (diff) | |
download | vaadin-framework-332195ec278f128043ae842ace48f1b1df340047.tar.gz vaadin-framework-332195ec278f128043ae842ace48f1b1df340047.zip |
Tweaks to Extension API based on review (#6690)
5 files changed, 45 insertions, 10 deletions
diff --git a/src/com/vaadin/terminal/AbstractExtension.java b/src/com/vaadin/terminal/AbstractExtension.java index 353db85a18..0809d8ee99 100644 --- a/src/com/vaadin/terminal/AbstractExtension.java +++ b/src/com/vaadin/terminal/AbstractExtension.java @@ -8,23 +8,30 @@ import com.vaadin.terminal.gwt.server.ClientConnector; public abstract class AbstractExtension extends AbstractClientConnector implements Extension { + private boolean previouslyAttached = false; protected Class<? extends ClientConnector> getAcceptedParentType() { return ClientConnector.class; } - protected void attachTo(AbstractClientConnector parent) { - parent.addExtension(this); + protected void extend(AbstractClientConnector target) { + target.addExtension(this); } @Override public void setParent(ClientConnector parent) { + if (previouslyAttached && parent != null) { + throw new IllegalStateException( + "An extension can not be set to extend a new target after getting detached from the previous."); + } + Class<? extends ClientConnector> acceptedParentType = getAcceptedParentType(); if (parent == null || acceptedParentType.isInstance(parent)) { super.setParent(parent); + previouslyAttached = true; } else { throw new IllegalArgumentException(getClass().getName() - + " can only be attached to parents of type " + + " can only be attached to targets of type " + acceptedParentType.getName() + " but attach to " + parent.getClass().getName() + " was attempted."); } diff --git a/src/com/vaadin/terminal/gwt/client/extensions/AbstractExtensionConnector.java b/src/com/vaadin/terminal/gwt/client/extensions/AbstractExtensionConnector.java new file mode 100644 index 0000000000..bcefcf05cb --- /dev/null +++ b/src/com/vaadin/terminal/gwt/client/extensions/AbstractExtensionConnector.java @@ -0,0 +1,27 @@ +/* +@VaadinApache2LicenseForJavaFiles@ + */ + +package com.vaadin.terminal.gwt.client.extensions; + +import com.vaadin.terminal.gwt.client.ServerConnector; +import com.vaadin.terminal.gwt.client.ui.AbstractConnector; + +public abstract class AbstractExtensionConnector extends AbstractConnector { + @Override + public void setParent(ServerConnector parent) { + ServerConnector oldParent = getParent(); + if (oldParent != null && oldParent != parent) { + throw new IllegalStateException( + "An extension can not be moved from one parent to another."); + } + + super.setParent(parent); + + extend(parent); + } + + protected void extend(ServerConnector target) { + // Default does nothing + } +} 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 979a6d22c4..a74cd762de 100644 --- a/src/com/vaadin/terminal/gwt/client/extensions/javascriptmanager/JavascriptManagerConnector.java +++ b/src/com/vaadin/terminal/gwt/client/extensions/javascriptmanager/JavascriptManagerConnector.java @@ -12,12 +12,12 @@ 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.terminal.gwt.client.communication.StateChangeEvent; -import com.vaadin.terminal.gwt.client.ui.AbstractConnector; +import com.vaadin.terminal.gwt.client.extensions.AbstractExtensionConnector; import com.vaadin.terminal.gwt.client.ui.Connect; import com.vaadin.ui.JavascriptManager; @Connect(JavascriptManager.class) -public class JavascriptManagerConnector extends AbstractConnector { +public class JavascriptManagerConnector extends AbstractExtensionConnector { private Set<String> currentNames = new HashSet<String>(); @Override diff --git a/src/com/vaadin/terminal/gwt/server/ClientConnector.java b/src/com/vaadin/terminal/gwt/server/ClientConnector.java index 359e112738..860627a352 100644 --- a/src/com/vaadin/terminal/gwt/server/ClientConnector.java +++ b/src/com/vaadin/terminal/gwt/server/ClientConnector.java @@ -3,7 +3,7 @@ */ package com.vaadin.terminal.gwt.server; -import java.util.Iterator; +import java.util.Collection; import java.util.List; import com.vaadin.terminal.AbstractClientConnector; @@ -137,7 +137,7 @@ public interface ClientConnector extends Connector, RpcTarget { */ public void detach(); - public Iterator<Extension> getExtensionIterator(); + public Collection<Extension> getExtensions(); public void removeExtension(Extension extension); } diff --git a/src/com/vaadin/terminal/gwt/server/DragAndDropService.java b/src/com/vaadin/terminal/gwt/server/DragAndDropService.java index 68fb87a986..819be7e671 100644 --- a/src/com/vaadin/terminal/gwt/server/DragAndDropService.java +++ b/src/com/vaadin/terminal/gwt/server/DragAndDropService.java @@ -4,7 +4,8 @@ package com.vaadin.terminal.gwt.server; import java.io.PrintWriter; -import java.util.Iterator; +import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.logging.Logger; @@ -275,9 +276,9 @@ public class DragAndDropService implements VariableOwner, ClientConnector { } - public Iterator<Extension> getExtensionIterator() { + public Collection<Extension> getExtensions() { // TODO Auto-generated method stub - return null; + return Collections.emptySet(); } public void removeExtension(Extension extension) { |