private void onResolveConflicts() { final GlusterHookResolveConflictsModel resolveConflictsModel = (GlusterHookResolveConflictsModel) getWindow(); if (resolveConflictsModel == null) { return; } if (!resolveConflictsModel.isAnyResolveActionSelected()) { resolveConflictsModel.setMessage( ConstantsManager.getInstance().getConstants().noResolveActionSelectedGlusterHook()); return; } resolveConflictsModel.startProgress(); GlusterHookEntity hookEntity = resolveConflictsModel.getGlusterHookEntity(); ArrayList<VdcActionType> actionTypes = new ArrayList<VdcActionType>(); ArrayList<VdcActionParametersBase> parameters = new ArrayList<VdcActionParametersBase>(); ArrayList<IFrontendActionAsyncCallback> callbacks = new ArrayList<IFrontendActionAsyncCallback>(); if (resolveConflictsModel.getResolveContentConflict().getEntity()) { actionTypes.add(VdcActionType.UpdateGlusterHook); GlusterServerHook serverHook = resolveConflictsModel.getServerHooksList().getSelectedItem(); Guid serverId = (serverHook == null) ? null : serverHook.getServerId(); parameters.add(new GlusterHookManageParameters(hookEntity.getId(), serverId)); IFrontendActionAsyncCallback callback = new IFrontendActionAsyncCallback() { @Override public void executed(FrontendActionAsyncResult result) { if (result.getReturnValue().getSucceeded()) { resolveConflictsModel.getResolveContentConflict().setEntity(Boolean.FALSE); resolveConflictsModel.getResolveContentConflict().setIsChangeable(Boolean.FALSE); } } }; callbacks.add(callback); } if (resolveConflictsModel.getResolveStatusConflict().getEntity()) { boolean isEnable = resolveConflictsModel.getResolveStatusConflictEnable().getEntity(); actionTypes.add( isEnable ? VdcActionType.EnableGlusterHook : VdcActionType.DisableGlusterHook); parameters.add(new GlusterHookParameters(hookEntity.getId())); IFrontendActionAsyncCallback callback = new IFrontendActionAsyncCallback() { @Override public void executed(FrontendActionAsyncResult result) { if (result.getReturnValue().getSucceeded()) { resolveConflictsModel.getResolveStatusConflict().setEntity(Boolean.FALSE); resolveConflictsModel.getResolveStatusConflict().setIsChangeable(Boolean.FALSE); } } }; callbacks.add(callback); } if (resolveConflictsModel.getResolveMissingConflict().getEntity()) { boolean isAdd = resolveConflictsModel.getResolveMissingConflictCopy().getEntity(); actionTypes.add(isAdd ? VdcActionType.AddGlusterHook : VdcActionType.RemoveGlusterHook); parameters.add(new GlusterHookManageParameters(hookEntity.getId())); IFrontendActionAsyncCallback callback = new IFrontendActionAsyncCallback() { @Override public void executed(FrontendActionAsyncResult result) { if (result.getReturnValue().getSucceeded()) { resolveConflictsModel.getResolveMissingConflict().setEntity(Boolean.FALSE); resolveConflictsModel.getResolveMissingConflict().setIsChangeable(Boolean.FALSE); } } }; callbacks.add(callback); } IFrontendActionAsyncCallback onFinishCallback = new IFrontendActionAsyncCallback() { @Override public void executed(FrontendActionAsyncResult result) { if (result.getReturnValue().getSucceeded()) { resolveConflictsModel.stopProgress(); cancel(); syncSearch(); } } }; IFrontendActionAsyncCallback failureCallback = new IFrontendActionAsyncCallback() { @Override public void executed(FrontendActionAsyncResult result) { resolveConflictsModel.stopProgress(); } }; // Replacing the last callback with onFinishCallback, as we just want to close the dialog and // execute the search if (callbacks.size() > 0) { callbacks.remove(callbacks.size() - 1); callbacks.add(onFinishCallback); Frontend.getInstance() .runMultipleActions(actionTypes, parameters, callbacks, failureCallback, null); } }