swf transformer (installed swf tool requied), minor refactor of thumbnail service, thumbnailRegistry created (smallImage and webpreview thumbnail types added), start of thumbnail JS API (extensions to ScriptNode) and POST URL to create thumbnails

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@9259 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Roy Wetherall
2008-05-23 21:19:50 +00:00
parent 7cf8c15ce2
commit e6797b7cd1
20 changed files with 308 additions and 553 deletions

View File

@@ -18,4 +18,5 @@ for (userName in memberships)
// Pass the information to the template
model.site = site;
model.memberships = memberships;
model.people = peopleList;
model.people = peopleList;

View File

@@ -1,16 +1,21 @@
// Get the shortname
var shortName = url.extension;
// Get the site
var site = siteService.getSite(shortName);
if (site != null)
function main()
{
// Delete the site
site.deleteSite();
// Get the shortname
var shortName = url.extension;
// Get the site
var site = siteService.getSite(shortName);
if (site != null)
{
// Delete the site
site.deleteSite();
}
else
{
// Return 404
status.setCode(404, "The site " + shortName + " does not exist");
return;
}
}
else
{
// Return 404
status.code = 404;
status.redirect = true;
}
main();

View File

@@ -1,17 +1,22 @@
// Get the shortname
var shortName = url.extension;
// Get the site
var site = siteService.getSite(shortName);
if (site != null)
function main()
{
// Pass the site to the template
model.site = site;
// Get the shortname
var shortName = url.extension;
// Get the site
var site = siteService.getSite(shortName);
if (site != null)
{
// Pass the site to the template
model.site = site;
}
else
{
// Return 404
status.setCode(404, "Site " + shortName + " does not exist");
return;
}
}
else
{
// Return 404
status.code = 404;
status.redirect = true;
}
main();

View File

@@ -1,21 +1,26 @@
// Get the site
var shortName = url.extension;
var site = siteService.getSite(shortName);
if (site != null)
function main()
{
// Update the sites details
site.title = json.get("title");
site.description = json.get("description");
site.isPublic = json.getBoolean("isPublic");
site.save();
// Get the site
var shortName = url.extension;
var site = siteService.getSite(shortName);
// Pass the model to the template
model.site = site;
if (site != null)
{
// Update the sites details
site.title = json.get("title");
site.description = json.get("description");
site.isPublic = json.getBoolean("isPublic");
site.save();
// Pass the model to the template
model.site = site;
}
else
{
// Return 404
status.setCode(status.STATUS_NOT_FOUND, "Site " + shortName + " does not exist");
return;
}
}
else
{
// Return 404
status.code = 404;
status.redirect = true;
}
main();

View File

@@ -4,18 +4,14 @@ function main()
var shortName = json.get("shortName");
if (shortName == null || shortName.length == 0)
{
status.code = 400;
status.message = "Short name missing when creating site.";
status.redirect = true;
status.setCode(status.STATUS_BAD_REQUEST, "Short name missing when creating site");
return;
}
var sitePreset = json.get("sitePreset");
if (shortName == null || shortName.length == 0)
{
status.code = 400;
status.message = "Site preset missing when creating site.";
status.redirect = true;
status.setCode(status.STATUS_BAD_REQUEST, "Site preset missing when creating site");
return;
}

View File

@@ -0,0 +1,9 @@
<webscript>
<shortname>Thumbnails</shortname>
<description>Delete a thumbnail for a content resource</description>
<url>/api/node/{store_type}/{store_id}/{id}/content{property?}/thumbnails/{thumbnailname}</url>
<url>/api/path/{store_type}/{store_id}/{id}/content{property?}/thumbnails/{thumbnailname}</url>
<format default="json"/>
<authentication>guest</authentication>
<transaction>required</transaction>
</webscript>

View File

@@ -0,0 +1,9 @@
<webscript>
<shortname>Thumbnails</shortname>
<description>Create a new thumbnail for a content resource</description>
<url>/api/node/{store_type}/{store_id}/{id}/content{property?}/thumbnails</url>
<url>/api/path/{store_type}/{store_id}/{id}/content{property?}/thumbnails</url>
<format default="json"/>
<authentication>guest</authentication>
<transaction>required</transaction>
</webscript>

View File

