asnSet.getValueType().setRequired(true);
asnSet.getValueType().setValueFilterClass(valueFilterClass);
asnSet.getValueType().setValueTypeName(AsnValueType.VALUE_TYPENAME_FREE);
// value
AsnValue asnValue = new AsnValue();
asnValue.setValueType(asnSet.getValueType().duplicate());
// query a comment by assertion id
op = new AsnOperation(asnSet);
op.setHandlerClass("com.esri.gpt.server.assertion.handler.AsnCommentHandler");
op.setSubject(new AsnSubject(asnSet.getAssertionIdPrefix()));
op.setPredicate(new AsnPredicate(actionPfx+":query"));
op.setAuthPolicy(authForRead.duplicate());
ops.add(op);
// query comments associated with a resource
op = new AsnOperation(asnSet);
op.setHandlerClass("com.esri.gpt.server.assertion.handler.AsnCommentHandler");
op.setSubject(new AsnSubject(AsnConstants.SUBJECT_PREFIX_RESOURCEID));
op.setPredicate(new AsnPredicate(actionPfx+":query"));
op.setAuthPolicy(authForRead.duplicate());
ops.add(op);
// create
op = new AsnOperation(asnSet);
op.setHandlerClass("com.esri.gpt.server.assertion.handler.AsnCreateHandler");
op.setSubject(new AsnSubject(AsnConstants.SUBJECT_PREFIX_RESOURCEID));
op.setPredicate(new AsnPredicate(actionPfx+":create"));
op.getAuthPolicy().setMultiplePerUserSubjectPredicate(true);
op.setValue(asnValue.duplicate());
ops.add(op);
// update
op = new AsnOperation(asnSet);
op.setHandlerClass("com.esri.gpt.server.assertion.handler.AsnUpdateHandler");
op.setSubject(new AsnSubject(asnSet.getAssertionIdPrefix()));
op.setPredicate(new AsnPredicate(actionPfx+":update"));
op.setValue(asnValue.duplicate());
ops.add(op);
// delete
op = new AsnOperation(asnSet);
op.setHandlerClass("com.esri.gpt.server.assertion.handler.AsnDeleteHandler");