Custom Module Evaluator not working properly
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
01-21-2016 03:44 AM
Hi Folks,
After creating a custom module using <a href="http://docs.alfresco.com/5.1/tasks/dev-extensions-share-tutorials-add-menuitem-create-menu.html">this</a> tutorial I have created a custom module evaluator which should disable the module under certain space and show under certain, but I am not able to get it worked properly.
Here, I want to disable the country folder custom module if we are in space other than the document library space, but if I apply the custom evaluator it seems to hide it everywhere
Copying my custom evalutator and the webscript. Please help me out if anyone has any suggestion.
<strong>country-folder-extension.xml - Custom Module</strong>
<strong>CountryFolderModuleEvaluator.java - Custom Module Evaluator</strong>
<strong>countryCheck.get.desc.xml - Descriptor</strong>
<strong>ValidateParentForCountryFolder.java - Controller</strong>
<strong>countryCheck.get.json.ftl - View</strong>
Thanks
After creating a custom module using <a href="http://docs.alfresco.com/5.1/tasks/dev-extensions-share-tutorials-add-menuitem-create-menu.html">this</a> tutorial I have created a custom module evaluator which should disable the module under certain space and show under certain, but I am not able to get it worked properly.
Here, I want to disable the country folder custom module if we are in space other than the document library space, but if I apply the custom evaluator it seems to hide it everywhere
Copying my custom evalutator and the webscript. Please help me out if anyone has any suggestion.
<strong>country-folder-extension.xml - Custom Module</strong>
<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>
<strong>CountryFolderModuleEvaluator.java - Custom Module Evaluator</strong>
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; }}
<strong>countryCheck.get.desc.xml - Descriptor</strong>
<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>
<strong>ValidateParentForCountryFolder.java - Controller</strong>
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; }}
<strong>countryCheck.get.json.ftl - View</strong>
{"hasCorrectParentNode":"${hasCorrectParentNode?string}"}
Thanks
Labels:
- Labels:
-
Archive
2 REPLIES 2
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-03-2016 11:43 PM
Hello,
I am still not able to resolve the issue. Can anyone please help me out ???
I am still not able to resolve the issue. Can anyone please help me out ???

Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
07-05-2016 08:34 AM
Hello,
I'm also trying to conditionnally display elements in the "Create" menu and have been confronted to the same issue as yours. Indeed, everything is hidden. My evaluatoris called several times and for one item only, the condition is evaluated successfully but the menu item isn't displayed.
Have you find a solution?
Thanks
I'm also trying to conditionnally display elements in the "Create" menu and have been confronted to the same issue as yours. Indeed, everything is hidden. My evaluatoris called several times and for one item only, the condition is evaluated successfully but the menu item isn't displayed.
Have you find a solution?
Thanks