@@ -0,0 +1,29 @@
function main()
{
// Get the node from the URL
var pathSegments = url.match.split("/");
var reference = [ url.templateArgs.store_type, url.templateArgs.store_id ].concat(url.templateArgs.id.split("/"));
var node = search.findNode(pathSegments[2], reference);
// 404 if the node to thumbnail is not found
if (node == null)
{
status.setCode(status.STATUS_NOT_FOUND, "The thumbnail source node could not be found");
return;
}
// Get the thumbnail name from the JSON content
var thumbnailName = pathSegments[8];
// 404 if no thumbnail name found
if (thumbnailName == null)
{
status.setCode(status.STATUS_NOT_FOUND, "Thumbnail name was not provided");
}
// Get the thumbnail ...
}
main();

View File

@@ -0,0 +1,9 @@
<webscript>
<shortname>Thumbnails</shortname>
<description>Update a thumbnail for a content resource</description>
<url>/api/node/{store_type}/{store_id}/{id}/content{property?}/thumbnails/{thumbnailname}</url>
<url>/api/path/{store_type}/{store_id}/{id}/content{property?}/thumbnails/{thumbnailname}</url>
<format default="json"/>
<authentication>guest</authentication>
<transaction>required</transaction>
</webscript>

View File

@@ -0,0 +1,9 @@
<webscript>
<shortname>Thumbnails</shortname>
<description>Get a named thumbnail for a content resource</description>
<url>/api/node/{store_type}/{store_id}/{id}/content{property?}/thumbnails/{thumbnailname}</url>
<url>/api/path/{store_type}/{store_id}/{id}/content{property?}/thumbnails/{thumbnailname}</url>
<format default=""/>
<authentication>guest</authentication>
<transaction>required</transaction>
</webscript>

View File

@@ -0,0 +1,9 @@
<webscript>
<shortname>Thumbnails</shortname>
<description>Create a new thumbnail for a content resource</description>
<url>/api/node/{store_type}/{store_id}/{id}/content{property}/thumbnails</url>
<url>/api/path/{store_type}/{store_id}/{id}/content{property}/thumbnails</url>
<format default="json"/>
<authentication>guest</authentication>
<transaction>required</transaction>
</webscript>

View File

@@ -0,0 +1,40 @@
function main()
{
// Get the node from the URL
var pathSegments = url.match.split("/");
var reference = [ url.templateArgs.store_type, url.templateArgs.store_id ].concat(url.templateArgs.id.split("/"));
var node = search.findNode(pathSegments[2], reference);
// 404 if the node to thumbnail is not found
if (node == null)
{
status.setCode(status.STATUS_NOT_FOUND, "The thumbnail source node could not be found");
return;
}
// Get the thumbnail name from the JSON content
var thumbnailName = null;
if (json.isNull("thumbnailName") == false)
{
thumbnailName = json.get("thumbnailName");
}
// 400 if no thumbnail name found
if (thumbnailName == null)
{
status.setCode(status.STATUS_BAD_REQUEST, "Thumbnail name was not provided");
}
// TODO double check that the thumbnail name is valid
// Create the thumbnail
var thumbnail = node.createThumbnail(thumbnailName);
// Prep the model
model.node = node;
model.thumbnailName = thumbnailName;
model.thumbnail = thumbnail;
}
main();

View File

@@ -0,0 +1,4 @@
{
"thumbnailName" : "${thumbnailName}",
"url" : "${url.serviceContext}/api/node/${node.storeType}/${node.storeId}/${node.id}/content/thumbnails/${thumbnailName}"
}

View File

