Mike Kolesnik has posted comments on this change. Change subject: engine: Add conditional execution to host deploy ......................................................................
Patch Set 2: (4 inline comments) .................................................... File backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VdsDeploy.java Line 217 Line 218 Line 219 Line 220 Line 221 This might be available in Java 8 if they release closures support. Currently I can think of another way to simplify this code, using methods for common usage, such as: private final Callable<?>[] _customizationDialog = new Callable<?>[] { createEnvironmentSetter( key, value), createXYZEnvironmentSetter( key, value) } And we define these methods: private Callable<?> createEnvironmentSetter(String key, Object value) { return new Callable<Object>() { public Object call() throws Exception { _parser.cliEnvironmentSet( key, value ); return null; }}; } private Callable<?> createXYZEnvironmentSetter(String key, Object value) { return new Callable<Object>() { @CallWhen(XYZ.class) public Object call() throws Exception { _parser.cliEnvironmentSet( key, value ); return null; }}; } Annotations by definition have to get only static values so we cant pass variables to them. Additionally annotations in Java 7 are very limited and can't be set on an anonymous class (IIRC in Java 8 it should be possible), otherwise I'd initially put the annotation on a class level making it much more simple and elegant. Alternatively, we can not use annotation and have the code in the method, so the createEnvironmentSetter method would look like this: private Callable<?> createEnvironmentSetter(String key, Object value, CustomizationCondition ... conditions) { return new Callable<Object>() { public Object call() throws Exception { if (_customizationConditions.containsAll(Arrays.asList(conditions)) { _parser.cliEnvironmentSet( key, value ); } else { _parse.cliNoop(); } return null; }}; } Which I think is not such a bad design, but it limits the conditions only to env setters (which is where its currently used anyway). Whoever wants to use conditions in the future would need to have this code in his callable. Please let me know what you think. Line 225: private @interface CallWhen { Line 226: /** Line 227: * @return A condition that determines if the customization should run. Line 228: */ Line 229: CustomizationCondition value(); Done Line 230: } Line 231: /** Line 232: * A set of conditions under which the conditional customizations should run. Line 233: */ Line 302: }}, Line 303: new Callable<Object>() { public Object call() throws Exception { Line 304: _parser.cliEnvironmentSet( Line 305: NetEnv.IPTABLES_ENABLE, Line 306: _customizationConditions.contains(CustomizationCondition.IPTABLES_OVERRIDE) I'm not sure, can we skip sending it in case it's not supposed to happen, i.e. the default is false? Currently changing but please let me know Line 307: ); Line 308: return null; Line 309: }}, Line 310: new Callable<Object>() {@CallWhen(CustomizationCondition.IPTABLES_OVERRIDE) Line 412 Line 413 Line 414 Line 415 Line 416 After reviewing the termination dialog when doing this change, I didn't see such a use case there. Either way, I think it can be done in a separate patch if we do find such a use case. -- To view, visit http://gerrit.ovirt.org/16849 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: comment Gerrit-Change-Id: I98b4fe7d11cdb267664113ac7312a0cd12268f94 Gerrit-PatchSet: 2 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Mike Kolesnik <mkole...@redhat.com> Gerrit-Reviewer: Alon Bar-Lev <alo...@redhat.com> Gerrit-Reviewer: Mike Kolesnik <mkole...@redhat.com> Gerrit-Reviewer: oVirt Jenkins CI Server _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches