Introduce tight integration with JavaScript classes
[gpl/argeo-suite.git] / org.argeo.app.geo / src / org / argeo / app / ol / AbstractOlObject.java
diff --git a/org.argeo.app.geo/src/org/argeo/app/ol/AbstractOlObject.java b/org.argeo.app.geo/src/org/argeo/app/ol/AbstractOlObject.java
new file mode 100644 (file)
index 0000000..2806afe
--- /dev/null
@@ -0,0 +1,31 @@
+package org.argeo.app.ol;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.argeo.app.ux.js.AbstractJsObject;
+
+public abstract class AbstractOlObject extends AbstractJsObject {
+
+       public AbstractOlObject(Object... args) {
+               super(args.length > 0 ? args : new Object[] { new HashMap<String, Object>() });
+       }
+
+       public AbstractOlObject(Map<String, Object> options) {
+               super(options);
+       }
+
+       public String getJsPackage() {
+               return "argeo.tp.ol";
+       }
+
+       @SuppressWarnings("unchecked")
+       protected Map<String, Object> getNewOptions() {
+               if (!isNew())
+                       throw new IllegalStateException("Object " + getJsClassName() + " is not new");
+               Object[] args = getJsConstructorArgs();
+               if (args.length != 1 || !(args[0] instanceof Map))
+                       throw new IllegalStateException("Object " + getJsClassName() + " has no available options");
+               return (Map<String, Object>) args[0];
+       }
+}