Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephan Merkli2021-05-17 13:36:40 +0000
committerStephan Merkli2021-05-25 16:01:07 +0000
commit75820c61fed96b3e1a91b8e463bc9957a9044ba0 (patch)
tree7de647386aee1d45270ac96856957cb43925d77a
parent934da1456836c89815a9d3f72d02d1f8e7c435c2 (diff)
downloadorg.eclipse.scout.rt-75820c61fed96b3e1a91b8e463bc9957a9044ba0.tar.gz
org.eclipse.scout.rt-75820c61fed96b3e1a91b8e463bc9957a9044ba0.tar.xz
org.eclipse.scout.rt-75820c61fed96b3e1a91b8e463bc9957a9044ba0.zip
Service tunnel: add support for IDoEntity
Add support for non-serializable IDoEntity in service tunnel, e.g. to be used as return type of a interface with @TunnelToServer. Change-Id: I4dc9f941fbfa6300815fa4323abe118f4c2bb531 Reviewed-on: https://git.eclipse.org/r/c/scout/org.eclipse.scout.rt/+/180691 Tested-by: Scout Bot <scout-bot@eclipse.org> Reviewed-by: Andi Bur <andi.bur@gmail.com>
-rw-r--r--org.eclipse.scout.rt.shared/src/main/java/org/eclipse/scout/rt/shared/servicetunnel/DoEntityWrapper.java42
-rw-r--r--org.eclipse.scout.rt.shared/src/main/java/org/eclipse/scout/rt/shared/servicetunnel/ServiceTunnelObjectReplacer.java7
2 files changed, 49 insertions, 0 deletions
diff --git a/org.eclipse.scout.rt.shared/src/main/java/org/eclipse/scout/rt/shared/servicetunnel/DoEntityWrapper.java b/org.eclipse.scout.rt.shared/src/main/java/org/eclipse/scout/rt/shared/servicetunnel/DoEntityWrapper.java
new file mode 100644
index 0000000000..378469eeb1
--- /dev/null
+++ b/org.eclipse.scout.rt.shared/src/main/java/org/eclipse/scout/rt/shared/servicetunnel/DoEntityWrapper.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2010-2021 BSI Business Systems Integration AG.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * BSI Business Systems Integration AG - initial API and implementation
+ */
+package org.eclipse.scout.rt.shared.servicetunnel;
+
+import java.io.Serializable;
+
+import org.eclipse.scout.rt.dataobject.IDataObjectMapper;
+import org.eclipse.scout.rt.dataobject.IDoEntity;
+import org.eclipse.scout.rt.platform.util.LazyValue;
+
+/**
+ * Wrapper for {@link IDoEntity} used by service tunnel.
+ * <p>
+ * Do not use this internal class.
+ *
+ * @see ServiceTunnelObjectReplacer
+ */
+// Package-private because shouldn't be used except by ServiceTunnelObjectReplacer.
+class DoEntityWrapper implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ private static final LazyValue<IDataObjectMapper> MAPPER = new LazyValue<>(IDataObjectMapper.class);
+
+ // Not using transient IDoEntity along with writeObject/readObject like DoEntityHolder, because the string is read exactly once after deserialization.
+ private final String m_doEntityJson;
+
+ DoEntityWrapper(IDoEntity obj) {
+ m_doEntityJson = MAPPER.get().writeValue(obj);
+ }
+
+ public IDoEntity getDoEntity() {
+ return MAPPER.get().readValue(m_doEntityJson, IDoEntity.class);
+ }
+}
diff --git a/org.eclipse.scout.rt.shared/src/main/java/org/eclipse/scout/rt/shared/servicetunnel/ServiceTunnelObjectReplacer.java b/org.eclipse.scout.rt.shared/src/main/java/org/eclipse/scout/rt/shared/servicetunnel/ServiceTunnelObjectReplacer.java
index 79fb09da0b..53baa3bf28 100644
--- a/org.eclipse.scout.rt.shared/src/main/java/org/eclipse/scout/rt/shared/servicetunnel/ServiceTunnelObjectReplacer.java
+++ b/org.eclipse.scout.rt.shared/src/main/java/org/eclipse/scout/rt/shared/servicetunnel/ServiceTunnelObjectReplacer.java
@@ -14,6 +14,7 @@ import java.security.Permission;
import java.security.Permissions;
import java.util.Date;
+import org.eclipse.scout.rt.dataobject.IDoEntity;
import org.eclipse.scout.rt.platform.serialization.IObjectReplacer;
import org.eclipse.scout.rt.platform.util.date.UTCDate;
@@ -38,6 +39,9 @@ public class ServiceTunnelObjectReplacer implements IObjectReplacer {
if (obj != null && obj.getClass() == Permissions.class) {
return new LenientPermissionsWrapper((Permissions) obj);
}
+ if (obj instanceof IDoEntity) {
+ return new DoEntityWrapper((IDoEntity) obj);
+ }
return obj;
}
@@ -49,6 +53,9 @@ public class ServiceTunnelObjectReplacer implements IObjectReplacer {
if (obj instanceof LenientPermissionsWrapper) {
return ((LenientPermissionsWrapper) obj).getPermissions();
}
+ if (obj instanceof DoEntityWrapper) {
+ return ((DoEntityWrapper) obj).getDoEntity();
+ }
return obj;
}
}

Back to the top