Skip to content

Commit

Permalink
do not return fields/methods for Class and Object classes
Browse files Browse the repository at this point in the history
  • Loading branch information
miguelperezcolom committed Oct 9, 2024
1 parent d9159ea commit 2cc4ad3
Show file tree
Hide file tree
Showing 22 changed files with 218 additions and 194 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -36,21 +36,21 @@ public class MainListActionRunnner extends RunMethodActionRunner implements Acti
private final AllEditableFieldsProvider allEditableFieldsProvider;

public MainListActionRunnner(
List<ListActionRunner> listActionRunners,
Merger merger,
ActualValueExtractor actualValueExtractor,
ReflectionHelper reflectionHelper,
Serializer serializer,
ValidationService validationService,
ViewMapper viewMapper,
ComponentFactory componentFactory,
UIIncrementFactory uIIncrementFactory,
BasicTypeChecker basicTypeChecker,
MethodParametersEditorHandler methodParametersEditorHandler,
MethodProvider methodProvider,
DataExtractor dataExtractor,
AllEditableFieldsProvider allEditableFieldsProvider,
ManagedTypeChecker managedTypeChecker) {
List<ListActionRunner> listActionRunners,
Merger merger,
ActualValueExtractor actualValueExtractor,
ReflectionHelper reflectionHelper,
Serializer serializer,
ValidationService validationService,
ViewMapper viewMapper,
ComponentFactory componentFactory,
UIIncrementFactory uIIncrementFactory,
BasicTypeChecker basicTypeChecker,
MethodParametersEditorHandler methodParametersEditorHandler,
MethodProvider methodProvider,
DataExtractor dataExtractor,
AllEditableFieldsProvider allEditableFieldsProvider,
ManagedTypeChecker managedTypeChecker) {
super(
merger,
actualValueExtractor,
Expand All @@ -65,7 +65,7 @@ public MainListActionRunnner(
viewMapper,
dataExtractor,
allEditableFieldsProvider,
managedTypeChecker);
managedTypeChecker);
this.listActionRunners = listActionRunners;
this.merger = merger;
this.actualValueExtractor = actualValueExtractor;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,21 +32,21 @@ public class RunButtonActionRunner extends RunMethodActionRunner implements Acti
private final AllEditableFieldsProvider allEditableFieldsProvider;

public RunButtonActionRunner(
Merger merger,
ActualValueExtractor actualValueExtractor,
ReflectionHelper reflectionHelper,
Serializer serializer,
ValidationService validationService,
ComponentFactory componentFactory,
UIIncrementFactory uIIncrementFactory,
BasicTypeChecker basicTypeChecker,
MethodParametersEditorHandler methodParametersEditorHandler,
MethodProvider methodProvider,
ViewMapper viewMapper,
ValueProvider valueProvider,
DataExtractor dataExtractor,
AllEditableFieldsProvider allEditableFieldsProvider,
ManagedTypeChecker managedTypeChecker) {
Merger merger,
ActualValueExtractor actualValueExtractor,
ReflectionHelper reflectionHelper,
Serializer serializer,
ValidationService validationService,
ComponentFactory componentFactory,
UIIncrementFactory uIIncrementFactory,
BasicTypeChecker basicTypeChecker,
MethodParametersEditorHandler methodParametersEditorHandler,
MethodProvider methodProvider,
ViewMapper viewMapper,
ValueProvider valueProvider,
DataExtractor dataExtractor,
AllEditableFieldsProvider allEditableFieldsProvider,
ManagedTypeChecker managedTypeChecker) {
super(
merger,
actualValueExtractor,
Expand All @@ -61,7 +61,7 @@ public RunButtonActionRunner(
viewMapper,
dataExtractor,
allEditableFieldsProvider,
managedTypeChecker);
managedTypeChecker);
this.valueProvider = valueProvider;
this.allEditableFieldsProvider = allEditableFieldsProvider;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,26 +21,25 @@
import io.mateu.core.domain.uidefinition.core.interfaces.Message;
import io.mateu.core.domain.uidefinition.core.interfaces.ResponseWrapper;
import io.mateu.core.domain.uidefinition.core.views.SingleComponentView;
import io.mateu.core.domain.uidefinition.shared.annotations.*;
import io.mateu.core.domain.uidefinition.shared.annotations.Action;
import io.mateu.core.domain.uidefinition.shared.annotations.ActionTarget;
import io.mateu.core.domain.uidefinition.shared.annotations.*;
import io.mateu.core.domain.uidefinition.shared.data.ClientSideEvent;
import io.mateu.core.domain.uidefinition.shared.data.CloseModal;
import io.mateu.core.domain.uidefinition.shared.data.GoBack;
import io.mateu.core.domain.uidefinition.shared.interfaces.JourneyStarter;
import io.mateu.core.domain.uidefinition.shared.interfaces.Listing;
import io.mateu.dtos.*;
import java.lang.reflect.*;
import java.net.URL;
import java.util.*;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Service;
import reactor.core.publisher.Mono;

import java.lang.reflect.*;
import java.net.URL;
import java.util.*;
import java.util.stream.Collectors;

@Service
@RequiredArgsConstructor
@SuppressFBWarnings("EI_EXPOSE_REP2")
Expand Down Expand Up @@ -85,25 +84,27 @@ private Map<String, Method> getActions(Object viewInstance) {
.filter(m -> m.isAnnotationPresent(On.class))
.collect(Collectors.toMap(m -> f.getName() + "." + m.getName(), m -> m)));
});
reflectionHelper
.getAllEditableFields(viewInstance.getClass())
.stream().filter(f -> !managedTypeChecker.isManaged(f))
.forEach(
f -> {
try {
var value = reflectionHelper.getValue(f, viewInstance);
if (value == null) {
value = reflectionHelper.newInstance(f.getType());
}
getActions(value).forEach((k,v) -> methodMap.put(f.getName() + "." + k, v));
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException |
InstantiationException e) {
throw new RuntimeException(e);
}
});
if (viewInstance instanceof Listing<?,?>) {
reflectionHelper.getAllEditableFields(viewInstance.getClass()).stream()
.filter(f -> !managedTypeChecker.isManaged(f))
.forEach(
f -> {
try {
var value = reflectionHelper.getValue(f, viewInstance);
if (value == null) {
value = reflectionHelper.newInstance(f.getType());
}
getActions(value).forEach((k, v) -> methodMap.put(f.getName() + "." + k, v));
} catch (NoSuchMethodException
| IllegalAccessException
| InvocationTargetException
| InstantiationException e) {
throw new RuntimeException(e);
}
});
if (viewInstance instanceof Listing<?, ?>) {
if (!methodMap.containsKey("itemSelected")) {
methodMap.put("itemSelected", reflectionHelper.getMethod(viewInstance.getClass(), "onRowSelected"));
methodMap.put(
"itemSelected", reflectionHelper.getMethod(viewInstance.getClass(), "onRowSelected"));
}
}
return methodMap;
Expand All @@ -126,7 +127,8 @@ public Mono<UIIncrement> run(
Method m =
methodProvider.getMethod(targetInstance.getClass(), methodParametersEditor.getMethodId());
if (!Modifier.isPublic(m.getModifiers())) m.setAccessible(true);
Object result = m.invoke(targetInstance, injectParameters(targetInstance, m, serverHttpRequest, data));
Object result =
m.invoke(targetInstance, injectParameters(targetInstance, m, serverHttpRequest, data));
return processResult(targetInstance, m, data, serverHttpRequest, result, componentId);
}

Expand All @@ -148,10 +150,11 @@ private Object[] injectParameters(
(String) data.get("__eventName"), (Map<String, Object>) data.get("__event")));
continue;
}
if (instance instanceof Listing<?,?> listing) {
if (m.getGenericParameterTypes()[i] instanceof ParameterizedType &&
isSelectionParameter((ParameterizedType) m.getGenericParameterTypes()[i], listing)) {
List<Map<String, Object>> rowsData = (List<Map<String, Object>>) data.get("_selectedRows");
if (instance instanceof Listing<?, ?> listing) {
if (m.getGenericParameterTypes()[i] instanceof ParameterizedType
&& isSelectionParameter((ParameterizedType) m.getGenericParameterTypes()[i], listing)) {
List<Map<String, Object>> rowsData =
(List<Map<String, Object>>) data.get("_selectedRows");
List<Object> selectedRows = new ArrayList<>();
for (Map<String, Object> row : rowsData) {
selectedRows.add(reflectionHelper.newInstance(listing.getRowClass(), row));
Expand All @@ -160,19 +163,18 @@ private Object[] injectParameters(
continue;
}
if (listing.getRowClass().equals(m.getGenericParameterTypes()[i])) {
List<Map<String, Object>> rowsData = (List<Map<String, Object>>) data.get("_selectedRows");
List<Map<String, Object>> rowsData =
(List<Map<String, Object>>) data.get("_selectedRows");
if (!rowsData.isEmpty()) {
Map<String, Object> selectedRow = rowsData.get(0);
values.add(
reflectionHelper.newInstance(listing.getRowClass(), selectedRow));
values.add(reflectionHelper.newInstance(listing.getRowClass(), selectedRow));
} else {
values.add(null);
}
continue;
}
if (m.getName().equals("onRowSelected")) {
values.add(
reflectionHelper.newInstance(listing.getRowClass(), data));
values.add(reflectionHelper.newInstance(listing.getRowClass(), data));
continue;
}
}
Expand All @@ -183,8 +185,8 @@ private Object[] injectParameters(
}

boolean isSelectionParameter(ParameterizedType type, Listing listing) {
return List.class.equals(type.getRawType()) &&
reflectionHelper.getGenericClass(type, List.class, "E").equals(listing.getRowClass());
return List.class.equals(type.getRawType())
&& reflectionHelper.getGenericClass(type, List.class, "E").equals(listing.getRowClass());
}

public Mono<UIIncrement> runMethod(
Expand Down Expand Up @@ -231,7 +233,8 @@ public Mono<UIIncrement> runMethod(

try {

Object result = m.invoke(methodOwner, injectParameters(methodOwner, m, serverHttpRequest, data));
Object result =
m.invoke(methodOwner, injectParameters(methodOwner, m, serverHttpRequest, data));

return processResult(actualViewInstance, m, data, serverHttpRequest, result, componentId);

Expand All @@ -248,9 +251,11 @@ public Mono<UIIncrement> runMethod(
private Object getMethodOwner(String actionId, Object actualViewInstance) {
var methodOwner = actualViewInstance;
if (actionId.contains(".")) {
methodOwner = getMethodOwner(actionId.substring(actionId.indexOf(".") + 1),
methodOwner =
getMethodOwner(
actionId.substring(actionId.indexOf(".") + 1),
reflectionHelper.getValue(
actionId.substring(0, actionId.indexOf(".")), actualViewInstance));
actionId.substring(0, actionId.indexOf(".")), actualViewInstance));
}
return methodOwner;
}
Expand Down Expand Up @@ -587,20 +592,25 @@ private boolean needsParameters(Object instance, Method m) {
if (parameter.getType().equals(ClientSideEvent.class)) {
continue;
}
if (instance instanceof Listing<?,?> listing) {
if (instance instanceof Listing<?, ?> listing) {
if (m.getName().equals("onRowSelected")) {
continue;
}
var isMultipleSelectionParameter = Arrays.stream(m.getGenericParameterTypes())
var isMultipleSelectionParameter =
Arrays.stream(m.getGenericParameterTypes())
.filter(t -> t instanceof ParameterizedType)
.map(t -> (ParameterizedType) t)
.anyMatch(type -> List.class.equals(type.getRawType())
&& reflectionHelper.getGenericClass(type, List.class, "E")
.equals(listing.getRowClass()));
.anyMatch(
type ->
List.class.equals(type.getRawType())
&& reflectionHelper
.getGenericClass(type, List.class, "E")
.equals(listing.getRowClass()));
if (isMultipleSelectionParameter) {
continue;
}
var isSingleSelectionParameter = Arrays.stream(m.getGenericParameterTypes())
var isSingleSelectionParameter =
Arrays.stream(m.getGenericParameterTypes())
.anyMatch(type -> listing.getRowClass().equals(type));
if (isSingleSelectionParameter) {
continue;
Expand Down
Loading

0 comments on commit 2cc4ad3

Please sign in to comment.