Skip to content

Commit 8ed73b0

Browse files
committed
FunctionExecutor is now an optional interface
1 parent ab0e314 commit 8ed73b0

File tree

5 files changed

+40
-37
lines changed

5 files changed

+40
-37
lines changed

janos-api/src/main/java/org/apache/olingo/odata2/janos/processor/api/datasource/FunctionExecutor.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,18 @@
1919
package org.apache.olingo.odata2.janos.processor.api.datasource;
2020

2121
/**
22+
* A FunctionExecutor defines a class which is used to execute a function and
23+
* wants to get the DataStoreManager.
24+
*
2225
* Created by mibo on 23.08.15.
2326
*/
2427
public interface FunctionExecutor {
2528

29+
/**
30+
* Init method must be called from a FunctionSource which prepare
31+
* a class which has methods with @EdmFunctionImport annotation
32+
*
33+
* @param dataStore data store manager which is used by DataSources
34+
*/
2635
void init(DataStoreManager dataStore);
2736
}

janos-api/src/main/java/org/apache/olingo/odata2/janos/processor/api/datasource/FunctionSource.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,14 @@
2727
import java.util.Map;
2828

2929
/**
30+
* A FunctionSource contains functionality to execute functions for
31+
* given EdmFunctionImports.
32+
*
3033
* Created by mibo on 23.08.15.
3134
*/
3235
public interface FunctionSource {
3336

34-
FunctionExecutor getFunctionExecutor(String functionName);
35-
36-
// Object executeFunction(String functionName, Object... parameters);
37+
// FunctionExecutor getFunctionExecutor(String functionName);
3738

3839
/**
3940
* <p>Retrieves data for the specified function import and key.</p>

janos-core/src/main/java/org/apache/olingo/odata2/janos/processor/core/DataSourceProcessor.java

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
import org.apache.olingo.odata2.api.uri.info.*;
4141
import org.apache.olingo.odata2.janos.processor.api.datasource.DataSource;
4242
import org.apache.olingo.odata2.janos.processor.api.datasource.DataSource.BinaryData;
43-
import org.apache.olingo.odata2.janos.processor.api.datasource.FunctionExecutor;
4443
import org.apache.olingo.odata2.janos.processor.api.datasource.FunctionSource;
4544
import org.apache.olingo.odata2.janos.processor.api.datasource.ValueAccess;
4645

@@ -76,11 +75,6 @@ public DataSourceProcessor(final DataSource dataSource, final ValueAccess valueA
7675

7776
private static FunctionSource createDefaultFunctionSource() {
7877
return new FunctionSource() {
79-
@Override
80-
public FunctionExecutor getFunctionExecutor(String functionName) {
81-
return null;
82-
}
83-
8478
@Override
8579
public Object executeFunction(EdmFunctionImport function, Map<String, Object> parameters, Map<String, Object> keys)
8680
throws ODataNotImplementedException, ODataNotFoundException, EdmException, ODataApplicationException {
@@ -290,11 +284,9 @@ public ODataResponse readEntity(final GetEntityUriInfo uriInfo, final String con
290284

291285
final ExpandSelectTreeNode expandSelectTreeNode =
292286
UriParser.createExpandSelectTree(uriInfo.getSelect(), uriInfo.getExpand());
293-
ODataResponse odr =
294-
ODataResponse.fromResponse(writeEntry(uriInfo.getTargetEntitySet(), expandSelectTreeNode, data, contentType))
295-
.build();
296287

297-
return odr;
288+
return ODataResponse.fromResponse(
289+
writeEntry(uriInfo.getTargetEntitySet(), expandSelectTreeNode, data, contentType)).build();
298290
}
299291

300292
@Override
@@ -1490,7 +1482,7 @@ private void handleMimeType(final Object data, final EdmMapping mapping, final M
14901482
private <T> Map<String, Object> getSimpleTypeValueMap(final T data, final List<EdmProperty> propertyPath)
14911483
throws ODataException {
14921484
final EdmProperty property = propertyPath.get(propertyPath.size() - 1);
1493-
Map<String, Object> valueWithMimeType = new HashMap<String, Object>();
1485+
Map<String, Object> valueWithMimeType = new HashMap<>();
14941486
valueWithMimeType.put(property.getName(), getPropertyValue(data, propertyPath));
14951487

14961488
handleMimeType(data, property.getMapping(), valueWithMimeType);

janos-core/src/main/java/org/apache/olingo/odata2/janos/processor/core/datasource/AnnotationFunctionSource.java

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -30,21 +30,15 @@ private AnnotationFunctionSource() { /* private ctor because of builder */ }
3030