@@ -77,18 +77,7 @@
<!-- Web Script Repository (Server-Tier) Container -->
<!-- -->
<bean id="webscripts.repo" class="org.alfresco.repo.web.scripts.Repository">
<property name="transactionHelper" ref="retryingTransactionHelper" />
<property name="namespaceService" ref="namespaceService" />
<property name="nodeService" ref="nodeService" />
<property name="personService" ref="personService" />
<property name="fileFolderService" ref="fileFolderService" />
<property name="searchService" ref="searchService" />
<property name="tenantDeployerService" ref="tenantAdminService" />
<property name="avmService" ref="AVMService" />
<property name="companyHomeStore"><value>${spaces.store}</value></property>
<property name="companyHomePath"><value>/${spaces.company_home.childname}</value></property>
</bean>
<bean id="webscripts.repo.imageresolver" class="org.alfresco.repo.web.scripts.RepositoryImageResolver" />
@@ -114,7 +103,7 @@
<property name="transactionHelper" ref="retryingTransactionHelper" />
<property name="permissionService" ref="permissionService" />
<property name="authorityService" ref="authorityService" />
<property name="repository" ref="webscripts.repo" />
<property name="repository" ref="repositoryHelper" />
<property name="repositoryImageResolver" ref="webscripts.repo.imageresolver" />
<property name="templateProcessor" ref="webscripts.repo.templateprocessor" />
<property name="scriptProcessor" ref="webscripts.repo.scriptprocessor" />
@@ -199,7 +188,7 @@
<!-- Content Retrieval -->
<bean id="webscript.org.alfresco.repository.store.content.get" class="org.alfresco.repo.web.scripts.bean.ContentGet" parent="webscript">
<property name="repository" ref="webscripts.repo" />
<property name="repository" ref="repositoryHelper" />
<property name="namespaceService" ref="NamespaceService" />
<property name="permissionService" ref="PermissionService" />
<property name="nodeService" ref="NodeService" />

View File

