“如何执行”;除非满足所有标准”;JAVA中的露天规则

“如何执行”;除非满足所有标准”;JAVA中的露天规则,java,action,alfresco,rule,web-scripting,Java,Action,Alfresco,Rule,Web Scripting,我想用Java创建一个Alfresco Webservice,它创建一个具有特定规则的文件夹。到目前为止,Web服务创建文件夹和规则。问题是,我想在我的规则中添加一个actionCondition,当您尝试在Alfresco Share中创建规则时,它的作用与“除非满足所有条件”相同 我想将所有文档移动到其他文件夹,除非此文档是HMTL 有一个 CompareMimeTypeEvaluator.class 但它执行“如果所有标准都满足”的操作,我想要的是相反的结果 我所做的是创建了一个比较器:

我想用Java创建一个Alfresco Webservice,它创建一个具有特定规则的文件夹。到目前为止,Web服务创建文件夹和规则。问题是,我想在我的规则中添加一个actionCondition,当您尝试在Alfresco Share中创建规则时,它的作用与“除非满足所有条件”相同

我想将所有文档移动到其他文件夹,除非此文档是HMTL

有一个

CompareMimeTypeEvaluator.class
但它执行“如果所有标准都满足”的操作,我想要的是相反的结果

我所做的是创建了一个比较器:

public class CompareMismatchEvaluator extends ActionConditionEvaluatorAbstractBase
{

private static Log logger = LogFactory.getLog(CompareMismatchEvaluator.class);

/**
 * Evaluator constants
 */
public static final String NAME = "compare-mime-type";
public static final String PARAM_PROPERTY = "property";
public static final String PARAM_VALUE = "value";

/**
 * 
 */
private static final String ERRID_NOT_A_CONTENT_TYPE = "compare_mime_type_evaluator.not_a_content_type";
private static final String ERRID_NO_PROPERTY_DEFINTION_FOUND = "compare_mime_type_evaluator.no_property_definition_found";

private NodeService nodeService; 

/**
 * @see org.alfresco.repo.action.evaluator.ActionConditionEvaluatorAbstractBase#evaluateImpl(org.alfresco.service.cmr.action.ActionCondition, org.alfresco.service.cmr.repository.NodeRef)
 */
@Override
public boolean evaluateImpl(ActionCondition actionCondition, NodeRef actionedUponNodeRef)
{
    QName propertyQName = (QName) actionCondition.getParameterValue(PARAM_PROPERTY);
    // Get the original value and the value to match
    Serializable propertyValue = nodeService.getProperty(actionedUponNodeRef, propertyQName);
    Serializable compareValue = actionCondition.getParameterValue(PARAM_VALUE);

    logger.debug("Comparing : " + propertyValue + " - - - " + compareValue);
    return !propertyValue.equals(compareValue);

}

/**
 * @see org.alfresco.repo.action.ParameterizedItemAbstractBase#addParameterDefinitions(java.util.List)
 */
@Override
protected void addParameterDefinitions(List<ParameterDefinition> paramList) 
{
    paramList.add(new ParameterDefinitionImpl(PARAM_PROPERTY, DataTypeDefinition.QNAME, false, getParamDisplayLabel(PARAM_PROPERTY)));
    paramList.add(new ParameterDefinitionImpl(PARAM_VALUE, DataTypeDefinition.ANY, true, getParamDisplayLabel(PARAM_VALUE), false, "ac-mimetypes"));                
}
公共类CompareMatchEvaluator扩展了ActionConditionEvaluatorAbstractBase
{
私有静态日志记录器=LogFactory.getLog(compareMatchEvaluator.class);
/**
*求值常数
*/
公共静态最终字符串NAME=“比较mime类型”;
公共静态最终字符串PARAM_PROPERTY=“PROPERTY”;
公共静态最终字符串PARAM_VALUE=“VALUE”;
/**
* 
*/
私有静态最终字符串ERRID\u NOT\u A\u CONTENT\u TYPE=“compare\u mime\u TYPE\u evaluator.NOT\u CONTENT\u TYPE”;
私有静态最终字符串ERRID\u NO\u PROPERTY\u definition\u FOUND=“compare\u mime\u type\u evaluator.NO\u PROPERTY\u definition”;
专用节点服务节点服务;
/**
*@见org.alfresco.repo.action.evaluator.ActionConditionEvaluatorAbstractBase#evaluateImpl(org.alfresco.service.cmr.action.ActionCondition,org.alfresco.service.cmr.repository.NodeRef)
*/
@凌驾
公共布尔值evaluateImpl(ActionCondition ActionCondition,NodeRef actionedUponNodeRef)
{
QName属性QName=(QName)actionCondition.getParameterValue(PARAM_属性);
//获取原始值和要匹配的值
Serializable propertyValue=nodeService.getProperty(actionedUponNodeRef,propertyQName);
Serializable compareValue=actionCondition.getParameterValue(参数值);
调试(“比较:“+propertyValue+”--“+compareValue”);
return!propertyValue.equals(compareValue);
}
/**
*@see org.alfresco.repo.action.ParameterizeEditeMabstractBase#addParameterDefinitions(java.util.List)
*/
@凌驾
受保护的void addParameterDefinitions(列表参数列表)
{
添加(新参数定义impl(PARAM_属性,DataTypeDefinition.QNAME,false,getParamDisplayLabel(PARAM_属性));
添加(新参数定义impl(PARAM_值,DataTypeDefinition.ANY,true,getParamDisplayLabel(PARAM_值),false,“ac mimetypes”);
}
}

但是这个比较器给出了与compareMetypeEvaluator.class相同的结果。
你知道怎么做吗?

我找到了解决办法。您不必创建自己的比较器,只需使用CompareMetypeEvaluator.class并将actionCondition中的布尔参数设置为true:

ActionCondition actionCondition = actionService
            .createActionCondition(CompareMimeTypeEvaluator.NAME);

    Map<String, Serializable> conditionParameters = new HashMap<String, Serializable>();
    conditionParameters.put(CompareMimeTypeEvaluator.PARAM_PROPERTY,
            ContentModel.PROP_CONTENT);
    conditionParameters.put(CompareMimeTypeEvaluator.PARAM_VALUE,
            MimetypeMap.MIMETYPE_HTML);
    actionCondition.setInvertCondition(true);
    actionCondition.setParameterValues(conditionParameters);
    compositeAction.addActionCondition(actionCondition);
这将对所有项目执行运行操作,除非该项目是HTML文档

 actionCondition.setInvertCondition(true);