|
From: <duc...@us...> - 2008-02-07 00:01:38
|
Revision: 718
http://ogoglio.svn.sourceforge.net/ogoglio/?rev=718&view=rev
Author: ducheneaut
Date: 2008-02-06 16:01:39 -0800 (Wed, 06 Feb 2008)
Log Message:
-----------
Fixed a bug that prevented pages from persisting across sessions. Pages are translated into PageDocuments that are included in a Thing's ThingDocument, which is in turn dumped to disk as part of the SpaceDocument on logout.
Note that this has implications for template scripts: they must NOT call createTextPage in their constructor anymore (unless you want page contents to be re-created from scratch all the time). Instead the recommended approach is to call getPageIDs to see if we have pages from previous sessions in the SpaceDocument, and point the script at the correct pageIDs if they exist. See whiteboard.js for an example.
Modified Paths:
--------------
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/model/Page.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/model/Thing.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/xml/PageDocument.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/xml/ThingDocument.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/SpaceSimulator.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/script/ScriptSpace.java
maven/trunk/ogoglio-server/src/main/resources/populate/template-28/WhiteBoard.js
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/model/Page.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/model/Page.java 2008-02-06 17:31:15 UTC (rev 717)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/model/Page.java 2008-02-07 00:01:39 UTC (rev 718)
@@ -5,6 +5,8 @@
import javax.media.j3d.Transform3D;
+import com.ogoglio.xml.PageDocument;
+
public class Page {
public static final String TEXT_PLAIN = "text/plain";
@@ -31,6 +33,11 @@
private double height = -1;
+ public Page(Thing thing, PageDocument document) {
+ this(thing, document.getPageID(), document.getContentType(), document.getWidth(), document.getHeight(), document.getTransform());
+
+ }
+
public Page(Thing thing, long pageID, String contentType, double width, double height, Transform3D position) {
this.thing = thing;
this.pageID = pageID;
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/model/Thing.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/model/Thing.java 2008-02-06 17:31:15 UTC (rev 717)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/model/Thing.java 2008-02-07 00:01:39 UTC (rev 718)
@@ -14,13 +14,12 @@
package com.ogoglio.client.model;
-import java.io.IOException;
-import java.io.InputStream;
import java.util.HashMap;
import javax.media.j3d.Transform3D;
import com.ogoglio.util.ArgumentUtils;
+import com.ogoglio.xml.PageDocument;
import com.ogoglio.xml.ShapeDocument;
import com.ogoglio.xml.ThingDocument;
@@ -54,6 +53,10 @@
for (int i = 0; i < shapeDocs.length; i++) {
addShape(new Shape(this, shapeDocs[i]));
}
+ PageDocument[] pageDocs = thingDoc.getPageDocuments();
+ for (int j = 0; j < pageDocs.length; j++) {
+ addPageFromThingDocument(new Page(this, pageDocs[j]));
+ }
}
public Thing(Space space, long thingID, Template template, String name, String ownerUsername, long possessionID, Transform3D position) {
@@ -146,6 +149,13 @@
pages.put(new Long(page.getPageID()), page);
space.notifyPageAdded(page);
}
+
+ public void addPageFromThingDocument(Page page) {
+ if (pages.get(new Long(page.getPageID())) != null) {
+ return;
+ }
+ pages.put(new Long(page.getPageID()), page);
+ }
public void removePage(Page page) {
if (pages.remove(new Long(page.getPageID())) == null) {
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/xml/PageDocument.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/xml/PageDocument.java 2008-02-06 17:31:15 UTC (rev 717)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/xml/PageDocument.java 2008-02-07 00:01:39 UTC (rev 718)
@@ -2,6 +2,8 @@
import javax.media.j3d.Transform3D;
+import com.ogoglio.client.model.Page;
+
import nanoxml.XMLElement;
public class PageDocument extends PositionedDocument {
@@ -15,6 +17,10 @@
public static final String HEIGHT = "height";
+ public PageDocument(Page page) {
+ this(page.getPageID(), page.getContentType(), page.getWidth(), page.getHeight(), page.getPosition());
+ }
+
public PageDocument(long pageID, String contentType, double width, double height, Transform3D position) {
super(NAME, position, null);
getData().setAttribute(PAGE_ID, pageID);
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/xml/ThingDocument.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/xml/ThingDocument.java 2008-02-06 17:31:15 UTC (rev 717)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/xml/ThingDocument.java 2008-02-07 00:01:39 UTC (rev 718)
@@ -17,6 +17,7 @@
import nanoxml.XMLElement;
+import com.ogoglio.client.model.Page;
import com.ogoglio.client.model.Shape;
import com.ogoglio.client.model.SplinePath;
import com.ogoglio.client.model.Thing;
@@ -44,7 +45,11 @@
getData().addChild(new ShapeDocument(shapes[i]).toElement());
}
- //we don't automatically store pages, because they're ephemeral between space instances
+ // Persist pages to disk also, to avoid loosing images between sessions
+ Page[] pages = thing.getPages();
+ for (int j = 0; j < pages.length; j++) {
+ getData().addChild(new PageDocument(pages[j]).toElement());
+ }
}
public ThingDocument(long thingID, String displayName, long templateID, String templateOwner, String ownerUsername, long possessionID, Transform3D transform, SplinePath splinePath) {
Modified: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/SpaceSimulator.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/SpaceSimulator.java 2008-02-06 17:31:15 UTC (rev 717)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/SpaceSimulator.java 2008-02-07 00:01:39 UTC (rev 718)
@@ -56,7 +56,6 @@
import com.ogoglio.xml.SettingDocument;
import com.ogoglio.xml.SpaceDocument;
import com.ogoglio.xml.SpaceEvent;
-import com.ogoglio.xml.SpaceMemberDocument;
import com.ogoglio.xml.TemplateDocument;
import com.ogoglio.xml.ThingDocument;
import com.ogoglio.xml.UserDocument;
Modified: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/script/ScriptSpace.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/script/ScriptSpace.java 2008-02-06 17:31:15 UTC (rev 717)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/script/ScriptSpace.java 2008-02-07 00:01:39 UTC (rev 718)
@@ -22,7 +22,6 @@
import java.util.TimerTask;
import javax.media.j3d.Transform3D;
-import javax.vecmath.Point3f;
import javax.vecmath.Quat4d;
import javax.vecmath.Vector3d;
@@ -39,7 +38,6 @@
import com.ogoglio.sim.SpaceSimulator;
import com.ogoglio.util.ArgumentUtils;
import com.ogoglio.util.Log;
-import com.ogoglio.viewer.j3d.J3DSplineKeyFrame;
import com.ogoglio.viewer.j3d.J3DSplinePath;
import com.ogoglio.xml.PageDocument;
import com.ogoglio.xml.SpaceEvent;
@@ -203,7 +201,7 @@
spaceSimulator.setPageContent((long) thingID, pageID, Page.TEXT_PLAIN, content);
return pageID;
}
-
+
public void jsFunction_setTextPageContent(double thingID, double pageID, String content) {
spaceSimulator.setPageContent((long) thingID, (long) pageID, Page.TEXT_PLAIN, content);
}
Modified: maven/trunk/ogoglio-server/src/main/resources/populate/template-28/WhiteBoard.js
===================================================================
--- maven/trunk/ogoglio-server/src/main/resources/populate/template-28/WhiteBoard.js 2008-02-06 17:31:15 UTC (rev 717)
+++ maven/trunk/ogoglio-server/src/main/resources/populate/template-28/WhiteBoard.js 2008-02-07 00:01:39 UTC (rev 718)
@@ -9,8 +9,12 @@
function construct(id){
thingID = id;
textSettingKey = "thing." + thingID + ".whiteboard.text";
-
- pageID = space.createTextPage(thingID, 4, 2, htmlPrefix + formatBoardText(getTextSetting()) + htmlSuffix, 0, 2, 0.1, 0, math.PI, 0);
+ var pageIDs = space.getPageIDs(thingID);
+ if (pageIDs.length == 0) {
+ pageID = space.createTextPage(thingID, 4, 2, htmlPrefix + formatBoardText(getTextSetting()) + htmlSuffix, 0, 2, 0.1, 0, math.PI, 0);
+ } else {
+ pageID = pageIDs[0]; // Note: whiteboards are assumed to have only one page.
+ }
}
function cleanup(){
@@ -129,6 +133,7 @@
var imageReq = new HTTPRequest(thingID, "GET", url, handleImageResponse);
imageReq.setDestinationPage(space, thingID, pageID);
imageReq.send();
+ space.removeSetting(textSettingKey);
}
function handleImageResponse(requestingThingID, request){
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|