@@ -1,484 +0,0 @@
/*
* Copyright (C) 2005-2008 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* As a special exception to the terms and conditions of version 2.0 of
* the GPL, you may redistribute this Program in connection with Free/Libre
* and Open Source Software ("FLOSS") applications as described in Alfresco's
* FLOSS exception. You should have recieved a copy of the text describing
* the FLOSS exception, and it is also available here:
* http://www.alfresco.com/legal/licensing"
*/
package org.alfresco.repo.web.scripts;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.avm.AVMNodeConverter;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
import org.alfresco.repo.tenant.TenantDeployer;
import org.alfresco.repo.tenant.TenantDeployerService;
import org.alfresco.repo.transaction.RetryingTransactionHelper;
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
import org.alfresco.service.cmr.avm.AVMNodeDescriptor;
import org.alfresco.service.cmr.avm.AVMService;
import org.alfresco.service.cmr.model.FileFolderService;
import org.alfresco.service.cmr.model.FileInfo;
import org.alfresco.service.cmr.model.FileNotFoundException;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.cmr.search.SearchService;
import org.alfresco.service.cmr.security.PersonService;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.util.AbstractLifecycleBean;
import org.alfresco.web.scripts.WebScriptException;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
/**
* Provision of Repository Context
*
* @author davidc
*/
public class Repository implements ApplicationContextAware, ApplicationListener, TenantDeployer
{
private ProcessorLifecycle lifecycle = new ProcessorLifecycle();
// dependencies
private RetryingTransactionHelper retryingTransactionHelper;
private NamespaceService namespaceService;
private SearchService searchService;
private NodeService nodeService;
private FileFolderService fileFolderService;
private PersonService personService;
private AVMService avmService;
private TenantDeployerService tenantDeployerService;
// company home
private StoreRef companyHomeStore;
private String companyHomePath;
private Map<String, NodeRef> companyHomeRefs;
/**
* Sets the Company Home Store
*
* @param companyHomeStore
*/
public void setCompanyHomeStore(String companyHomeStore)
{
this.companyHomeStore = new StoreRef(companyHomeStore);
}
/**
* Sets the Company Home Path
*
* @param companyHomePath
*/
public void setCompanyHomePath(String companyHomePath)
{
this.companyHomePath = companyHomePath;
}
/**
* Sets helper that provides transaction callbacks
*/
public void setTransactionHelper(RetryingTransactionHelper retryingTransactionHelper)
{
this.retryingTransactionHelper = retryingTransactionHelper;
}
/**
* Sets the namespace service
*
* @param namespaceService
*/
public void setNamespaceService(NamespaceService namespaceService)
{
this.namespaceService = namespaceService;
}
/**
* Sets the search service
*
* @param searchService
*/
public void setSearchService(SearchService searchService)
{
this.searchService = searchService;
}
/**
* Sets the node service
*
* @param nodeService
*/
public void setNodeService(NodeService nodeService)
{
this.nodeService = nodeService;
}
/**
* Sets the file folder service
*
* @param nodeService
*/
public void setFileFolderService(FileFolderService fileFolderService)
{
this.fileFolderService = fileFolderService;
}
/**
* Sets the person service
*
* @param personService
*/
public void setPersonService(PersonService personService)
{
this.personService = personService;
}
/**
* Sets the tenant deployer service
*
* @param tenantDeployerService
*/
public void setTenantDeployerService(TenantDeployerService tenantDeployerService)
{
this.tenantDeployerService = tenantDeployerService;
}
/**
* Sets the AVM service
*
* @param avmService
*/
public void setAvmService(AVMService avmService)
{
this.avmService = avmService;
}
/* (non-Javadoc)
* @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext)
*/
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException
{
lifecycle.setApplicationContext(applicationContext);
}
/* (non-Javadoc)
* @see org.springframework.context.ApplicationListener#onApplicationEvent(org.springframework.context.ApplicationEvent)
*/
public void onApplicationEvent(ApplicationEvent event)
{
lifecycle.onApplicationEvent(event);
}
/**
* Hooks into Spring Application Lifecycle
*/
private class ProcessorLifecycle extends AbstractLifecycleBean
{
@Override
protected void onBootstrap(ApplicationEvent event)
{
initContext();
}
@Override
protected void onShutdown(ApplicationEvent event)
{
}
}
/**
* Initialise Repository Context
*/
protected void initContext()
{
tenantDeployerService.register(this);
if (companyHomeRefs == null)
{
companyHomeRefs = new HashMap<String, NodeRef>(1);
}
getCompanyHome();
}
/**
* Gets the root home of the company home store
*
* @return root node ref
*/
public NodeRef getRootHome()
{
return nodeService.getRootNode(companyHomeStore);
}
/**
* Gets the Company Home
*
* @return company home node ref
*/
public NodeRef getCompanyHome()
{
String tenantDomain = tenantDeployerService.getCurrentUserDomain();
NodeRef companyHomeRef = companyHomeRefs.get(tenantDomain);
if (companyHomeRef == null)
{
companyHomeRef = AuthenticationUtil.runAs(new RunAsWork<NodeRef>()
{
public NodeRef doWork() throws Exception
{
return retryingTransactionHelper.doInTransaction(new RetryingTransactionCallback<NodeRef>()
{
public NodeRef execute() throws Exception
{
List<NodeRef> refs = searchService.selectNodes(nodeService.getRootNode(companyHomeStore), companyHomePath, null, namespaceService, false);
if (refs.size() != 1)
{
throw new IllegalStateException("Invalid company home path: " + companyHomePath + " - found: " + refs.size());
}
return refs.get(0);
}
});
}
}, AuthenticationUtil.getSystemUserName());
companyHomeRefs.put(tenantDomain, companyHomeRef);
}
return companyHomeRef;
}
/**
* Gets the currently authenticated person
*
* @return person node ref
*/
public NodeRef getPerson()
{
NodeRef person = null;
String currentUserName = AuthenticationUtil.getCurrentUserName();
if (personService.personExists(currentUserName))
{
person = personService.getPerson(currentUserName);
}
return person;
}
/**
* Gets the user home of the currently authenticated person
*
* @param person person
* @return user home of person
*/
public NodeRef getUserHome(NodeRef person)
{
return (NodeRef)nodeService.getProperty(person, ContentModel.PROP_HOMEFOLDER);
}
/**
* Helper to convert a Web Script Request URL to a Node Ref
*
* 1) Node - {store_type}/{store_id}/{node_id}
*
* Resolve to node via its Node Reference.
*
* 2) Path - {store_type}/{store_id}/{path}
*
* Resolve to node via its display path.
*
* 3) AVM Path - {store_id}/{path}
*
* Resolve to AVM node via its display path
*
* 4) QName - {store_type}/{store_id}/{child_qname_path} TODO: Implement
*
* Resolve to node via its child qname path.
*
* @param referenceType one of node, path, avmpath or qname
* @return reference array of reference segments (as described above for each reference type)
*/
public NodeRef findNodeRef(String referenceType, String[] reference)
{
NodeRef nodeRef = null;
if (referenceType.equals("avmpath"))
{
if (reference.length == 0)
{
throw new WebScriptException(HttpServletResponse.SC_BAD_REQUEST, "Reference " + Arrays.toString(reference) + " is not properly formed");
}
String path = reference[0] + ":/";
if (reference.length > 1)
{
Object[] pathElements = ArrayUtils.subarray(reference, 1, reference.length);
path += StringUtils.join(pathElements, "/");
}
AVMNodeDescriptor nodeDesc = avmService.lookup(-1, path);
if (nodeDesc != null)
{
nodeRef = AVMNodeConverter.ToNodeRef(-1, path);
}
}
else
{
// construct store reference
if (reference.length < 3)
{
throw new WebScriptException(HttpServletResponse.SC_BAD_REQUEST, "Reference " + Arrays.toString(reference) + " is not properly formed");
}
StoreRef storeRef = new StoreRef(reference[0], reference[1]);
if (nodeService.exists(storeRef))
{
if (referenceType.equals("node"))
{
// find the node the rest of the path is relative to
NodeRef relRef = new NodeRef(storeRef, reference[2]);
if (nodeService.exists(relRef))
{
// are there any relative path elements to process?
if (reference.length == 3 || reference.length == 4)
{
// just the NodeRef can be specified
nodeRef = relRef;
}
else
{
// process optional path elements
List<String> paths = new ArrayList<String>(reference.length - 3);
for (int i=3; i<reference.length; i++)
{
paths.add(reference[i]);
}
try
{
NodeRef parentRef = nodeService.getPrimaryParent(relRef).getParentRef();
FileInfo fileInfo = fileFolderService.resolveNamePath(parentRef, paths);
nodeRef = fileInfo.getNodeRef();
}
catch (FileNotFoundException e)
{
// NOTE: return null node ref
}
}
}
}
else if (referenceType.equals("path"))
{
// NOTE: special case for avm based path
if (reference[0].equals(StoreRef.PROTOCOL_AVM))
{
String path = reference[1] + ":/";
if (reference.length > 2)
{
Object[] pathElements = ArrayUtils.subarray(reference, 2, reference.length);
path += StringUtils.join(pathElements, "/");
}
AVMNodeDescriptor nodeDesc = avmService.lookup(-1, path);
if (nodeDesc != null)
{
nodeRef = AVMNodeConverter.ToNodeRef(-1, path);
}
}
else
{
// TODO: Allow a root path to be specified - for now, hard-code to Company Home
//NodeRef rootNodeRef = nodeService.getRootNode(storeRef);
NodeRef rootNodeRef = getCompanyHome();
if (reference.length == 3)
{
nodeRef = rootNodeRef;
}
else
{
String[] path = new String[reference.length - /*2*/3];
System.arraycopy(reference, /*2*/3, path, 0, path.length);
try
{
FileInfo fileInfo = fileFolderService.resolveNamePath(rootNodeRef, Arrays.asList(path));
nodeRef = fileInfo.getNodeRef();
}
catch (FileNotFoundException e)
{
// NOTE: return null node ref
}
}
}
}
else
{
// TODO: Implement 'qname' style
throw new WebScriptException(HttpServletResponse.SC_BAD_REQUEST, "Web Script Node URL specified an invalid reference style of '" + referenceType + "'");
}
}
}
return nodeRef;
}
/* (non-Javadoc)
* @see org.alfresco.repo.tenant.TenantDeployer#onEnableTenant()
*/
public void onEnableTenant()
{
init();
}
/* (non-Javadoc)
* @see org.alfresco.repo.tenant.TenantDeployer#onDisableTenant()
*/
public void onDisableTenant()
{
destroy();
}
/* (non-Javadoc)
* @see org.alfresco.repo.tenant.TenantDeployer#init()
*/
public void init()
{
initContext();
}
/* (non-Javadoc)
* @see org.alfresco.repo.tenant.TenantDeployer#destroy()
*/
public void destroy()
{
companyHomeRefs.remove(tenantDeployerService.getCurrentUserDomain());
}
}

