01-21-2016 03:44 AM
<extension>
<modules>
<!– This module is dependent on the custom content model setup in the
repo-amp module –>
<module>
<id>Add a Goyal Brothers Country Folder option to Create… menu in
DocLib
</id>
<!– Use this to automatically apply the evaluator for this module –>
<evaluator type="country.folder.module.evaluator">
<params>
<apply>true</apply>
</params>
</evaluator>
<version>1.0</version>
<auto-deploy>true</auto-deploy>
<configurations>
<config evaluator="string-compare" condition="DocumentLibrary">
<create-content>
<content id="goyal-brothers-country-folder" label="prop.evgb_countryFolder"
icon="folder" type="pagelink">
<param name="page">create-content?destination={nodeRef}&itemId=evgb:goyalBrothersCountryFol
</param>
</content>
</create-content>
</config>
<config evaluator="model-type" condition="evgb:goyalBrothersCountryFol">
<forms>
<form>
<field-visibility>
<show id="cm:name" />
</field-visibility>
<appearance>
<field id="cm:name" label-id="prop.evgb_country">
<control>
<control-param name="maxLength">255</control-param>
</control>
</field>
</appearance>
</form>
</forms>
</config>
</configurations>
</module>
</modules>
</extension>
import java.util.Map;
import org.alfresco.error.AlfrescoRuntimeException;
import org.apache.log4j.Logger;
import org.json.JSONException;
import org.springframework.extensions.surf.RequestContext;
import org.springframework.extensions.surf.ServletUtil;
import org.springframework.extensions.surf.exception.ConnectorServiceException;
import org.springframework.extensions.surf.extensibility.ExtensionModuleEvaluator;
import org.springframework.extensions.surf.support.ThreadLocalRequestContext;
import org.springframework.extensions.webscripts.Status;
import org.springframework.extensions.webscripts.connector.Connector;
import org.springframework.extensions.webscripts.connector.Response;
public class CountryFolderModuleEvaluator implements ExtensionModuleEvaluator {
private Logger logger = Logger
.getLogger(CountryFolderModuleEvaluator.class);
@Override
public boolean applyModule(RequestContext context,
Map<String, String> evaluationProperties) {
if (logger.isDebugEnabled()) {
logger.debug("******************* context.getUri() : "
+ context.getUri() + " *******************");
}
String spaceUri = context.getUri();
int indexOfDocLib = spaceUri.lastIndexOf("/") + 1;
String docLib = spaceUri.substring(indexOfDocLib);
return hasCorrectParentType(docLib);
}
private boolean hasCorrectParentType(String docLib) {
if (logger.isDebugEnabled()) {
logger.debug("******************* Inside hasCorrectParentType() *******************");
}
Boolean result = false;
try {
final RequestContext rc = ThreadLocalRequestContext
.getRequestContext();// get request context
final String userId = rc.getUserId();
final Connector conn = rc.getServiceRegistry()
.getConnectorService()
.getConnector("alfresco", userId, ServletUtil.getSession());// get
// connector
// custom repository webscript which checks if noderef has given
// parent type or not
final String url = "/node/parentType/country?spaceName=" + docLib;
if (logger.isDebugEnabled()) {
logger.debug("******************* Calling countryCheck Webscript; url: "
+ url + " *******************");
}
final Response response = conn.call(url);// get response
// make sure we are getting valid esponse
if (Status.STATUS_OK == response.getStatus().getCode()) {
final org.json.JSONObject scriptResponse = new org.json.JSONObject(
response.getResponse());
result = scriptResponse.getBoolean("hasCorrectParentNode");
if (logger.isDebugEnabled()) {
logger.debug("******************* Printing result from webscript - "
+ result + " *******************");
}
}
} catch (final ConnectorServiceException e) {
throw new AlfrescoRuntimeException("Failed to connect repository: "
+ e.getMessage());
} catch (final JSONException e) {
throw new AlfrescoRuntimeException("Failed to parse JSON string: "
+ e.getMessage());
}
return result;
}
@Override
public String[] getRequiredProperties() {
return null;
}
}
<webscript>
<shortname>Country Folder creation check</shortname>
<description>Check if folder node creation is valid or not</description>
<url>/node/parentType/country?currNodeRef={currNodeRef}</url>
<format default="json">argument</format>
<authentication>user</authentication>
</webscript>
import java.util.HashMap;
import java.util.Map;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.cmr.search.ResultSet;
import org.alfresco.service.cmr.search.ResultSetRow;
import org.alfresco.service.cmr.search.SearchParameters;
import org.alfresco.service.cmr.search.SearchService;
import org.apache.log4j.Logger;
import org.springframework.extensions.webscripts.DeclarativeWebScript;
import org.springframework.extensions.webscripts.Status;
import org.springframework.extensions.webscripts.WebScriptRequest;
public class ValidateParentForCountryFolder extends DeclarativeWebScript {
private SearchService searchService;
private Logger logger = Logger.getLogger(ValidateParentForCountryFolder.class);
@Override
protected Map<String, Object> executeImpl(WebScriptRequest req,
Status status) {
Boolean hasCorrectParentNode = true;
Map<String, Object> model = new HashMap<String, Object>();
String docLibName = req.getParameter("spaceName");
System.out.println("******************* stateName : "+ docLibName +" *******************");
// Make sure we are getting value
if (docLibName.equals("null")) {
status.setCode(400, "Required data has not been provided");
status.setRedirect(true);
} else {
//find the node with the given name
String query = "TYPE:\"cm:folder\" AND @cm\\:name:"+docLibName;
SearchParameters sp = new SearchParameters();
sp.addStore(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE);
sp.setLanguage(SearchService.LANGUAGE_LUCENE);
sp.setQuery(query);
ResultSet results = null;
try
{
results = searchService.query(sp);
for(ResultSetRow row : results)
{
NodeRef currentNodeRef = row.getNodeRef();
if (logger.isDebugEnabled()) {
logger.debug("######################## currentNodeRef = " + currentNodeRef + "########################");
}
}
}
finally
{
if(results != null)
{
results.close();
}
}
if (results.length() == 0) {
hasCorrectParentNode = false;
}
}
model.put("hasCorrectParentNode", hasCorrectParentNode);
return model;
}
public void setSearchService(SearchService searchService) {
this.searchService = searchService;
}
}
{
"hasCorrectParentNode":"${hasCorrectParentNode?string}"
}
02-03-2016 11:43 PM
07-05-2016 08:34 AM
Tags
Find what you came for
We want to make your experience in Hyland Connect as valuable as possible, so we put together some helpful links.