3131
private void init(Collection<Class<?>> annotatedClasses) {
3232
for (Class<?> annotatedClass : annotatedClasses) {
33-
if(FunctionExecutor.class.isAssignableFrom(annotatedClass)) {
34-
init((Class<FunctionExecutor>) annotatedClass);
35-
}
36-
}
37-
}
33+
List<Method> methods = annotationHelper.getAnnotatedMethods(annotatedClass, EdmFunctionImport.class, false);
3834

39-
private void init(Class<FunctionExecutor> annotatedClass) {
40-
List<Method> methods = annotationHelper.getAnnotatedMethods(annotatedClass, EdmFunctionImport.class, false);
41-
42-
for (Method method : methods) {
43-
initFunctionHolder(annotatedClass, method);
35+
for (Method method : methods) {
36+
initFunctionHolder(annotatedClass, method);
37+
}
4438
}
4539
}
4640

47-
private void initFunctionHolder(Class<FunctionExecutor> annotatedClass, Method method) {
41+
private void initFunctionHolder(Class<?> annotatedClass, Method method) {
4842
try {
4943
EdmFunctionImport efi = method.getAnnotation(EdmFunctionImport.class);
5044
String name = efi.name();
@@ -59,7 +53,8 @@ private void initFunctionHolder(Class<FunctionExecutor> annotatedClass, Method m
5953
holder.executor = annotatedClass.newInstance();
6054
holder.functionImport = efi;
6155
holder.functionParameters = parameters;
62-
holder.executor.init(dataStoreManager);
56+
//
57+
callInitMethods(holder.executor);
6358

6459
functionHolders.put(name, holder);
6560
} catch (InstantiationException | IllegalAccessException e) {
@@ -68,6 +63,12 @@ private void initFunctionHolder(Class<FunctionExecutor> annotatedClass, Method m
6863

6964
}
7065

66+
private void callInitMethods(Object functionInstance) {
67+
if(functionInstance instanceof FunctionExecutor) {
68+
((FunctionExecutor) functionInstance).init(dataStoreManager);
69+
}
70+
}
71+
7172
private LinkedHashMap<String, EdmFunctionImportParameter> extractParameters(Parameter[] parameters) {
7273
LinkedHashMap<String, EdmFunctionImportParameter> result = new LinkedHashMap<>();
7374
for (Parameter parameter : parameters) {
@@ -77,14 +78,14 @@ private LinkedHashMap<String, EdmFunctionImportParameter> extractParameters(Para
7778
return result;
7879
}
7980

80-
@Override
81-
public FunctionExecutor getFunctionExecutor(String functionName) {
82-
FunctionHolder holder = functionHolders.get(functionName);
83-
if(holder == null) {
84-
return null;
85-
}
86-
return holder.executor;
87-
}
81+
// @Override
82+
// public FunctionExecutor getFunctionExecutor(String functionName) {
83+
// FunctionHolder holder = functionHolders.get(functionName);
84+
// if(holder == null) {
85+
// return null;
86+
// }
87+
// return holder.executor;
88+
// }
8889

8990
@Override
9091
public Object executeFunction(org.apache.olingo.odata2.api.edm.EdmFunctionImport function,
@@ -115,7 +116,7 @@ private Object[] mapParameters(FunctionHolder holder, Map<String, Object> parame
115116

116117

117118
static class FunctionHolder {
118-
FunctionExecutor executor;
119+
Object executor;
119120
Method method;
120121
EdmFunctionImport functionImport;
121122
LinkedHashMap<String, EdmFunctionImportParameter> functionParameters;

janos-ref/src/main/java/org/apache/olingo/odata2/janos/processor/ref/model/RefFunctions.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@
1515
import static org.apache.olingo.odata2.api.annotation.edm.EdmFunctionImport.*;
1616

1717
/**
18-
* Created by mibo on 23.08.15.
19-
*
18+
* Reference Implementation for a FunctionExecutor
2019
*
20+
* Created by mibo on 23.08.15.
2121
*/
2222
public class RefFunctions implements FunctionExecutor {
2323

0 commit comments

Comments
 (0)