I looked at olingo source code and debugged their code. After much research, I was able to implement limited activities at Olingo.
, , X Y.
, , :
:
java ( ), CsdlAbstractEdmProvider CsdlEdmProvider,
getActions (...)
public static final String ACTION_EXECUTE_NAME = "Execute";
public static final FullQualifiedName ACTION_EXECUTE_FQN = new FullQualifiedName("StackOverflow", ACTION_EXECUTE_NAME);
@Override
public List<CsdlAction> getActions(FullQualifiedName actionName) throws ODataException {
if (actionName.equals(ACTION_EXECUTE_FQN)) {
final List<CsdlAction> actions = new ArrayList<CsdlAction>();
final CsdlAction action = new CsdlAction();
action.setName(ACTION_EXECUTE_FQN.getName());
action.setBound(true);
final List<CsdlParameter> parameters = new ArrayList<CsdlParameter>();
final CsdlParameter parameter = new CsdlParameter();
parameter.setName("Parameter1");
parameter.setType(X);
parameter.setNullable(true);
parameter.setCollection(false);
parameters.add(parameter);
action.setParameters(parameters);
action.setReturnType(new CsdlReturnType().setCollection(false).setType(Y));
actions.add(action);
return actions;
}
return null;
}
getSchemas (...) getActions (...).
@Override
public List<CsdlSchema> getSchemas() throws ODataException {
CsdlSchema schema = new CsdlSchema();
schema.setNamespace("Stackoverflow");
List<CsdlEntityType> entityTypes = new ArrayList<CsdlEntityType>();
entityTypes.add(getEntityType(X));
entityTypes.add(getEntityType(Y));
schema.setEntityTypes(entityTypes);
schema.setEntityContainer(getEntityContainer());
List<CsdlAction> actions = new ArrayList<CsdlAction>();
schema.setActions(actions);
actions.addAll(getActions(ACTION_EXECUTE_FQN));
List<CsdlSchema> schemas = new ArrayList<CsdlSchema>();
schemas.add(schema);
return schemas;
}
, , , ACTION_EXECUTE_FQN , X, Y.
:
. , , ActionEntityProcessor.
. , . ActionProcessors , .