|
From: <tre...@us...> - 2007-10-15 13:04:38
|
Revision: 491
http://ogoglio.svn.sourceforge.net/ogoglio/?rev=491&view=rev
Author: trevorolio
Date: 2007-10-15 06:04:39 -0700 (Mon, 15 Oct 2007)
Log Message:
-----------
Added a body texture web resource, backed by the media service. This is used in conjunction with body configurations to provide users with skin customization.
Still to come in texture land:
the body editor UI needs some design love to incorporate the texture upload form
body loading takes too long and shows no progress information
a base skin texture with decal textures baked on top
Modified Paths:
--------------
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/media/MediaService.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/Sim.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/SpaceSimulator.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/AccountServlet.java
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/TemplateResource.java
maven/trunk/ogoglio-server/src/main/resources/siteTemplates/body.html
maven/trunk/ogoglio-server/src/main/resources/siteTemplates/ogoglio.js
Added Paths:
-----------
maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/BodyTextureRecord.java
Modified: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/media/MediaService.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/media/MediaService.java 2007-10-10 23:31:38 UTC (rev 490)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/media/MediaService.java 2007-10-15 13:04:39 UTC (rev 491)
@@ -36,6 +36,8 @@
public static final String PAGE_CONTENT_PREFIX = "pageContent-";
+ private static final String BODY_TEXTURE_PREFIX = "bodyTexture-";
+
private MediaStore store = null;
public MediaService(URI mediaURI) throws IOException {
@@ -78,6 +80,11 @@
return PAGE_CONTENT_PREFIX + spaceID + "-" + thingID + "-" + pageID;
}
+ public static String getBodyTextureName(long bodyConfigurationID) {
+ return BODY_TEXTURE_PREFIX + bodyConfigurationID;
+ }
+
+
public boolean write(String name, String value) throws IOException {
return store.write(name, value);
}
Added: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/BodyTextureRecord.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/BodyTextureRecord.java (rev 0)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/persist/BodyTextureRecord.java 2007-10-15 13:04:39 UTC (rev 491)
@@ -0,0 +1,48 @@
+package com.ogoglio.persist;
+
+import com.ogoglio.util.ArgumentUtils;
+
+public class BodyTextureRecord {
+
+ private long bodyTextureID = -1;
+
+ private long bodyConfigurationID = -1;
+
+ private String displayName = null;
+
+ public BodyTextureRecord() {
+ }
+
+ public BodyTextureRecord(long bodyConfigurationID, String displayName) {
+ ArgumentUtils.assertNotNegative(bodyConfigurationID);
+ this.bodyConfigurationID = bodyConfigurationID;
+ ArgumentUtils.assertNotNull(displayName);
+ this.displayName = displayName;
+ }
+
+ public long getBodyTextureID() {
+ return bodyTextureID;
+ }
+
+ public void setBodyTextureID(long bodyTextureID) {
+ this.bodyTextureID = bodyTextureID;
+ }
+
+ public String getDisplayName() {
+ return displayName;
+ }
+
+ public void setDisplayName(String displayName) {
+ ArgumentUtils.assertNotNull(displayName);
+ this.displayName = displayName;
+ }
+
+ public long getBodyConfigurationID() {
+ return bodyConfigurationID;
+ }
+
+ public void setBodyConfigurationID(long bodyConfigurationID) {
+ this.bodyConfigurationID = bodyConfigurationID;
+ }
+
+}
Modified: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/Sim.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/Sim.java 2007-10-10 23:31:38 UTC (rev 490)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/Sim.java 2007-10-15 13:04:39 UTC (rev 491)
@@ -57,6 +57,8 @@
public static final long VACANCY_TIME_TILL_SHUTDOWN = 1 * 60 * 1000;
+ public static final long MAX_BODY_TEXTURE_SIZE = MAX_GEOMETRY_RESOURCE_SIZE;
+
private SimMessageHandler messageHandler = null;
private TwoWayMap spaceSimulators = new TwoWayMap(); //Maps Long spaceIDs to SpaceSimulators
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 2007-10-10 23:31:38 UTC (rev 490)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/sim/SpaceSimulator.java 2007-10-15 13:04:39 UTC (rev 491)
@@ -1012,6 +1012,10 @@
public ZipInputStream getBodyData(long bodyDataID) {
return new ZipInputStream(getClass().getClassLoader().getResourceAsStream("ogoglio-body-sim.jar"));
}
+
+ public InputStream getBodyTexture(String username, long bodyConfigurationID) {
+ return null;
+ }
}
private class InSimTemplateDataProvider implements TemplateDataProvider {
Modified: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/AccountServlet.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/AccountServlet.java 2007-10-10 23:31:38 UTC (rev 490)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/AccountServlet.java 2007-10-15 13:04:39 UTC (rev 491)
@@ -14,6 +14,7 @@
package com.ogoglio.site;
import java.io.IOException;
+import java.io.InputStream;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.Map;
@@ -29,17 +30,20 @@
import com.ogoglio.appdev.persist.PersistException;
import com.ogoglio.appdev.servlet.Four04SiteResource;
import com.ogoglio.appdev.servlet.SiteResource;
+import com.ogoglio.client.DecoratedInputStream;
import com.ogoglio.client.WebAPIClientWire;
import com.ogoglio.client.WebAPIUtil;
import com.ogoglio.mail.MailClient;
import com.ogoglio.mail.MailFormatter;
import com.ogoglio.mail.MailSendException;
import com.ogoglio.mail.MailTemplateFactory;
+import com.ogoglio.media.MediaService;
import com.ogoglio.persist.AccountPersistTasks;
import com.ogoglio.persist.AccountRecord;
import com.ogoglio.persist.BodyConfigurationRecord;
import com.ogoglio.persist.BodyPersistTasks;
import com.ogoglio.persist.BodySettingRecord;
+import com.ogoglio.persist.BodyTextureRecord;
import com.ogoglio.persist.PendingEmailValidationRecord;
import com.ogoglio.persist.PendingEmailValidationTasks;
import com.ogoglio.persist.PossessionPersistTasks;
@@ -53,7 +57,9 @@
import com.ogoglio.persist.SpaceRecord;
import com.ogoglio.persist.TemplatePersistTasks;
import com.ogoglio.persist.TemplateRecord;
+import com.ogoglio.sim.Sim;
import com.ogoglio.util.Log;
+import com.ogoglio.util.StreamUtils;
import com.ogoglio.xml.AccountDocument;
import com.ogoglio.xml.BodyConfigurationDocument;
import com.ogoglio.xml.PossessionDocument;
@@ -178,9 +184,114 @@
return false;
}
+ private class BodyTextureResource extends AuthenticatedSiteResource {
+ public BodyTextureResource() {
+ super("texture", false, getSessionFactory());
+ }
+
+ public void doDelete(HttpServletRequest request, HttpServletResponse response, String[] pathElements, AccountRecord authedAccount) throws ServletException, IOException, PersistException {
+ BodyConfigurationRecord configRecord = getBodyConfigurationRecord(request, authedAccount, pathElements);
+ if (configRecord == null) {
+ response.setStatus(HttpServletResponse.SC_NOT_FOUND);
+ return;
+ }
+
+ getMediaService().delete(MediaService.getBodyTextureName(configRecord.getBodyConfigurationID()));
+ response.setStatus(HttpServletResponse.SC_OK);
+ }
+
+
+ public void doPost(HttpServletRequest request, HttpServletResponse response, String[] pathElements, AccountRecord authedAccount) throws ServletException, IOException, PersistException {
+ BodyConfigurationRecord configRecord = getBodyConfigurationRecord(request, authedAccount, pathElements);
+ if (configRecord == null) {
+ response.setStatus(HttpServletResponse.SC_NOT_FOUND);
+ return;
+ }
+
+ InputStream fileInput = null;
+ if (request.getContentType() != null && request.getContentType().startsWith("multipart/form-data")) {
+ fileInput = getFirstFile(request, Sim.MAX_GEOMETRY_SIZE);
+ System.out.println("File input: " + fileInput);
+ if (fileInput == null) {
+ response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+ return;
+ }
+ } else {
+ fileInput = request.getInputStream();
+ System.out.println("inputolio: " + fileInput);
+ }
+
+ if (!getMediaService().write(MediaService.getBodyTextureName(configRecord.getBodyConfigurationID()), fileInput, Sim.MAX_BODY_TEXTURE_SIZE)) {
+ Log.error("Could not write body texture");
+ response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ return;
+ }
+
+ response.setStatus(HttpServletResponse.SC_OK);
+ return;
+ }
+
+ public void doHead(HttpServletRequest request, HttpServletResponse response, String[] pathElements, AccountRecord authedAccount) throws ServletException, IOException, PersistException {
+ BodyConfigurationRecord configRecord = getBodyConfigurationRecord(request, authedAccount, pathElements);
+ if (configRecord == null) {
+ response.setStatus(HttpServletResponse.SC_NOT_FOUND);
+ return;
+ }
+
+ String mediaName = MediaService.getBodyTextureName(configRecord.getBodyConfigurationID());
+ long length = getMediaService().getSize(mediaName);
+ if (length == -1) {
+ response.setStatus(HttpServletResponse.SC_NOT_FOUND);
+ return;
+ }
+
+ long lastModified = getMediaService().getLastModified(mediaName);
+ setCachable(response);
+ response.setStatus(HttpServletResponse.SC_OK);
+ response.setContentLength((int) length);
+ response.setDateHeader("Last-Modified", lastModified);
+ }
+
+ public void doGet(HttpServletRequest request, HttpServletResponse response, String[] pathElements, AccountRecord authedAccount) throws PersistException, IOException {
+ BodyConfigurationRecord configRecord = getBodyConfigurationRecord(request, authedAccount, pathElements);
+ if (configRecord == null) {
+ response.setStatus(HttpServletResponse.SC_NOT_FOUND);
+ return;
+ }
+ DecoratedInputStream data = getMediaService().getData(MediaService.getBodyTextureName(configRecord.getBodyConfigurationID()));
+ if (data == null) {
+ response.setStatus(HttpServletResponse.SC_NOT_FOUND);
+ return;
+ }
+ response.setStatus(HttpServletResponse.SC_OK);
+ setCachable(response);
+ if (data.getMimeType() != null) {
+ response.setContentType(data.getMimeType());
+ }
+ if (data.getLength() > -1) {
+ response.setContentLength((int) data.getLength());
+ }
+ StreamUtils.write(data, response.getOutputStream());
+ }
+
+ private BodyConfigurationRecord getBodyConfigurationRecord(HttpServletRequest request, AccountRecord authedAccount, String[] pathElements) throws PersistException {
+ String username = pathElements[pathElements.length - 4];
+ if (!requestOkForBody(request, username, authedAccount)) {
+ return null;
+ }
+ long bodyConfigID = Long.parseLong(pathElements[pathElements.length - 2]);
+ BodyConfigurationRecord record = BodyPersistTasks.findBodyConfigurationByID(bodyConfigID, getSessionFactory());
+ if (record == null || !username.equals(record.getOwnerUsername())) {
+ return null;
+ }
+ return record;
+ }
+ }
+
private class BodyResource extends AuthenticatedSiteResource {
public BodyResource() {
super(SiteResource.LONG_ELEMENT, false, getSessionFactory());
+ addSubResource(new BodyTextureResource());
}
public void doGet(HttpServletRequest request, HttpServletResponse response, String[] pathElements, AccountRecord authedAccount) throws PersistException, IOException {
@@ -197,7 +308,6 @@
return;
}
BodySettingRecord[] settingRecords = BodyPersistTasks.findBodySettingsByConfigurationID(bodyConfigID, getSessionFactory());
-
sendStringResponse(DocumentFactory.documentFromRecord(record, settingRecords).toString(), "text/xml", response);
}
@@ -237,12 +347,11 @@
return;
}
BodyConfigurationRecord record = BodyPersistTasks.findBodyConfigurationByID(authedAccount.getDefaultBodyConfigurationID(), getSessionFactory());
- if(record == null){
+ if (record == null) {
throw new IllegalStateException("Account has a bogus body configuration record.. " + authedAccount.getDefaultBodyConfigurationID());
}
-
- BodySettingRecord[] settingRecords = BodyPersistTasks.findBodySettingsByConfigurationID(record.getBodyConfigurationID(), getSessionFactory());
- sendStringResponse(DocumentFactory.documentFromRecord(record, settingRecords).toString(), "text/xml", response);
+
+ sendStringResponse(createBodyConfigurationDocument(record).toString(), "text/xml", response);
}
}
@@ -262,7 +371,7 @@
BodyConfigurationRecord[] configRecs = BodyPersistTasks.findBodyConfigurationsByUsername(username, getSessionFactory());
XMLElement list = new XMLElement("list");
for (int i = 0; i < configRecs.length; i++) {
- list.addChild(DocumentFactory.documentFromRecord(configRecs[i], BodyPersistTasks.findBodySettingsByConfigurationID(configRecs[i].getBodyConfigurationID(), getSessionFactory())).toElement());
+ list.addChild(createBodyConfigurationDocument(configRecs[i]).toElement());
}
sendStringResponse(list.toString(), "text/xml", response);
}
@@ -283,10 +392,15 @@
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
return;
}
- sendStringResponse(DocumentFactory.documentFromRecord(record, BodyPersistTasks.findBodySettingsByConfigurationID(record.getBodyConfigurationID(), getSessionFactory())).toString(), "text/xml", response);
+ sendStringResponse(createBodyConfigurationDocument(record).toString(), "text/xml", response);
}
}
+ private BodyConfigurationDocument createBodyConfigurationDocument(BodyConfigurationRecord record) throws PersistException {
+ BodySettingRecord[] settingRecords = BodyPersistTasks.findBodySettingsByConfigurationID(record.getBodyConfigurationID(), getSessionFactory());
+ return DocumentFactory.documentFromRecord(record, settingRecords);
+ }
+
private void sendValidationMail(PendingEmailValidationRecord validationRecord) throws MailSendException {
String from = "robot@" + getSiteInfo().getHost();
String validationURL = getSiteInfo().getBaseUrl() + "account/validate?" + SECRET_PARAMETER + "=" + validationRecord.getSecret();
Modified: maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/TemplateResource.java
===================================================================
--- maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/TemplateResource.java 2007-10-10 23:31:38 UTC (rev 490)
+++ maven/trunk/ogoglio-server/src/main/java/com/ogoglio/site/TemplateResource.java 2007-10-15 13:04:39 UTC (rev 491)
@@ -29,567 +29,569 @@
import com.ogoglio.xml.server.DocumentFactory;
public class TemplateResource extends AuthenticatedSiteResource {
- private SessionFactory sessionFactory;
- private MediaService mediaService;
+ private SessionFactory sessionFactory;
- public TemplateResource(SessionFactory factory, MediaService service) {
- super(SiteResource.LONG_ELEMENT, false, factory);
- addSubResource(new TemplateGeometryResource());
- addSubResource(new TemplateScriptResource(factory));
- sessionFactory=factory;
- mediaService=service;
- }
- public SessionFactory getSessionFactory() {
- return sessionFactory;
- }
- public InputStream getFirstFile(HttpServletRequest request,long maxSize) throws IOException {
- return AbstractResourceServlet.getFirstFile(request, maxSize);
- }
- public MediaService getMediaService() {
- return mediaService;
- }
- public void setCachable(HttpServletResponse response) {
- AbstractResourceServlet.setCachable(response);
- }
- public String getFirstStringValue(HttpServletRequest request) throws IOException {
- return AbstractResourceServlet.getFirstStringValue(request);
- }
+ private MediaService mediaService;
+ public TemplateResource(SessionFactory factory, MediaService service) {
+ super(SiteResource.LONG_ELEMENT, false, factory);
+ addSubResource(new TemplateGeometryResource());
+ addSubResource(new TemplateScriptResource(factory));
+ sessionFactory = factory;
+ mediaService = service;
+ }
- public void doDelete(HttpServletRequest request, HttpServletResponse response, String[] pathElements, AccountRecord authedAccount) throws PersistException, ServletException, IOException {
- AccountRecord requestedAccount = verifyAccountFromPathElements(response, pathElements);
- if (requestedAccount==null) {
- return;
- }
+ public SessionFactory getSessionFactory() {
+ return sessionFactory;
+ }
- TemplateRecord record = verifyTemplateIDFromPathElements(response, pathElements);
- if (record==null) {
- return;
- }
- if (!TemplatePersistTasks.deleteTemplate(record, getSessionFactory())) {
- response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
- return;
- }
- response.setStatus(HttpServletResponse.SC_OK);
- }
+ public InputStream getFirstFile(HttpServletRequest request, long maxSize) throws IOException {
+ return AbstractResourceServlet.getFirstFile(request, maxSize);
+ }
- public void doPost(HttpServletRequest request, HttpServletResponse response, String[] pathElements, AccountRecord authedAccount) throws PersistException, ServletException, IOException {
- AccountRecord requestedAccount = verifyAccountFromPathElements(response, pathElements);
- if (requestedAccount==null) {
- return;
- }
+ public MediaService getMediaService() {
+ return mediaService;
+ }
- TemplateRecord record = verifyTemplateIDFromPathElements(response, pathElements);
- if (record==null) {
- return;
- }
+ public void setCachable(HttpServletResponse response) {
+ AbstractResourceServlet.setCachable(response);
+ }
- if (authedAccount == null || !requestedAccount.getUsername().equals(authedAccount.getUsername())) {
- response.setStatus(HttpServletResponse.SC_FORBIDDEN);
- return;
- }
+ public String getFirstStringValue(HttpServletRequest request) throws IOException {
+ return AbstractResourceServlet.getFirstStringValue(request);
+ }
- TemplateDocument newDoc = new TemplateDocument(parseXML(request.getInputStream()));
- TemplateRecord updatedRec = TemplatePersistTasks.update(newDoc, record, getSessionFactory());
- if (updatedRec == null) {
- response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
- return;
- }
+ public void doDelete(HttpServletRequest request, HttpServletResponse response, String[] pathElements, AccountRecord authedAccount) throws PersistException, ServletException, IOException {
+ AccountRecord requestedAccount = verifyAccountFromPathElements(response, pathElements);
+ if (requestedAccount == null) {
+ return;
+ }
- newDoc = DocumentFactory.documentFromRecord(updatedRec);
+ TemplateRecord record = verifyTemplateIDFromPathElements(response, pathElements);
+ if (record == null) {
+ return;
+ }
+ if (!TemplatePersistTasks.deleteTemplate(record, getSessionFactory())) {
+ response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ return;
+ }
+ response.setStatus(HttpServletResponse.SC_OK);
+ }
- sendStringResponse(newDoc.toString(), "text/xml", response);
- }
+ public void doPost(HttpServletRequest request, HttpServletResponse response, String[] pathElements, AccountRecord authedAccount) throws PersistException, ServletException, IOException {
+ AccountRecord requestedAccount = verifyAccountFromPathElements(response, pathElements);
+ if (requestedAccount == null) {
+ return;
+ }
- private TemplateRecord verifyTemplateIDFromPathElements(HttpServletResponse response, String[] pathElements) throws PersistException {
- long templateID = Long.parseLong(pathElements[pathElements.length - 1]);
- TemplateRecord record = TemplatePersistTasks.findTemplateByTemplateID(templateID, getSessionFactory());
- if (record == null) {
- response.setStatus(HttpServletResponse.SC_NOT_FOUND);
- return null;
- }
- return record;
- }
+ TemplateRecord record = verifyTemplateIDFromPathElements(response, pathElements);
+ if (record == null) {
+ return;
+ }
- private AccountRecord verifyAccountFromPathElements(HttpServletResponse response, String[] pathElements) throws PersistException {
- String usernameParam = pathElements[pathElements.length - 3];
- AccountRecord requestedAccount = AccountPersistTasks.findAccountByUsername(usernameParam, getSessionFactory());
- if (requestedAccount == null) {
- response.setStatus(HttpServletResponse.SC_NOT_FOUND);
- return null;
- }
- return requestedAccount;
- }
+ if (authedAccount == null || !requestedAccount.getUsername().equals(authedAccount.getUsername())) {
+ response.setStatus(HttpServletResponse.SC_FORBIDDEN);
+ return;
+ }
- public void doGet(HttpServletRequest request, HttpServletResponse response, String[] pathElements, AccountRecord authedAccount) throws PersistException, ServletException, IOException {
- AccountRecord requestedAccount = verifyAccountFromPathElements(response, pathElements);
- if (requestedAccount==null) {
- return;
- }
+ TemplateDocument newDoc = new TemplateDocument(parseXML(request.getInputStream()));
+ TemplateRecord updatedRec = TemplatePersistTasks.update(newDoc, record, getSessionFactory());
+ if (updatedRec == null) {
+ response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+ return;
+ }
- TemplateRecord record = verifyTemplateIDFromPathElements(response, pathElements);
- if (record==null) {
- return;
- }
- TemplateDocument result = DocumentFactory.documentFromRecord(record);
- sendStringResponse(result.toString(), "text/xml", response);
+ newDoc = DocumentFactory.documentFromRecord(updatedRec);
- }
+ sendStringResponse(newDoc.toString(), "text/xml", response);
+ }
+ private TemplateRecord verifyTemplateIDFromPathElements(HttpServletResponse response, String[] pathElements) throws PersistException {
+ long templateID = Long.parseLong(pathElements[pathElements.length - 1]);
+ TemplateRecord record = TemplatePersistTasks.findTemplateByTemplateID(templateID, getSessionFactory());
+ if (record == null) {
+ response.setStatus(HttpServletResponse.SC_NOT_FOUND);
+ return null;
+ }
+ return record;
+ }
-// to prevent repetition between post and delete
- private abstract class TemplateSupportFileAction {
- public abstract void doGeometryAction(HttpServletRequest request, HttpServletResponse response,
- String[] pathElements, long templateID) throws PersistException, IOException;
- public abstract void doMaterialFileAction(HttpServletRequest request, HttpServletResponse response,
- String[] pathElements, long templateID) throws IOException, PersistException;
+ private AccountRecord verifyAccountFromPathElements(HttpServletResponse response, String[] pathElements) throws PersistException {
+ String usernameParam = pathElements[pathElements.length - 3];
+ AccountRecord requestedAccount = AccountPersistTasks.findAccountByUsername(usernameParam, getSessionFactory());
+ if (requestedAccount == null) {
+ response.setStatus(HttpServletResponse.SC_NOT_FOUND);
+ return null;
+ }
+ return requestedAccount;
+ }
- void destroyARecordInATemplateSetOfSupportFiles(HttpServletResponse response, TemplateRecord template, TemplateSupportFileRecord rec) throws PersistException {
- if (rec==null) {
- response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
- return;
- }
- template.getSupportFiles().remove(rec); //destroy pointer
- TemplatePersistTasks.update(template, getSessionFactory());
- response.setStatus(HttpServletResponse.SC_OK);
- }
- public String templateGeometryNameFromPathElements(long templateID, String[] pathElements, int[] hackReturn) {
- int LOD=-2995;
- try {
- LOD=Integer.parseInt(pathElements[pathElements.length -1]);
- hackReturn[0]=LOD;
- } catch (NumberFormatException e) {
- return null;
- }
- return MediaService.getTemplateGeometryName(templateID, LOD);
- }
- }
+ public void doGet(HttpServletRequest request, HttpServletResponse response, String[] pathElements, AccountRecord authedAccount) throws PersistException, ServletException, IOException {
+ AccountRecord requestedAccount = verifyAccountFromPathElements(response, pathElements);
+ if (requestedAccount == null) {
+ return;
+ }
- class TemplateSupportFilePost extends TemplateSupportFileAction{
- public void doGeometryAction(HttpServletRequest request, HttpServletResponse response,
- String[] pathElements, long templateID) throws PersistException, IOException{
- InputStream fileInput;
- //is this coming from a browser?
- if (request.getContentType() != null && request.getContentType().startsWith("multipart/form-data")) {
- fileInput = getFirstFile(request, Sim.MAX_GEOMETRY_SIZE);
- if (fileInput == null) {
- response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
- return;
- }
- } else {
- //coming from a sensible browser, just get the file input
- fileInput=request.getInputStream();
- }
- int[] lodHack=new int[1];
- String templateGeometryName = templateGeometryNameFromPathElements(templateID, pathElements,lodHack);
+ TemplateRecord record = verifyTemplateIDFromPathElements(response, pathElements);
+ if (record == null) {
+ return;
+ }
+ TemplateDocument result = DocumentFactory.documentFromRecord(record);
+ sendStringResponse(result.toString(), "text/xml", response);
+
+ }
+
+ // to prevent repetition between post and delete
+ private abstract class TemplateSupportFileAction {
+ public abstract void doGeometryAction(HttpServletRequest request, HttpServletResponse response, String[] pathElements, long templateID) throws PersistException, IOException;
+
+ public abstract void doMaterialFileAction(HttpServletRequest request, HttpServletResponse response, String[] pathElements, long templateID) throws IOException, PersistException;
+
+ void destroyARecordInATemplateSetOfSupportFiles(HttpServletResponse response, TemplateRecord template, TemplateSupportFileRecord rec) throws PersistException {
+ if (rec == null) {
+ response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ return;
+ }
+ template.getSupportFiles().remove(rec); //destroy pointer
+ TemplatePersistTasks.update(template, getSessionFactory());
+ response.setStatus(HttpServletResponse.SC_OK);
+ }
+
+ public String templateGeometryNameFromPathElements(long templateID, String[] pathElements, int[] hackReturn) {
+ int LOD = -2995;
+ try {
+ LOD = Integer.parseInt(pathElements[pathElements.length - 1]);
+ hackReturn[0] = LOD;
+ } catch (NumberFormatException e) {
+ return null;
+ }
+ return MediaService.getTemplateGeometryName(templateID, LOD);
+ }
+ }
+
+ class TemplateSupportFilePost extends TemplateSupportFileAction {
+ public void doGeometryAction(HttpServletRequest request, HttpServletResponse response, String[] pathElements, long templateID) throws PersistException, IOException {
+ InputStream fileInput;
+ //is this coming from a browser?
+ if (request.getContentType() != null && request.getContentType().startsWith("multipart/form-data")) {
+ fileInput = getFirstFile(request, Sim.MAX_GEOMETRY_SIZE);
+ if (fileInput == null) {
+ response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+ return;
+ }
+ } else {
+ //coming from a sensible browser, just get the file input
+ fileInput = request.getInputStream();
+ }
+ int[] lodHack = new int[1];
+ String templateGeometryName = templateGeometryNameFromPathElements(templateID, pathElements, lodHack);
ArgumentUtils.assertNotNull(templateGeometryName);
- getMediaService().write(templateGeometryName, fileInput, Sim.MAX_GEOMETRY_SIZE);
- TemplateRecord record = TemplatePersistTasks.findTemplateByTemplateID(templateID, getSessionFactory());
- TemplatePersistTasks.updateGeometryFileTemplateLastModified(record, lodHack[0], true,getSessionFactory());
- response.setStatus(HttpServletResponse.SC_OK);
- }
- public void doMaterialFileAction(HttpServletRequest request, HttpServletResponse response,
- String[] pathElements, long templateID) throws IOException, PersistException{
- InputStream fileInput;
- //from a browser?
- if (request.getContentType() != null && request.getContentType().startsWith("multipart/form-data")) {
- fileInput = getFirstFile(request, Sim.MAX_GEOMETRY_RESOURCE_SIZE);
- if (fileInput == null) {
- response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
- return;
- }
- } else {
- fileInput=request.getInputStream();
- }
- String rawName=pathElements[pathElements.length -1 ];
- String templateResourceName = MediaService.getTemplateResourceName(templateID, rawName);
- getMediaService().write(templateResourceName, fileInput, Sim.MAX_GEOMETRY_RESOURCE_SIZE);
- TemplateRecord record = TemplatePersistTasks.findTemplateByTemplateID(templateID, getSessionFactory());
- TemplatePersistTasks.updateSupportFileTemplateLastModified(record, rawName, true,getSessionFactory());
- response.setStatus(HttpServletResponse.SC_OK);
- }
- }
- class TemplateSupportFileDelete extends TemplateSupportFileAction{
- public void doGeometryAction(HttpServletRequest request, HttpServletResponse response,
- String[] pathElements, long templateID) throws PersistException, IOException{
- int[] lodHack=new int[1];
- String templateGeometryName = templateGeometryNameFromPathElements(templateID,pathElements,lodHack);
- if (templateGeometryName==null) {
- response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
- return;
- }
- getMediaService().delete(templateGeometryName); //destroy the content
- TemplateRecord template = TemplatePersistTasks.findTemplateByTemplateID(templateID, getSessionFactory());
- destroyARecordInATemplateSetOfSupportFiles(response, template, template.findGeometryFileRec(lodHack[0]));
- }
- public void doMaterialFileAction(HttpServletRequest request, HttpServletResponse response,
- String[] pathElements, long templateID) throws IOException, PersistException{
+ getMediaService().write(templateGeometryName, fileInput, Sim.MAX_GEOMETRY_SIZE);
+ TemplateRecord record = TemplatePersistTasks.findTemplateByTemplateID(templateID, getSessionFactory());
+ TemplatePersistTasks.updateGeometryFileTemplateLastModified(record, lodHack[0], true, getSessionFactory());
+ response.setStatus(HttpServletResponse.SC_OK);
+ }
- String rawName=pathElements[pathElements.length -1 ];
- String templateResourceName = MediaService.getTemplateResourceName(templateID, pathElements[pathElements.length -1 ]);
- getMediaService().delete(templateResourceName);//destroy content
- TemplateRecord template = TemplatePersistTasks.findTemplateByTemplateID(templateID, getSessionFactory());
- destroyARecordInATemplateSetOfSupportFiles(response, template, template.findSupportFile(rawName));
- }
- }
- class TemplateGeometryResource extends DescendingSiteResource {
- public TemplateGeometryResource() {
- super("geometry");
- }
+ public void doMaterialFileAction(HttpServletRequest request, HttpServletResponse response, String[] pathElements, long templateID) throws IOException, PersistException {
+ InputStream fileInput;
+ //from a browser?
+ if (request.getContentType() != null && request.getContentType().startsWith("multipart/form-data")) {
+ fileInput = getFirstFile(request, Sim.MAX_GEOMETRY_RESOURCE_SIZE);
+ if (fileInput == null) {
+ response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+ return;
+ }
+ } else {
+ fileInput = request.getInputStream();
+ }
+ String rawName = pathElements[pathElements.length - 1];
+ String templateResourceName = MediaService.getTemplateResourceName(templateID, rawName);
+ getMediaService().write(templateResourceName, fileInput, Sim.MAX_GEOMETRY_RESOURCE_SIZE);
+ TemplateRecord record = TemplatePersistTasks.findTemplateByTemplateID(templateID, getSessionFactory());
+ TemplatePersistTasks.updateSupportFileTemplateLastModified(record, rawName, true, getSessionFactory());
+ response.setStatus(HttpServletResponse.SC_OK);
+ }
+ }
- public void doDelete(HttpServletRequest request, HttpServletResponse response,
- String[] pathElements) throws ServletException, IOException {
- doSomething(request, response, pathElements, new TemplateSupportFileDelete());
- }
- public void doPost(HttpServletRequest request, HttpServletResponse response, String[] pathElements) throws ServletException, IOException {
- doSomething(request,response,pathElements,new TemplateSupportFilePost());
- }
- public void doSomething(HttpServletRequest request, HttpServletResponse response,
- String[] pathElements, TemplateSupportFileAction action) throws ServletException, IOException {
- String usernameParam = pathElements[1];
- try {
- AccountRecord authedAccount = getAuthedAccount(request, response);
- if (authedAccount==null) {
- return;
- }
- AccountRecord requestedAccount = getRequestedAccount(response, usernameParam);
- if (requestedAccount==null) {
- return;
- }
+ class TemplateSupportFileDelete extends TemplateSupportFileAction {
+ public void doGeometryAction(HttpServletRequest request, HttpServletResponse response, String[] pathElements, long templateID) throws PersistException, IOException {
+ int[] lodHack = new int[1];
+ String templateGeometryName = templateGeometryNameFromPathElements(templateID, pathElements, lodHack);
+ if (templateGeometryName == null) {
+ response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+ return;
+ }
+ getMediaService().delete(templateGeometryName); //destroy the content
+ TemplateRecord template = TemplatePersistTasks.findTemplateByTemplateID(templateID, getSessionFactory());
+ destroyARecordInATemplateSetOfSupportFiles(response, template, template.findGeometryFileRec(lodHack[0]));
+ }
- if (verifyAccountHolderIsOk(response, authedAccount, requestedAccount)==false) {
- return;
- }
+ public void doMaterialFileAction(HttpServletRequest request, HttpServletResponse response, String[] pathElements, long templateID) throws IOException, PersistException {
- Long tid = checkTemplateIDIsOk(response, authedAccount, requestedAccount, pathElements);
- if (tid==null) {
- return;
- }
- long templateID = tid.longValue();
+ String rawName = pathElements[pathElements.length - 1];
+ String templateResourceName = MediaService.getTemplateResourceName(templateID, pathElements[pathElements.length - 1]);
+ getMediaService().delete(templateResourceName);//destroy content
+ TemplateRecord template = TemplatePersistTasks.findTemplateByTemplateID(templateID, getSessionFactory());
+ destroyARecordInATemplateSetOfSupportFiles(response, template, template.findSupportFile(rawName));
+ }
+ }
- //trying to post to just /template/<TID>/geometry
- if (pathElements.length == 5) {
- response.setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
- return;
- }
- //trying to post to /geometry/data but requires an LOD number
- if (pathElements.length == 6 && "data".equals(pathElements[pathElements.length - 1])) {
- response.setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
- return;
- };
- //posting to /geometry/data/<number>
- if (pathElements.length == 7 && "data".equals(pathElements[pathElements.length - 2])) {
- action.doGeometryAction(request, response, pathElements, templateID);
- } else {
- action.doMaterialFileAction(request, response, pathElements, templateID);
- }
- return;
- } catch (PersistException e) {
- Log.info("Got Persist Exception:" +e.getMessage());
- handlePersistException(response, e);
- return;
- }
- }
+ class TemplateGeometryResource extends DescendingSiteResource {
+ public TemplateGeometryResource() {
+ super("geometry");
+ }
+ public void doDelete(HttpServletRequest request, HttpServletResponse response, String[] pathElements) throws ServletException, IOException {
+ handleRequest(request, response, pathElements, new TemplateSupportFileDelete());
+ }
- private void handlePersistException(HttpServletResponse response, PersistException e) {
- e.printStackTrace();
- response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
- }
+ public void doPost(HttpServletRequest request, HttpServletResponse response, String[] pathElements) throws ServletException, IOException {
+ handleRequest(request, response, pathElements, new TemplateSupportFilePost());
+ }
- private Long checkTemplateIDIsOk(HttpServletResponse response, AccountRecord authedAccount, AccountRecord requestedAccount,String[] pathElements) throws PersistException {
- long templateID = Long.parseLong(pathElements[3]);
- TemplateRecord record = TemplatePersistTasks.findTemplateByTemplateID(templateID, getSessionFactory());
- if (record == null || !record.getOwnerUsername().equals(requestedAccount.getUsername())) {
- response.setStatus(HttpServletResponse.SC_NOT_FOUND);
- return null;
- }
- return new Long(templateID);
- }
+ public void handleRequest(HttpServletRequest request, HttpServletResponse response, String[] pathElements, TemplateSupportFileAction action) throws ServletException, IOException {
+ String usernameParam = pathElements[1];
+ try {
+ AccountRecord authedAccount = getAuthedAccount(request, response);
+ if (authedAccount == null) {
+ return;
+ }
+ AccountRecord requestedAccount = getRequestedAccount(response, usernameParam);
+ if (requestedAccount == null) {
+ return;
+ }
- private boolean verifyAccountHolderIsOk(HttpServletResponse response, AccountRecord authedAccount, AccountRecord requestedAccount) {
- if (!requestedAccount.getUsername().equals(authedAccount.getUsername())) {
- response.setStatus(HttpServletResponse.SC_FORBIDDEN);
- return false;
- }
- return true;
- }
+ if (verifyAccountHolderIsOk(response, authedAccount, requestedAccount) == false) {
+ return;
+ }
+ Long tid = checkTemplateIDIsOk(response, authedAccount, requestedAccount, pathElements);
+ if (tid == null) {
+ return;
+ }
+ long templateID = tid.longValue();
- private AccountRecord getRequestedAccount(HttpServletResponse response, String usernameParam) throws PersistException {
- AccountRecord requestedAccount = AccountPersistTasks.findAccountByUsername(usernameParam, getSessionFactory());
- if (requestedAccount == null) {
- response.setStatus(HttpServletResponse.SC_NOT_FOUND);
- return null;
- }
- return requestedAccount;
- }
+ //trying to post to just /template/<TID>/geometry
+ if (pathElements.length == 5) {
+ response.setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
+ return;
+ }
+ //trying to post to /geometry/data but requires an LOD number
+ if (pathElements.length == 6 && "data".equals(pathElements[pathElements.length - 1])) {
+ response.setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
+ return;
+ }
+ ;
+ //posting to /geometry/data/<number>
+ if (pathElements.length == 7 && "data".equals(pathElements[pathElements.length - 2])) {
+ action.doGeometryAction(request, response, pathElements, templateID);
+ } else {
+ action.doMaterialFileAction(request, response, pathElements, templateID);
+ }
+ return;
+ } catch (PersistException e) {
+ Log.info("Got Persist Exception:" + e.getMessage());
+ handlePersistException(response, e);
+ return;
+ }
+ }
+ private void handlePersistException(HttpServletResponse response, PersistException e) {
+ e.printStackTrace();
+ response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ }
- private AccountRecord getAuthedAccount(HttpServletRequest request, HttpServletResponse response) throws PersistException {
- AccountRecord authedAccount = AuthServlet.getAuthedAccountRecord(request, getSessionFactory());
- if (authedAccount == null) {
- response.setStatus(HttpServletResponse.SC_FORBIDDEN);
- return null;
- }
- return authedAccount;
- }
- public void doPut(HttpServletRequest request, HttpServletResponse response, String[] pathElements) throws ServletException, IOException {
- String usernameParam = pathElements[1];
- Log.warn("Put called on a template geometry resource???");
- for (int i=0; i<pathElements.length;++i) Log.warn("PUT: "+i+" ->"+pathElements[i]);
- try {
- AccountRecord authedAccount = getAuthedAccount(request, response);
- if (authedAccount==null) {
- return;
- }
- AccountRecord requestedAccount = getRequestedAccount(response, usernameParam);
- if (requestedAccount==null) {
- return;
- }
+ private Long checkTemplateIDIsOk(HttpServletResponse response, AccountRecord authedAccount, AccountRecord requestedAccount, String[] pathElements) throws PersistException {
+ long templateID = Long.parseLong(pathElements[3]);
+ TemplateRecord record = TemplatePersistTasks.findTemplateByTemplateID(templateID, getSessionFactory());
+ if (record == null || !record.getOwnerUsername().equals(requestedAccount.getUsername())) {
+ response.setStatus(HttpServletResponse.SC_NOT_FOUND);
+ return null;
+ }
+ return new Long(templateID);
+ }
- if (verifyAccountHolderIsOk(response, authedAccount, requestedAccount)==false) {
- return;
- }
+ private boolean verifyAccountHolderIsOk(HttpServletResponse response, AccountRecord authedAccount, AccountRecord requestedAccount) {
+ if (!requestedAccount.getUsername().equals(authedAccount.getUsername())) {
+ response.setStatus(HttpServletResponse.SC_FORBIDDEN);
+ return false;
+ }
+ return true;
+ }
- String geomFileName = verifyParamsAreOk(response,pathElements);
- if (geomFileName==null) {
- return;
- }
- Long tid = checkTemplateIDIsOk(response, authedAccount, requestedAccount, pathElements);
- if (tid==null) {
- return;
- }
- } catch (PersistException e) {
- handlePersistException(response, e);
- }
- }
- private String verifyParamsAreOk(HttpServletResponse response, String[] pathElements) {
- if (pathElements.length!=7) {
- response.setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
- return null;
- }
- if ((pathElements[4].equals("geometry")==false) || (pathElements[5].equals("data")==false)) {
- response.setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
- return null;
- }
+ private AccountRecord getRequestedAccount(HttpServletResponse response, String usernameParam) throws PersistException {
+ AccountRecord requestedAccount = AccountPersistTasks.findAccountByUsername(usernameParam, getSessionFactory());
+ if (requestedAccount == null) {
+ response.setStatus(HttpServletResponse.SC_NOT_FOUND);
+ return null;
+ }
+ return requestedAccount;
+ }
- if ((pathElements[6]==null) || (pathElements[6].equals("")==true) || (pathElements[6].indexOf('-')!=-1)) {
- response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
- return null;
- }
- return pathElements[6];
- }
+ private AccountRecord getAuthedAccount(HttpServletRequest request, HttpServletResponse response) throws PersistException {
+ AccountRecord authedAccount = AuthServlet.getAuthedAccountRecord(request, getSessionFactory());
+ if (authedAccount == null) {
+ response.setStatus(HttpServletResponse.SC_FORBIDDEN);
+ return null;
+ }
+ return authedAccount;
+ }
+ public void doPut(HttpServletRequest request, HttpServletResponse response, String[] pathElements) throws ServletException, IOException {
+ String usernameParam = pathElements[1];
+ Log.warn("Put called on a template geometry resource???");
+ for (int i = 0; i < pathElements.length; ++i)
+ Log.warn("PUT: " + i + " ->" + pathElements[i]);
+ try {
+ AccountRecord authedAccount = getAuthedAccount(request, response);
+ if (authedAccount == null) {
+ return;
+ }
+ AccountRecord requestedAccount = getRequestedAccount(response, usernameParam);
+ if (requestedAccount == null) {
+ return;
+ }
- public void doGet(HttpServletRequest request, HttpServletResponse response, String[] pathElements) throws ServletException, IOException {
- String usernameParam = pathElements[1];
- try {
- AccountRecord authedAccount = AuthServlet.getAuthedAccountRecord(request, getSessionFactory());
- if (authedAccount == null && !AuthServlet.isGuest(request)) {
- response.setStatus(HttpServletResponse.SC_FORBIDDEN);
- return;
- }
+ if (verifyAccountHolderIsOk(response, authedAccount, requestedAccount) == false) {
+ return;
+ }
- AccountRecord requestedAccount = AccountPersistTasks.findAccountByUsername(usernameParam, getSessionFactory());
- if (requestedAccount == null) {
- response.setStatus(HttpServletResponse.SC_NOT_FOUND);
- return;
- }
+ String geomFileName = verifyParamsAreOk(response, pathElements);
+ if (geomFileName == null) {
+ return;
+ }
+ Long tid = checkTemplateIDIsOk(response, authedAccount, requestedAccount, pathElements);
+ if (tid == null) {
+ return;
+ }
+ } catch (PersistException e) {
+ handlePersistException(response, e);
+ }
+ }
- long templateID = Long.parseLong(pathElements[3]);
- TemplateRecord record = TemplatePersistTasks.findTemplateByTemplateID(templateID, getSessionFactory());
- if (record == null || !record.getOwnerUsername().equals(requestedAccount.getUsername())) {
- response.setStatus(HttpServletResponse.SC_NOT_FOUND);
- return;
- }
+ private String verifyParamsAreOk(HttpServletResponse response, String[] pathElements) {
+ if (pathElements.length != 7) {
+ response.setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
+ return null;
+ }
+ if ((pathElements[4].equals("geometry") == false) || (pathElements[5].equals("data") == false)) {
+ response.setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
+ return null;
+ }
- if (pathElements.length == 5) {
- sendStringResponse("This is where a geometry document would be.", "text/plain", response);
- return;
- }
+ if ((pathElements[6] == null) || (pathElements[6].equals("") == true) || (pathElements[6].indexOf('-') != -1)) {
+ response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
+ return null;
+ }
+ return pathElements[6];
+ }
- DecoratedInputStream data = null;
- if (pathElements.length == 7 && "data".equals(pathElements[pathElements.length - 2])) {
- data = getMediaService().getData(MediaService.getTemplateGeometryName(templateID, Integer.parseInt(pathElements[pathElements.length - 1])));
- } else {
- data = getMediaService().getData(MediaService.getTemplateResourceName(templateID, pathElements[pathElements.length - 1]));
- }
- if (data == null) {
- response.setStatus(HttpServletResponse.SC_NOT_FOUND);
- return;
- }
- response.setStatus(HttpServletResponse.SC_OK);
- setCachable(response);
- if (data.getMimeType() != null) {
- response.setContentType(data.getMimeType());
- }
- if ("gzip".equals(request.getHeader("Accept-encoding"))) {
- response.setHeader("Content-encoding", "gzip");
- StreamUtils.write(data, new GZIPOutputStream(response.getOutputStream()));
- } else {
- if (data.getLength() > -1) {
- response.setContentLength((int) data.getLength());
- }
- StreamUtils.write(data, response.getOutputStream());
- }
- } catch (PersistException e) {
- handlePersistException(response, e);
- return;
- }
- }
+ public void doGet(HttpServletRequest request, HttpServletResponse response, String[] pathElements) throws ServletException, IOException {
+ String usernameParam = pathElements[1];
+ try {
+ AccountRecord authedAccount = AuthServlet.getAuthedAccountRecord(request, getSessionFactory());
+ if (authedAccount == null && !AuthServlet.isGuest(request)) {
+ response.setStatus(HttpServletResponse.SC_FORBIDDEN);
+ return;
+ }
- public void doHead(HttpServletRequest request, HttpServletResponse response, String[] pathElements) throws ServletException, IOException {
- String usernameParam = pathElements[1];
- try {
- AccountRecord authedAccount = AuthServlet.getAuthedAccountRecord(request, getSessionFactory());
- if (authedAccount == null && !AuthServlet.isGuest(request)) {
- response.setStatus(HttpServletResponse.SC_FORBIDDEN);
- return;
- }
+ AccountRecord requestedAccount = AccountPersistTasks.findAccountByUsername(usernameParam, getSessionFactory());
+ if (requestedAccount == null) {
+ response.setStatus(HttpServletResponse.SC_NOT_FOUND);
+ return;
+ }
- AccountRecord requestedAccount = AccountPersistTasks.findAccountByUsername(usernameParam, getSessionFactory());
- if (requestedAccount == null) {
- response.setStatus(HttpServletResponse.SC_NOT_FOUND);
- return;
- }
+ long templateID = Long.parseLong(pathElements[3]);
+ TemplateRecord record = TemplatePersistTasks.findTemplateByTemplateID(templateID, getSessionFactory());
+ if (record == null || !record.getOwnerUsername().equals(requestedAccount.getUsername())) {
+ response.setStatus(HttpServletResponse.SC_NOT_FOUND);
+ return;
+ }
- long templateID = Long.parseLong(pathElements[3]);
- TemplateRecord record = TemplatePersistTasks.findTemplateByTemplateID(templateID, getSessionFactory());
- if (record == null || !record.getOwnerUsername().equals(requestedAccount.getUsername())) {
- response.setStatus(HttpServletResponse.SC_NOT_FOUND);
- return;
- }
+ if (pathElements.length == 5) {
+ sendStringResponse("This is where a geometry document would be.", "text/plain", response);
+ return;
+ }
- if (pathElements.length == 5) {
- sendStringResponse("This is where a geometry document would be.", "text/plain", response);
- return;
- }
+ DecoratedInputStream data = null;
+ if (pathElements.length == 7 && "data".equals(pathElements[pathElements.length - 2])) {
+ data = getMediaService().getData(MediaService.getTemplateGeometryName(templateID, Integer.parseInt(pathElements[pathElements.length - 1])));
+ } else {
+ data = getMediaService().getData(MediaService.getTemplateResourceName(templateID, pathElements[pathElements.length - 1]));
+ }
+ if (data == null) {
+ response.setStatus(HttpServletResponse.SC_NOT_FOUND);
+ return;
+ }
+ response.setStatus(HttpServletResponse.SC_OK);
+ setCachable(response);
+ if (data.getMimeType() != null) {
+ response.setContentType(data.getMimeType());
+ }
+ if ("gzip".equals(request.getHeader("Accept-encoding"))) {
+ response.setHeader("Content-encoding", "gzip");
+ StreamUtils.write(data, new GZIPOutputStream(response.getOutputStream()));
+ } else {
+ if (data.getLength() > -1) {
+ response.setContentLength((int) data.getLength());
+ }
+ StreamUtils.write(data, response.getOutputStream());
+ }
+ } catch (PersistException e) {
+ handlePersistException(response, e);
+ return;
+ }
+ }
- String mediaName = null;
- if (pathElements.length == 7 && "data".equals(pathElements[pathElements.length - 2])) {
- mediaName = MediaService.getTemplateGeometryName(templateID, Integer.parseInt(pathElements[pathElements.length - 1]));
- } else {
- mediaName = MediaService.getTemplateResourceName(templateID, pathElements[pathElements.length - 1]);
- }
+ public void doHead(HttpServletRequest request, HttpServletResponse response, String[] pathElements) throws ServletException, IOException {
+ String usernameParam = pathElements[1];
+ try {
+ AccountRecord authedAccount = AuthServlet.getAuthedAccountRecord(request, getSessionFactory());
+ if (authedAccount == null && !AuthServlet.isGuest(request)) {
+ response.setStatus(HttpServletResponse.SC_FORBIDDEN);
+ return;
+ }
- long length = getMediaService().getSize(mediaName);
- if (length == -1) {
- response.setStatus(HttpServletResponse.SC_NOT_FOUND);
- return;
- }
+ AccountRecord requestedAccount = AccountPersistTasks.findAccountByUsername(usernameParam, getSessionFactory());
+ if (requestedAccount == null) {
+ response.setStatus(HttpServletResponse.SC_NOT_FOUND);
+ return;
+ }
- long lastModified = getMediaService().getLastModified(mediaName);
+ long templateID = Long.parseLong(pathElements[3]);
+ TemplateRecord record = TemplatePersistTasks.findTemplateByTemplateID(templateID, getSessionFactory());
+ if (record == null || !record.getOwnerUsername().equals(requestedAccount.getUsername())) {
+ response.setStatus(HttpServletResponse.SC_NOT_FOUND);
+ return;
+ }
- setCachable(response);
- response.setStatus(HttpServletResponse.SC_OK);
- response.setContentLength((int) length);
- response.setDateHeader("Last-Modified", lastModified);
- } catch (PersistException e) {
- handlePersistException(response, e);
- return;
- }
- }
- }
+ if (pathElements.length == 5) {
+ sendStringResponse("This is where a geometry document would be.", "text/plain", response);
+ return;
+ }
- class TemplateScriptResource extends AuthenticatedSiteResource {
- public TemplateScriptResource(SessionFactory sessionFactory) {
- super("script", true, sessionFactory);
- }
+ String mediaName = null;
+ if (pathElements.length == 7 && "data".equals(pathElements[pathElements.length - 2])) {
+ mediaName = MediaService.getTemplateGeometryName(templateID, Integer.parseInt(pathElements[pathElements.length - 1]));
+ } else {
+ mediaName = MediaService.getTemplateResourceName(templateID, pathElements[pathElements.length - 1]);
+ }
- public void doPost(HttpServletRequest request, HttpServletResponse response, String[] pathElements, AccountRecord authedAccount) throws PersistException, ServletException, IOException {
- AccountRecord requestedAccount = verifyAccount(response, pathElements);
- if (requestedAccount==null) {
- return;
- }
- TemplateRecord record = verifyTemplateExists(response, pathElements, requestedAccount);
- if (record==null) {
- return;
- }
- String script = getFirstStringValue(request);
- if (script == null) {
- InputStream scriptStream = getFirstFile(request, Sim.MAX_SCRIPT_SIZE);
- if (scriptStream == null) {
- response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
- return;
- }
- script = StreamUtils.readInput(scriptStream);
- }
- if (!getMediaService().write(MediaService.getTemplateScriptName(record.getTemplateID()), script)) {
- response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
- return;
- }
+ long length = getMediaService().getSize(mediaName);
+ if (length == -1) {
+ response.setStatus(HttpServletResponse.SC_NOT_FOUND);
+ return;
+ }
- TemplatePersistTasks.updateScriptFilePropOfTemplate(record,true,sessionFactory);
+ long lastM...
[truncated message content] |