View File

@@ -31,6 +31,7 @@ import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import org.alfresco.repo.cache.SimpleCache;
import org.alfresco.repo.model.Repository;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.tenant.TenantDeployer;
import org.alfresco.repo.tenant.TenantDeployerService;

View File

@@ -35,7 +35,7 @@ import javax.servlet.http.HttpServletResponse;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.content.MimetypeMap;
import org.alfresco.repo.web.scripts.Repository;
import org.alfresco.repo.model.Repository;
import org.alfresco.service.cmr.repository.ContentIOException;
import org.alfresco.service.cmr.repository.ContentReader;
import org.alfresco.service.cmr.repository.ContentService;

View File

@@ -0,0 +1,119 @@
/*
* Copyright (C) 2005-2007 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* As a special exception to the terms and conditions of version 2.0 of
* the GPL, you may redistribute this Program in connection with Free/Libre
* and Open Source Software ("FLOSS") applications as described in Alfresco's
* FLOSS exception. You should have recieved a copy of the text describing
* the FLOSS exception, and it is also available here:
* http://www.alfresco.com/legal/licensing"
*/
package org.alfresco.repo.web.scripts.thumbnail;
import java.io.InputStream;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.content.MimetypeMap;
import org.alfresco.repo.model.Repository;
import org.alfresco.repo.web.scripts.BaseWebScriptTest;
import org.alfresco.service.cmr.model.FileFolderService;
import org.alfresco.service.cmr.model.FileInfo;
import org.alfresco.service.cmr.repository.ContentService;
import org.alfresco.service.cmr.repository.ContentWriter;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.util.GUID;
import org.json.JSONObject;
import org.springframework.mock.web.MockHttpServletResponse;
/**
* Unit test to test thumbnail web script API
*
* @author Roy Wetherall
*/
public class ThumbnailServiceTest extends BaseWebScriptTest
{
private NodeRef testRoot;
private NodeRef pdfNode;
private NodeRef jpgNode;
private NodeService nodeService;
private FileFolderService fileFolderService;
private ContentService contentService;
private Repository repositoryHelper;
@Override
protected void setUp() throws Exception
{
super.setUp();
this.nodeService = (NodeService)getServer().getApplicationContext().getBean("NodeService");
this.fileFolderService = (FileFolderService)getServer().getApplicationContext().getBean("FileFolderService");
this.contentService = (ContentService)getServer().getApplicationContext().getBean("ContentService");
this.repositoryHelper = (Repository)getServer().getApplicationContext().getBean("repositoryHelper");
this.testRoot = this.repositoryHelper.getCompanyHome();
// Get test content
InputStream pdfStream = ThumbnailServiceTest.class.getClassLoader().getResourceAsStream("org/alfresco/repo/web/scripts/thumbnail/test_doc.pdf");
assertNotNull(pdfStream);
InputStream jpgStream = ThumbnailServiceTest.class.getClassLoader().getResourceAsStream("org/alfresco/repo/web/scripts/thumbnail/test_image.jpg");
assertNotNull(jpgStream);
String guid = GUID.generate();
// Create new nodes and set test content
FileInfo fileInfoPdf = this.fileFolderService.create(this.testRoot, "test_doc" + guid + ".pdf", ContentModel.TYPE_CONTENT);
this.pdfNode = fileInfoPdf.getNodeRef();
ContentWriter contentWriter = this.contentService.getWriter(fileInfoPdf.getNodeRef(), ContentModel.PROP_CONTENT, true);
contentWriter.setEncoding("UTF-8");
contentWriter.setMimetype(MimetypeMap.MIMETYPE_PDF);
contentWriter.putContent(pdfStream);
FileInfo fileInfoJpg = this.fileFolderService.create(this.testRoot, "test_image" + guid + ".jpg", ContentModel.TYPE_CONTENT);
this.jpgNode = fileInfoJpg.getNodeRef();
contentWriter = this.contentService.getWriter(fileInfoJpg.getNodeRef(), ContentModel.PROP_CONTENT, true);
contentWriter.setEncoding("UTF-8");
contentWriter.setMimetype(MimetypeMap.MIMETYPE_IMAGE_JPEG);
contentWriter.putContent(jpgStream);
}
@Override
protected void tearDown() throws Exception
{
super.tearDown();
}
public void testCreateThumbnail() throws Exception
{
String url = "/api/node/" + pdfNode.getStoreRef().getProtocol() + "/" + pdfNode.getStoreRef().getIdentifier() + "/" + pdfNode.getId() + "/content/thumbnails";
System.out.println(url);
JSONObject tn = new JSONObject();
tn.put("thumbnailName", "webpreview");
System.out.println(tn.toString());
MockHttpServletResponse response = this.postRequest(url, 200, tn.toString(), "application/json");
//JSONObject result = new JSONObject(response.getContentAsString());
System.out.println(response.getContentAsString());
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB