Alon Bar-Lev has posted comments on this change.

Change subject: engine : Validate parameter in canDoAction
......................................................................


Patch Set 5:

(9 comments)

....................................................
File 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommandBase.java
Line 144: 
Line 145:     private Map<Guid, CommandBase<?>> childCommandsMap = new 
HashMap<>();
Line 146:     private Map<Guid, Pair<VdcActionType, VdcActionParametersBase>> 
childCommandInfoMap = new HashMap<>();
Line 147: 
Line 148:     @Parameters(type = Parameters.Type.common)
why can't these be required? what is special in common?
Line 149:     final Parameter[] commonParameters = {
Line 150:             CoreParameters.GUID_ID,
Line 151:             CoreParameters.SESSION_ID,
Line 152:             CoreParameters.PARAMETERS_CURRENT_USER,


Line 145:     private Map<Guid, CommandBase<?>> childCommandsMap = new 
HashMap<>();
Line 146:     private Map<Guid, Pair<VdcActionType, VdcActionParametersBase>> 
childCommandInfoMap = new HashMap<>();
Line 147: 
Line 148:     @Parameters(type = Parameters.Type.common)
Line 149:     final Parameter[] commonParameters = {
private?

can these can be static? so you walk the classes objects based on inheritance?
Line 150:             CoreParameters.GUID_ID,
Line 151:             CoreParameters.SESSION_ID,
Line 152:             CoreParameters.PARAMETERS_CURRENT_USER,
Line 153:             CoreParameters.SHOULD_BE_LOGGED,


....................................................
File 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/QueriesCommandBase.java
Line 38:     private final DbUser user;
Line 39:     private final P parameters;
Line 40:     private boolean isInternalExecution = false;
Line 41:     @Parameters(type = Parameters.Type.common)
Line 42:     final Parameter[] commonParameters = { 
CoreParameters.HTTP_SESSION_ID, CoreParameters.FILTERED, CoreParameters.REFRESH 
};
each one on own line to allow future add without modifying entire line.
Line 43: 
Line 44:     public QueriesCommandBase(P parameters) {
Line 45:         this.parameters = parameters;
Line 46:         returnValue = new VdcQueryReturnValue();


....................................................
File 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/CommandParameters.java
Line 5: import java.util.List;
Line 6: 
Line 7: import org.ovirt.engine.core.common.utils.Parameter;
Line 8: 
Line 9: public class CommandParameters {
can this be nested class within whatever use it?
Line 10:     private List<Parameter> requiredParameters = new 
ArrayList<Parameter>();
Line 11:     private List<Parameter> optionalParameters = new 
ArrayList<Parameter>();
Line 12:     private List<Parameter> commonParameters = new 
ArrayList<Parameter>();
Line 13: 


....................................................
File 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/Parameters.java
Line 7: 
Line 8: @Target(ElementType.FIELD)
Line 9: @Retention(RetentionPolicy.RUNTIME)
Line 10: public @interface Parameters {
Line 11:     public enum Type {optional, required, common};
why do you need the common?
Line 12:     Type type() default Type.required;


....................................................
File 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/utils/ParametersValidator.java
Line 20:     public static void validateParameters(QueriesCommandBase cmd) {
Line 21:         validateParameters(getCommandParameters(cmd), 
cmd.getParameters());
Line 22:     }
Line 23: 
Line 24:     public static void validateParameters(CommandBase cmd) {
why not take object and map?

 public static void validateParameters(Object o, ParametersMap map) {
     # get @Parameters annotation
     # check aginst map
 }

this can be generic and not related to anything in application.

please see it as (Parameters, ParametersMap, @Parameters, ParametersValidator) 
can be used in other projects as well.
Line 25:         validateParameters(getCommandParameters(cmd), 
cmd.getParameters());
Line 26:     }
Line 27: 
Line 28:     private static CommandParameters getCommandParameters(Object cmd) {


Line 48:     private static Parameter[] getParameterValues(Object cmd, Field 
field) throws IllegalAccessException {
Line 49:         if (cmd instanceof QueriesCommandBase) {
Line 50:             return (Parameter[]) ((QueriesCommandBase) 
cmd).getFieldValue(field);
Line 51:         }
Line 52:         return (Parameter[]) ((CommandBase) cmd).getFieldValue(field);
why is this needed? why can't we only walk the parameters map?
Line 53:     }
Line 54: 
Line 55:     private static void validateParameters(CommandParameters 
cmdParams, ParametersMap paramsMap) {
Line 56:         if (cmdParams.getRequiredParameters().isEmpty()) {


....................................................
File 
backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/serialization/json/JsonObjectDeserializer.java
Line 49:                 JsonVmManagementParametersBaseMixIn.class);
Line 50:         
formattedMapper.getDeserializationConfig().addMixInAnnotations(VmBase.class, 
JsonVmBaseMixIn.class);
Line 51:         
formattedMapper.getDeserializationConfig().addMixInAnnotations(VmStatic.class, 
JsonVmStaticMixIn.class);
Line 52:         formattedMapper.configure(Feature.FAIL_ON_UNKNOWN_PROPERTIES, 
false);
Line 53:         SimpleModule module = new SimpleModule("ParameterModule", new 
Version(1, 0, 0, "M"));
this does not belong here
Line 54:         module.addKeyDeserializer(Parameter.class, new 
ParameterDeserializer());
Line 55:         formattedMapper.registerModule(module);
Line 56:         formattedMapper.enableDefaultTyping();
Line 57:     }


....................................................
File 
backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/serialization/json/JsonObjectSerializer.java
Line 52:         
formattedMapper.getSerializationConfig().addMixInAnnotations(VmBase.class, 
JsonVmBaseMixIn.class);
Line 53:         
formattedMapper.getSerializationConfig().addMixInAnnotations(VmStatic.class, 
JsonVmStaticMixIn.class);
Line 54:         
formattedMapper.getSerializationConfig().addMixInAnnotations(VmPayload.class, 
JsonVmPayloadMixIn.class);
Line 55:         formattedMapper.configure(Feature.INDENT_OUTPUT, true);
Line 56:         SimpleModule module = new SimpleModule("ParameterModule", new 
Version(1, 0, 0, "M"));
this does not belong here
Line 57:         module.addKeySerializer(Parameter.class, new 
ParameterSerializer());
Line 58:         formattedMapper.registerModule(module);
Line 59:         formattedMapper.enableDefaultTyping();
Line 60:     }


-- 
To view, visit http://gerrit.ovirt.org/21485
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: I15566c9177da28b2d47bbb6018fbfb61defcf3da
Gerrit-PatchSet: 5
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Ravi Nori <rn...@redhat.com>
Gerrit-Reviewer: Alon Bar-Lev <alo...@redhat.com>
Gerrit-Reviewer: Ravi Nori <rn...@redhat.com>
Gerrit-Reviewer: oVirt Jenkins CI Server
Gerrit-HasComments: Yes
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to