|
From: <ian...@us...> - 2008-02-18 02:22:10
|
Revision: 752
http://ogoglio.svn.sourceforge.net/ogoglio/?rev=752&view=rev
Author: iansmith
Date: 2008-02-17 18:22:10 -0800 (Sun, 17 Feb 2008)
Log Message:
-----------
Added support for creating records in the sim list.
Changed timeout to be 30 secs on starting up a SpaceClient.
Modified Paths:
--------------
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/SpaceClient.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/WebAPIClient.java
maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/WebAPIClientWire.java
maven/trunk/ogoglio-integration-test/src/test/java/com/ogoglio/client/test/ClientTest.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/SimPersistTasks.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/site/SimServlet.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/SpaceServlet.java
maven/trunk/ogoglio-server/src/test/java/com/ogoglio/persist/test/PersistTest.java
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/SpaceClient.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/SpaceClient.java 2008-02-15 00:13:12 UTC (rev 751)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/SpaceClient.java 2008-02-18 02:22:10 UTC (rev 752)
@@ -63,7 +63,7 @@
public class SpaceClient implements UserInputListener, Space.Context {
- private static final long START_UP_WAIT_MS = 15000;
+ private static final long START_UP_WAIT_MS = 30000;
private Listener listener = null;
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/WebAPIClient.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/WebAPIClient.java 2008-02-15 00:13:12 UTC (rev 751)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/WebAPIClient.java 2008-02-18 02:22:10 UTC (rev 752)
@@ -662,4 +662,25 @@
public boolean deleteSim(long simID) throws IOException {
return wire.sendDelete(descriptor.getSpaceSimURI(simID), authenticator.getAuthCookie());
}
+ /**
+ * This method should be used with care. It creates a record in the server that a new sim
+ * is in some state. This does NOT launch the sim! This should probably only be used when
+ * a client can do some type of independent verification that the sim is alive and working,
+ * yet it is not in the list of sims being provided by the server.
+ *
+ * @param simURI the new URI to talk to the sim on
+ * @param reachable starting reachablity (not to useful to makie this false!)
+ * @param retired starting retired state
+ * @return A sim document describing this new sim record, including the newly assigned sim ID. Returns null on failure.
+ *
+ */
+ public SimDocument createSimRecord(URI simURI, boolean reachable, boolean retired) {
+ SimDocument simDoc = new SimDocument(-1, simURI,reachable, retired);
+ try {
+ return new SimDocument(wire.sendAuthenticatedXML(descriptor.getSpaceSimURI(false /*IGNORED FOR POST*/),
+ simDoc.toString(), "POST", authenticator.getAuthCookie()));
+ } catch (IOException e) {
+ return null;
+ }
+ }
}
Modified: maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/WebAPIClientWire.java
===================================================================
--- maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/WebAPIClientWire.java 2008-02-15 00:13:12 UTC (rev 751)
+++ maven/trunk/ogoglio-common/src/main/java/com/ogoglio/client/WebAPIClientWire.java 2008-02-18 02:22:10 UTC (rev 752)
@@ -139,7 +139,8 @@
public XMLElement fetchAuthenticatedXML(URI uri, String authCookie) throws IOException {
XMLElement data = new XMLElement();
- data.parseFromReader(new InputStreamReader(performGET(uri, authCookie, false, true)));
+ String remoteData = StreamUtils.readInput(performGET(uri, authCookie, false, true));
+ data.parseString(remoteData);
return data;
}
Modified: maven/trunk/ogoglio-integration-test/src/test/java/com/ogoglio/client/test/ClientTest.java
===================================================================
--- maven/trunk/ogoglio-integration-test/src/test/java/com/ogoglio/client/test/ClientTest.java 2008-02-15 00:13:12 UTC (rev 751)
+++ maven/trunk/ogoglio-integration-test/src/test/java/com/ogoglio/client/test/ClientTest.java 2008-02-18 02:22:10 UTC (rev 752)
@@ -437,10 +437,11 @@
//check perms and but don't actually do deletion
assertFalse(stdWebClient.deleteSim(simDoc.getSimID()));
-
+ //blow it away as admin
+ assertTrue(adminWebClient.deleteSim(simDoc.getSimID()));
+
//put back in right state
- adminWebClient.setSimReachable(sims[0].getSimID(), true);
- adminWebClient.setSimRetired(sims[0].getSimID(), false);
+ assertNotNull(adminWebClient.createSimRecord(simDoc.getSimURI(),true,false));
}
Modified: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/SimPersistTasks.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/SimPersistTasks.java 2008-02-15 00:13:12 UTC (rev 751)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/SimPersistTasks.java 2008-02-18 02:22:10 UTC (rev 752)
@@ -58,7 +58,7 @@
return (SimRecord) task.execute();
}
- public static SimRecord createSim(final URI simURI, final boolean reachable, final boolean retired, SessionFactory sessionFactory) throws PersistException {
+ public static SimRecord createSimRecord(final URI simURI, final boolean reachable, final boolean retired, SessionFactory sessionFactory) throws PersistException {
HibernateTask task = new HibernateTask() {
public Object run(Session hibernateSession) {
SimRecord record = new SimRecord(simURI, reachable, retired);
Modified: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/site/SimServlet.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/site/SimServlet.java 2008-02-15 00:13:12 UTC (rev 751)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/site/SimServlet.java 2008-02-18 02:22:10 UTC (rev 752)
@@ -108,7 +108,7 @@
SimPersistTasks.update(simRecord, getSessionFactory());
} else {
Log.info("Starting up sim @ " + simURI);
- simRecord = SimPersistTasks.createSim(simURI, true, false, getSessionFactory());
+ simRecord = SimPersistTasks.createSimRecord(simURI, true, false, getSessionFactory());
}
WebAPIDescriptor descriptor;
String serviceURI = (String) envCtx.lookup("ogoglio/baseURL");
Modified: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/SpaceServlet.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/SpaceServlet.java 2008-02-15 00:13:12 UTC (rev 751)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/SpaceServlet.java 2008-02-18 02:22:10 UTC (rev 752)
@@ -877,12 +877,9 @@
public void doGet(HttpServletRequest request, HttpServletResponse response, String[] pathElements, AccountRecord authedAccount) throws PersistException, ServletException, IOException {
boolean onlyServers = false;
- //check for null is superfluous?
- if (authedAccount == null || !AccountDocument.ACCOUNT_LEVEL_ADMIN.equals(authedAccount.getAccountlevel())) {
- response.setStatus(HttpServletResponse.SC_FORBIDDEN);
- return;
+ if (!verifyAuthAdmin(authedAccount, response)) {
+ return; //status set in verify
}
-
if ("true".equalsIgnoreCase(request.getParameter(ONLY_SERVERS))) {
onlyServers = true;
}
@@ -922,8 +919,38 @@
}
list.addChild(simDoc.toElement());
}
-
+ Log.info("Requested list of sims:"+list.toString());
this.sendStringResponse(list.toString(), "text/xml", response);
}
+ public void doPost(HttpServletRequest request, HttpServletResponse response, String[] pathElements, AccountRecord authedAccount) throws PersistException, ServletException, IOException {
+ if (!verifyAuthAdmin(authedAccount, response)) {
+ return; //status set in verify
+ }
+
+ XMLElement simElement = parseXML(request.getInputStream());
+ if (!SimDocument.NAME.equals(simElement.getName())) {
+ response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+ return;
+ }
+ SimDocument clientRequested = new SimDocument(simElement);
+ SimRecord newSimRec = SimPersistTasks.createSimRecord(clientRequested.getSimURI(),
+ clientRequested.isReachable(), clientRequested.isRetired(), getSessionFactory());
+ if (newSimRec== null) {
+ response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+ return;
+ }
+ SimDocument returnedDoc = DocumentFactory.documentFromRecord(newSimRec);
+ sendStringResponse(returnedDoc.toString(), "text/xml", response);
+ }
+
+ private boolean verifyAuthAdmin(AccountRecord authedAccount, HttpServletResponse response) {
+ //check for null is superfluous?
+ if (authedAccount == null || !AccountDocument.ACCOUNT_LEVEL_ADMIN.equals(authedAccount.getAccountlevel())) {
+ response.setStatus(HttpServletResponse.SC_FORBIDDEN);
+ return false;
+ }
+ return true;
+ }
+
}
}
Modified: maven/trunk/ogoglio-server/src/test/java/com/ogoglio/persist/test/PersistTest.java
===================================================================
--- maven/trunk/ogoglio-server/src/test/java/com/ogoglio/persist/test/PersistTest.java 2008-02-15 00:13:12 UTC (rev 751)
+++ maven/trunk/ogoglio-server/src/test/java/com/ogoglio/persist/test/PersistTest.java 2008-02-18 02:22:10 UTC (rev 752)
@@ -226,7 +226,7 @@
private SpaceRecord checkSpaceAndSimTasks() throws PersistException {
SimRecord simRecord1;
// ok to create sim now on that URI
- simRecord1 = SimPersistTasks.createSim(simURI1, true, false, sessionFactory);
+ simRecord1 = SimPersistTasks.createSimRecord(simURI1, true, false, sessionFactory);
verifySimProps(simRecord1, simURI1, -1);
// better test is to load it from db
@@ -255,7 +255,7 @@
//bogus sim
URI bossaNova=ArgumentUtils.createURI("http://bossanova.example.com");
- SimRecord bogus1 = SimPersistTasks.createSim(bossaNova,true, false, sessionFactory);
+ SimRecord bogus1 = SimPersistTasks.createSimRecord(bossaNova,true, false, sessionFactory);
SimRecord[] arrayOfOne=new SimRecord[] {bogus1};
//verify that right now we are reachable
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|