summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLeif Åstrand <leif@vaadin.com>2012-06-14 13:27:34 +0300
committerLeif Åstrand <leif@vaadin.com>2012-06-14 13:27:34 +0300
commit332195ec278f128043ae842ace48f1b1df340047 (patch)
tree8edda3e363817a74b6c57039e9d2fcad5edb8545
parentadcf03c1b5f05b38cda25819b732745c1a4859fc (diff)
downloadvaadin-framework-332195ec278f128043ae842ace48f1b1df340047.tar.gz
vaadin-framework-332195ec278f128043ae842ace48f1b1df340047.zip
Tweaks to Extension API based on review (#6690)
-rw-r--r--src/com/vaadin/terminal/AbstractExtension.java13
-rw-r--r--src/com/vaadin/terminal/gwt/client/extensions/AbstractExtensionConnector.java27
-rw-r--r--src/com/vaadin/terminal/gwt/client/extensions/javascriptmanager/JavascriptManagerConnector.java4
-rw-r--r--src/com/vaadin/terminal/gwt/server/ClientConnector.java4
-rw-r--r--src/com/vaadin/terminal/gwt/server/DragAndDropService.java7
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) {