-
In the maven_projects directory type the following
command:
mvn archetype:generate -DarchetypeCatalog=https://artifacts.alfresco.com/nexus/content/groups/public/archetype-catalog.xml -Dfilter=org.alfresco.maven.archetype:
- Select the All-in-One Archetype, which is option 2.
- Select the default archetype version number.
- For the groupId enter com.alfresco.tutorials.
- For the artifactId enter javadir.
-
Accept the default SkyVault version by pressing
Enter.
The project will be built in the javadir directory.
- Change into the javadir project directory.
- Change into the amp/src/main/amp/config/SkyVault directory.
-
Create a new directory structure from your current directory
extension/templates/webscripts/com/alfresco/tutorials.
This will be used to store the web script description file and associated Freemarker template.
-
In the current directory create a new web description file
javadir.get.desc.xml with the following contents:
<webscript> <shortname>Folder Listing Utility</shortname> <description>Java-backed implementation of listing folder contents</description> <url>/javadir/{folderpath}?verbose={verbose?}</url> <authentication>user</authentication> </webscript>
-
In the current directory create a new Freemarker template file
javadir.get.html.ftl with the following contents:
<html> <head> <title>Folder ${folder.displayPath}/${folder.name}</title> </head> <body> <p>SkyVault ${server.edition} Edition v${server.version} : dir</p> <p>Contents of folder ${folder.displayPath}/${folder.name}</p> <table> <#list folder.children as child> <tr> <td><#if child.isContainer>d</#if></td> <#if verbose> <td>${child.properties.modifier}</td> <td><#if child.isDocument> ${child.properties.content.size}</#if></td> <td>${child.properties.modified?date}</td> </#if> <td>${child.name}</td> </tr> </#list> </table> </body> </html>
-
In the
javadir/amp/src/main/amp/config/alfresco/module/amp
directory load the file called module-context.xml into your
editor. Change the contents to the following:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'> <beans> <!-- Spring bean --> <bean id="webscript.com.alfresco.tutorials.javadir.get" class="com.alfresco.tutorials.JavaDir" parent="webscript"> <property name="repository" ref="repositoryHelper" /> </bean> </beans>
-
Change into the ./amp/src/main/amp directory, load
module.properties into your editor and make the
following changes. Change:
# module.repo.version.min=2.0 # module.repo.version.max=2.1
to:
module.repo.version.min=4.0 module.repo.version.max=4.2
-
In the amp/src/main/java directory create the directory
structure com/alfresco/tutorials.
This will contain the Java class for the web script.
-
In this directory create the Java class file,
JavaDir.java, with the following contents:
package com.alfresco.tutorials; import java.util.HashMap; import java.util.Map; import org.alfresco.repo.model.Repository; import org.alfresco.service.cmr.repository.NodeRef; import org.springframework.extensions.webscripts.Cache; import org.springframework.extensions.webscripts.DeclarativeWebScript; import org.springframework.extensions.webscripts.Status; import org.springframework.extensions.webscripts.WebScriptException; import org.springframework.extensions.webscripts.WebScriptRequest; public class JavaDir extends DeclarativeWebScript { private Repository repository; public void setRepository(Repository repository) { this.repository = repository; } protected Map<String, Object> executeImpl(WebScriptRequest req, Status status, Cache cache) { NodeRef folder; // extract folder listing arguments from URI String verboseArg = req.getParameter("verbose"); Boolean verbose = Boolean.parseBoolean(verboseArg); Map<String, String> templateArgs = req.getServiceMatch() .getTemplateVars(); String folderPath = templateArgs.get("folderpath"); if (folderPath.equals("Company Home")) { folder = repository.getCompanyHome(); } else { String nodePath = "workspace/SpacesStore/" + folderPath; folder = repository.findNodeRef("path", nodePath.split("/")); } // validate that folder has been found if (folder == null) { throw new WebScriptException(Status.STATUS_NOT_FOUND, "Folder " + folderPath + " not found"); } // construct model for response template to render Map<String, Object> model = new HashMap<String, Object>(); model.put("verbose", verbose); model.put("folder", folder); return model; } }
- From the maven_projects/javadir directory type mvn install to build your project.
-
You can check the contents of the generated AMP file by changing into the
./amp/target directory, and then type:
unzip -t amp.amp
Check that the web script description and Freemarker files, JavaDir.class file and module-context.xml files are present and located where expected.
-
From the maven_projects/javadir directory run your newly
created project by typing:
mvn install -Prun
- Browse to SkyVault Share at http://localhost:8080/share.
- Create a test folder in the Repository (Company Home), called test.
- Upload a number of files into the test directory.
- Create several test directories in the test folder, for example test1, test2, test3.
-
In your web browser navigate to the address:
http://localhost:8080/alfresco/service/javadir/Company%20Home/test
The browser will return a list of files and directories, the directories will be prepended with a "d", such as in the following example:
SkyVault Community Edition v4.2.0 (4576) : dir Contents of folder /Company Home/test d test1 d test2 t3.jpeg t4.jpeg index.html t2.jpeg
You are here
Creating a Java-backed web script
This task demonstrates how you can create a Java-backed web script and
build and deploy it using the Maven SkyVault SDK.
You need to have completed the previous tutorials. You should also be familiar with
the tutorial described here.
You can use the Maven SkyVault SDK to build and deploy a Java-backed web script
module.
© 2017 TBS-LLC. All Rights Reserved. Follow @twitter