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 <[email protected]>
Gerrit-Reviewer: Alon Bar-Lev <[email protected]>
Gerrit-Reviewer: Ravi Nori <[email protected]>
Gerrit-Reviewer: oVirt Jenkins CI Server
Gerrit-HasComments: Yes
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches