This is an automated email from the git hooks/post-receive script. New commit to branch feature/addPollenResourceApi in repository pollen. See http://git.chorem.org/pollen.git commit c23fd692907d494fee4963275941865a3a6d1e74 Author: Adrien Garandel <a.garandel@dralagen.fr> Date: Fri Jul 11 14:11:10 2014 +0200 add pollen resources api --- pollen-persistence/src/main/xmi/pollen.zargo | Bin 20233 -> 20385 bytes .../pollen/rest/api/v1/PollenResourceApi.java | 69 ++++++++++++++ pollen-rest-api/src/main/resources/mapping | 9 ++ .../pollen/services/bean/ResourceFileBean.java | 96 +++++++++++++++++++ .../pollen/services/bean/ResourceMetaBean.java | 68 +++++++++++++ .../pollen/services/bean/ResourceStreamBean.java | 102 ++++++++++++++++++++ .../services/service/PollenResourceService.java | 106 +++++++++++++++++++++ .../services/service/PollenServiceSupport.java | 18 +--- 8 files changed, 455 insertions(+), 13 deletions(-) diff --git a/pollen-persistence/src/main/xmi/pollen.zargo b/pollen-persistence/src/main/xmi/pollen.zargo index 72a711c..a6810ea 100644 Binary files a/pollen-persistence/src/main/xmi/pollen.zargo and b/pollen-persistence/src/main/xmi/pollen.zargo differ diff --git a/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/PollenResourceApi.java b/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/PollenResourceApi.java new file mode 100644 index 0000000..7793994 --- /dev/null +++ b/pollen-rest-api/src/main/java/org/chorem/pollen/rest/api/v1/PollenResourceApi.java @@ -0,0 +1,69 @@ +package org.chorem.pollen.rest.api.v1; + +import org.chorem.pollen.persistence.entity.PollenResource; +import org.chorem.pollen.services.bean.*; +import org.chorem.pollen.services.service.PollenResourceService; +import org.debux.webmotion.server.WebMotionController; +import org.debux.webmotion.server.call.UploadFile; +import org.debux.webmotion.server.render.Render; + +import java.io.FileNotFoundException; + +/** + * Created on 10/07/14. + * + * @author dralagen + */ +public class PollenResourceApi extends WebMotionController { + + public Render getResource(PollenResourceService pollenResourceService, PollenEntityId<PollenResource> resourceId) throws FileNotFoundException { + + ResourceStreamBean resource = pollenResourceService.getResource(resourceId.getEntityId()); + + return renderStream(resource.getResourceContent(), resource.getContentType()); + } + + public Render getPreviewResource(PollenResourceService pollenResourceService, PollenEntityId<PollenResource> resourceId) { + + ResourceStreamBean resource = pollenResourceService.getResource(resourceId.getEntityId()); + + return renderStream(resource.getResourceContent(), resource.getContentType()); + } + + public ResourceMetaBean getMetaResource(PollenResourceService pollenResourceService, PollenEntityId<PollenResource> resourceId) { + + ResourceMetaBean resource = pollenResourceService.getMetaResource(resourceId.getEntityId()); + + return resource; + } + + public PollenEntityRef<PollenResource> createResource(PollenResourceService pollenResourceService, UploadFile resource) { + + ResourceFileBean resourceBean = new ResourceFileBean(); + + resourceBean.setFile(resource.getFile()); + resourceBean.setName(resource.getName()); + resourceBean.setContentType(resource.getContentType()); + resourceBean.setSize(resource.getSize()); + + return pollenResourceService.createResource(resourceBean); + } + + public PollenEntityRef<PollenResource> editResource(PollenResourceService pollenResourceService, PollenEntityId<PollenResource> resourceId, UploadFile resource) { + + ResourceFileBean resourceBean = new ResourceFileBean(); + + resourceBean.setFile(resource.getFile()); + resourceBean.setName(resource.getName()); + resourceBean.setContentType(resource.getContentType()); + resourceBean.setSize(resource.getSize()); + + return pollenResourceService.editResource(resourceId.getEntityId(), resourceBean); + + } + + public void deleteResource(PollenResourceService pollenResourceService, PollenEntityId<PollenResource> resourceId) { + + pollenResourceService.deleteResource(resourceId.getEntityId()); + } +} diff --git a/pollen-rest-api/src/main/resources/mapping b/pollen-rest-api/src/main/resources/mapping index 0c6b559..07e4877 100644 --- a/pollen-rest-api/src/main/resources/mapping +++ b/pollen-rest-api/src/main/resources/mapping @@ -114,6 +114,15 @@ POST /v1/polls/{pollId}/clone PollApi.clonePoll GET /v1/polls/{pollId}/export PollApi.exportPoll PUT /v1/polls/{pollId}/close PollApi.closePoll +# PollenResourceApi + +GET /v1/resources/{resourceId} PollenResourceApi.getResource +GET /v1/resources/{resourceId}/meta PollenResourceApi.getMetaResource +GET /v1/resources/{resourceId}/preview PollenResourceApi.getPreviewResource +POST /v1/resources PollenResourceApi.createResource +POST /v1/resources/{resourceId} PollenResourceApi.editResource +DELETE /v1/resources/{resourceId} PollenResourceApi.deleteResource + # PollenUserApi GET /v1/users PollenUserApi.getUsers diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/ResourceFileBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/ResourceFileBean.java new file mode 100644 index 0000000..c4c6498 --- /dev/null +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/ResourceFileBean.java @@ -0,0 +1,96 @@ +package org.chorem.pollen.services.bean; + +import org.apache.commons.io.IOUtils; +import org.chorem.pollen.persistence.entity.PollenResource; +import org.chorem.pollen.persistence.entity.PollenResourceImpl; + +import javax.sql.rowset.serial.SerialBlob; +import javax.sql.rowset.serial.SerialException; +import java.io.*; +import java.sql.Blob; +import java.sql.SQLException; + +/** + * Created on 11/07/14. + * + * @author dralagen + */ +public class ResourceFileBean extends PollenBean<PollenResource> { + + protected File file; + + protected String name; + + protected long size; + + protected String contentType; + + public ResourceFileBean() { + super(PollenResource.class); + } + + @Override + public void fromEntity(PollenResource entity) { + setEntityId(entity.getTopiaId()); + + setName(entity.getName()); + setSize(entity.getSize()); + setContentType(entity.getContentType()); + } + + @Override + public PollenResource toEntity() { + PollenResource entity = new PollenResourceImpl(); + + entity.setTopiaId(getEntityId()); + + try { + entity.setResourceContent(getResourceBlob()); + } catch (IOException | SQLException e) { + e.printStackTrace(); + } + + entity.setName(getName()); + entity.setSize(getSize()); + entity.setContentType(getContentType()); + + return entity; + } + + public File getFile() { + return file; + } + + public void setFile(File file) { + this.file = file; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public long getSize() { + return size; + } + + public void setSize(long size) { + this.size = size; + } + + public String getContentType() { + return contentType; + } + + public void setContentType(String contentType) { + this.contentType = contentType; + } + + public Blob getResourceBlob() throws IOException, SQLException { + InputStream stream = new FileInputStream(getFile()); + return new SerialBlob(IOUtils.toByteArray(stream)); + } +} diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/ResourceMetaBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/ResourceMetaBean.java new file mode 100644 index 0000000..3243fa6 --- /dev/null +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/ResourceMetaBean.java @@ -0,0 +1,68 @@ +package org.chorem.pollen.services.bean; + +import org.chorem.pollen.persistence.entity.PollenResource; +import org.chorem.pollen.persistence.entity.PollenResourceImpl; + +/** + * Created on 11/07/14. + * + * @author dralagen + */ +public class ResourceMetaBean extends PollenBean<PollenResource> { + + protected String name; + + protected long size; + + protected String contentType; + + protected ResourceMetaBean() { + super(PollenResource.class); + } + + @Override + public void fromEntity(PollenResource entity) { + setEntityId(entity.getTopiaId()); + + setName(entity.getName()); + setSize(entity.getSize()); + setContentType(entity.getContentType()); + } + + @Override + public PollenResource toEntity() { + PollenResource entity = new PollenResourceImpl(); + + entity.setTopiaId(getEntityId()); + + entity.setName(getName()); + entity.setSize(getSize()); + entity.setContentType(getContentType()); + + return entity; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public long getSize() { + return size; + } + + public void setSize(long size) { + this.size = size; + } + + public String getContentType() { + return contentType; + } + + public void setContentType(String contentType) { + this.contentType = contentType; + } +} diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/bean/ResourceStreamBean.java b/pollen-services/src/main/java/org/chorem/pollen/services/bean/ResourceStreamBean.java new file mode 100644 index 0000000..a4b154d --- /dev/null +++ b/pollen-services/src/main/java/org/chorem/pollen/services/bean/ResourceStreamBean.java @@ -0,0 +1,102 @@ +package org.chorem.pollen.services.bean; + +import org.apache.commons.io.IOUtils; +import org.chorem.pollen.persistence.entity.PollenResource; +import org.chorem.pollen.persistence.entity.PollenResourceImpl; + +import javax.sql.rowset.serial.SerialBlob; +import java.io.IOException; +import java.io.InputStream; +import java.sql.Blob; +import java.sql.SQLException; + +/** + * Created on 11/07/14. + * + * @author dralagen + */ +public class ResourceStreamBean extends PollenBean<PollenResource> { + + protected InputStream resourceContent; + + protected String name; + + protected long size; + + protected String contentType; + + public ResourceStreamBean() { + super(PollenResource.class); + } + + @Override + public void fromEntity(PollenResource entity) { + setEntityId(entity.getTopiaId()); + + try { + setResourceContent(entity.getResourceContent().getBinaryStream()); + } catch (SQLException e) { + e.printStackTrace(); + } + + setName(entity.getName()); + setSize(entity.getSize()); + setContentType(entity.getContentType()); + } + + @Override + public PollenResource toEntity() { + PollenResource entity = new PollenResourceImpl(); + + entity.setTopiaId(getEntityId()); + + try { + entity.setResourceContent(getResourceBlob()); + } catch (IOException | SQLException e) { + e.printStackTrace(); + } + + entity.setName(getName()); + entity.setSize(getSize()); + entity.setContentType(getContentType()); + + + return entity; + } + + public InputStream getResourceContent() { + return resourceContent; + } + + public void setResourceContent(InputStream resourceContent) { + this.resourceContent = resourceContent; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public long getSize() { + return size; + } + + public void setSize(long size) { + this.size = size; + } + + public String getContentType() { + return contentType; + } + + public void setContentType(String contentType) { + this.contentType = contentType; + } + + public Blob getResourceBlob() throws IOException, SQLException { + return new SerialBlob(IOUtils.toByteArray(getResourceContent())); + } +} diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenResourceService.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenResourceService.java new file mode 100644 index 0000000..0fae9bb --- /dev/null +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenResourceService.java @@ -0,0 +1,106 @@ +package org.chorem.pollen.services.service; + +import org.chorem.pollen.persistence.entity.PollenResource; +import org.chorem.pollen.services.PollenService; +import org.chorem.pollen.services.bean.PollenEntityRef; +import org.chorem.pollen.services.bean.ResourceFileBean; +import org.chorem.pollen.services.bean.ResourceMetaBean; +import org.chorem.pollen.services.bean.ResourceStreamBean; + +import java.io.IOException; +import java.sql.SQLException; + +/** + * Created on 10/07/14. + * + * @author dralagen + */ +public class PollenResourceService extends PollenServiceSupport implements PollenService { + + public ResourceStreamBean getResource(String resourceId) { + checkNotNull(resourceId); + + PollenResource resource = getResource0(resourceId); + + return toBean(ResourceStreamBean.class, resource); + } + + public ResourceMetaBean getMetaResource(String resourceId) { + checkNotNull(resourceId); + + PollenResource resource = getResource0(resourceId); + + return toBean(ResourceMetaBean.class, resource); + } + + public PollenEntityRef<PollenResource> createResource(ResourceFileBean resource) { + checkNotNull(resource); + checkIsNotPersisted(resource); + + // TODO : check resource + + PollenResource savedResource = saveResource(resource); + commit(); + + return PollenEntityRef.of(savedResource); + } + + public PollenEntityRef<PollenResource> editResource (String resourceId, ResourceFileBean resource) { + checkNotNull(resourceId); + checkIsNotPersisted(resource); + + // TODO: check resource + + PollenResource savedResource = saveResource(resource); + commit(); + + return PollenEntityRef.of(savedResource); + + } + + public void deleteResource (String resourceId) { + checkNotNull(resourceId); + + PollenResource resource = getResource0(resourceId); + + getPollenResourceDao().delete(resource); + commit(); + } + + protected PollenResource getResource0(String resourceId) { + PollenResource resource = getPollenResourceDao().forTopiaIdEquals(resourceId).findUnique(); + + + return resource; + } + + + protected PollenResource saveResource(ResourceFileBean resource) { + + boolean resourceExist = resource.isPersisted(); + + PollenResource toSave; + + if (resourceExist) { + toSave = getResource0(resource.getEntityId()); + } + else { + toSave = getPollenResourceDao().create(); + } + + toSave.setName(resource.getName()); + toSave.setContentType(resource.getContentType()); + toSave.setSize(resource.getSize()); + try { + toSave.setResourceContent(resource.getResourceBlob()); + } catch (IOException | SQLException e) { + e.printStackTrace(); + + // no save + return null; + } + + return toSave; + } + +} diff --git a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenServiceSupport.java b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenServiceSupport.java index da78c96..beb0dfa 100644 --- a/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenServiceSupport.java +++ b/pollen-services/src/main/java/org/chorem/pollen/services/service/PollenServiceSupport.java @@ -31,19 +31,7 @@ import com.google.common.collect.Multimap; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.chorem.pollen.persistence.PollenPersistenceContext; -import org.chorem.pollen.persistence.entity.ChoiceTopiaDao; -import org.chorem.pollen.persistence.entity.CommentTopiaDao; -import org.chorem.pollen.persistence.entity.FavoriteListMemberTopiaDao; -import org.chorem.pollen.persistence.entity.FavoriteListTopiaDao; -import org.chorem.pollen.persistence.entity.PollTopiaDao; -import org.chorem.pollen.persistence.entity.PollenPrincipalTopiaDao; -import org.chorem.pollen.persistence.entity.PollenUser; -import org.chorem.pollen.persistence.entity.PollenUserTopiaDao; -import org.chorem.pollen.persistence.entity.SessionTokenTopiaDao; -import org.chorem.pollen.persistence.entity.VoteToChoiceTopiaDao; -import org.chorem.pollen.persistence.entity.VoteTopiaDao; -import org.chorem.pollen.persistence.entity.VoterListMemberTopiaDao; -import org.chorem.pollen.persistence.entity.VoterListTopiaDao; +import org.chorem.pollen.persistence.entity.*; import org.chorem.pollen.services.PollenService; import org.chorem.pollen.services.PollenServiceContext; import org.chorem.pollen.services.bean.PollenBean; @@ -181,6 +169,10 @@ public abstract class PollenServiceSupport implements PollenService { return getPersistenceContext().getPollenPrincipalDao(); } + protected PollenResourceTopiaDao getPollenResourceDao() { + return getPersistenceContext().getPollenResourceDao(); + } + protected PollenUserTopiaDao getPollenUserDao() { return getPersistenceContext().getPollenUserDao(); } -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.
participants (1)
-
chorem.org scm