You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

MethodExecutor.java 1.9KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package com.uqac.rthoni.java_rmi.server.executors;
  2. import com.uqac.rthoni.java_rmi.common.Command;
  3. import com.uqac.rthoni.java_rmi.common.ReflectionUtil;
  4. import com.uqac.rthoni.java_rmi.server.ServerApplication;
  5. import javafx.util.Pair;
  6. import java.lang.reflect.Method;
  7. import java.util.List;
  8. import java.util.stream.Collectors;
  9. /**
  10. * Created by robin on 9/16/16.
  11. */
  12. public class MethodExecutor extends AbstractCommandExecutor {
  13. @Override
  14. public String getCommandName() {
  15. return "fonction";
  16. }
  17. @Override
  18. public String run(Command command, ServerApplication server) throws Exception {
  19. String id = command.getArgument(0, false);
  20. String methodName = command.getArgument(1, false);
  21. Object obj = server.getObject(id);
  22. List<Pair<Class, String>> argClasses = command.getArgumentAsList(2, true).stream().map(v -> {
  23. String[] split = v.split(":");
  24. try {
  25. return new Pair<>(ReflectionUtil.getClass(split[0], server.getClassLoaders()), split[1]);
  26. } catch (ClassNotFoundException e) {
  27. return null;
  28. }
  29. }).collect(Collectors.toList());
  30. List<Object> arguments = argClasses.stream().map(p -> {
  31. String value = p.getValue();
  32. if (value.startsWith("ID(") && value.endsWith(")")) {
  33. value = value.substring(3, value.length() - 1);
  34. return server.getObject(value);
  35. }
  36. return ReflectionUtil.toObject(p.getKey(), value);
  37. }).collect(Collectors.toList());
  38. List<Class> classes = argClasses.stream().map(Pair::getKey).collect(Collectors.toList());
  39. Method method = obj.getClass().getDeclaredMethod(methodName, classes.toArray(new Class[classes.size()]));
  40. Object result = method.invoke(obj, arguments.toArray());
  41. return (result == null ? "NULL" : result.toString());
  42. }
  43. }