/**
* ***************************************************************************
* Copyright (c) 2010 Qcadoo Limited
* Project: Qcadoo MES
* Version: 1.4
*
* This file is part of Qcadoo.
*
* Qcadoo is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation; either version 3 of the License,
* or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
* ***************************************************************************
*/
package com.qcadoo.mes.cmmsMachineParts.hooks;
import java.util.List;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Service;
import com.google.common.base.Strings;
import com.qcadoo.mes.basic.FaultTypesService;
import com.qcadoo.mes.basic.ParameterService;
import com.qcadoo.mes.basic.constants.SubassemblyFields;
import com.qcadoo.mes.basic.constants.WorkstationFields;
import com.qcadoo.mes.cmmsMachineParts.MaintenanceEventContextService;
import com.qcadoo.mes.cmmsMachineParts.MaintenanceEventService;
import com.qcadoo.mes.cmmsMachineParts.SourceCostService;
import com.qcadoo.mes.cmmsMachineParts.constants.CmmsMachinePartsConstants;
import com.qcadoo.mes.cmmsMachineParts.constants.MaintenanceEventContextFields;
import com.qcadoo.mes.cmmsMachineParts.constants.MaintenanceEventFields;
import com.qcadoo.mes.cmmsMachineParts.constants.MaintenanceEventType;
import com.qcadoo.mes.cmmsMachineParts.constants.ParameterFieldsCMP;
import com.qcadoo.mes.cmmsMachineParts.constants.PlannedEventBasedOn;
import com.qcadoo.mes.cmmsMachineParts.constants.PlannedEventFields;
import com.qcadoo.mes.cmmsMachineParts.constants.PlannedEventType;
import com.qcadoo.mes.cmmsMachineParts.roles.EventRoles;
import com.qcadoo.mes.cmmsMachineParts.states.constants.MaintenanceEventState;
import com.qcadoo.model.api.DataDefinition;
import com.qcadoo.model.api.DataDefinitionService;
import com.qcadoo.model.api.Entity;
import com.qcadoo.security.api.SecurityService;
import com.qcadoo.security.api.UserService;
import com.qcadoo.view.api.ComponentState;
import com.qcadoo.view.api.ViewDefinitionState;
import com.qcadoo.view.api.components.CheckBoxComponent;
import com.qcadoo.view.api.components.FieldComponent;
import com.qcadoo.view.api.components.FormComponent;
import com.qcadoo.view.api.components.GridComponent;
import com.qcadoo.view.api.components.LookupComponent;
import com.qcadoo.view.api.components.WindowComponent;
import com.qcadoo.view.api.components.lookup.FilterValueHolder;
import com.qcadoo.view.api.ribbon.Ribbon;
import com.qcadoo.view.api.ribbon.RibbonActionItem;
import com.qcadoo.view.api.ribbon.RibbonGroup;
import com.qcadoo.view.api.utils.NumberGeneratorService;
@Service
public class EventHooks {
private static final String L_FORM = "form";
private static final String L_WINDOW = "window";
@Autowired
private MaintenanceEventService maintenanceEventService;
@Autowired
private FaultTypesService faultTypesService;
@Autowired
private NumberGeneratorService numberGeneratorService;
@Autowired
private MaintenanceEventContextService maintenanceEventContextService;
@Autowired
private SourceCostService sourceCostService;
@Autowired
private UserService userService;
@Autowired
private SecurityService securityService;
@Autowired
private ParameterService parameterService;
@Autowired
private DataDefinitionService dataDefinitionService;
public void maintenanceEventBeforeRender(final ViewDefinitionState view) {
FieldComponent acceptanceEvents = (FieldComponent) view.getComponentByReference(MaintenanceEventFields.ACCEPTANCE_EVENTS);
acceptanceEvents.setFieldValue(parameterService.getParameter().getBooleanField(ParameterFieldsCMP.ACCEPTANCE_EVENTS));
setUpFaultTypeLookup(view);
setFieldsRequired(view);
fillDefaultFields(view);
fillDefaultFieldsFromContext(view, MaintenanceEventFields.MAINTENANCE_EVENT_CONTEXT);
toggleEnabledViewComponents(view, MaintenanceEventFields.MAINTENANCE_EVENT_CONTEXT);
disableFieldsForState(view);
toggleOldSolutionsButton(view);
enableShowPlannedEvent(view);
hideAccordingToRole(view);
setEventCriteriaModifiers(view);
lockNumberField(view);
fetchNumberFromDatabase(view);
manageSoundNotificationsField(view);
}
private void manageSoundNotificationsField(final ViewDefinitionState view) {
FormComponent form = (FormComponent) view.getComponentByReference(L_FORM);
Entity event = form.getPersistedEntityWithIncludedFormValues();
String type = event.getStringField(MaintenanceEventFields.TYPE);
String eventState = event.getStringField(MaintenanceEventFields.STATE);
boolean canEnableSoundNotificationsField = canEnableSoundNotificationsField(view, type, eventState);
CheckBoxComponent soundNotificationComponent = (CheckBoxComponent) view
.getComponentByReference(MaintenanceEventFields.SOUND_NOTIFICATIONS);
if (form.getEntityId() == null && view.isViewAfterRedirect() && canEnableSoundNotificationsField) {
soundNotificationComponent.setChecked(true);
} else if (MaintenanceEventType.PROPOSAL.getStringValue().equals(type)) {
soundNotificationComponent.setChecked(false);
}
soundNotificationComponent.setEnabled(canEnableSoundNotificationsField);
soundNotificationComponent.requestComponentUpdateState();
}
private boolean canEnableSoundNotificationsField(ViewDefinitionState view, String type, String eventState) {
return (MaintenanceEventType.FAILURE.getStringValue().equals(type) || MaintenanceEventType.ISSUE.getStringValue().equals(
type))
&& MaintenanceEventState.NEW.getStringValue().equals(eventState);
}
private void lockNumberField(final ViewDefinitionState view) {
FieldComponent numberFieldComponent = (FieldComponent) view.getComponentByReference(MaintenanceEventFields.NUMBER);
numberFieldComponent.setEnabled(false);
}
private void fetchNumberFromDatabase(final ViewDefinitionState view) {
FormComponent formComponent = (FormComponent) view.getComponentByReference(L_FORM);
if (formComponent.getEntityId() != null) {
ComponentState numberField = view.getComponentByReference(MaintenanceEventFields.NUMBER);
String numberFieldValue = (String) numberField.getFieldValue();
if (Strings.isNullOrEmpty(numberFieldValue)) {
DataDefinition maintenanceEventDD = dataDefinitionService.get(CmmsMachinePartsConstants.PLUGIN_IDENTIFIER,
CmmsMachinePartsConstants.MODEL_MAINTENANCE_EVENT);
Entity maintenanceEvent = maintenanceEventDD.get(formComponent.getEntityId());
numberField.setFieldValue(maintenanceEvent.getField(MaintenanceEventFields.NUMBER));
}
}
}
public void plannedEventBeforeRender(final ViewDefinitionState view) {
generateNumber(view, CmmsMachinePartsConstants.MODEL_PLANNED_EVENT, PlannedEventFields.NUMBER);
fillDefaultFieldsFromContext(view, PlannedEventFields.PLANNED_EVENT_CONTEXT);
toggleEnabledViewComponents(view, PlannedEventFields.PLANNED_EVENT_CONTEXT);
toggleEnabledFromBasedOn(view);
enableShowMaintenanceEvent(view);
disableCopyButtonForAfterReview(view);
setEventCriteriaModifiers(view);
}
public void toggleEnabledFromBasedOn(final ViewDefinitionState view) {
FormComponent form = (FormComponent) view.getComponentByReference(L_FORM);
Entity event = form.getPersistedEntityWithIncludedFormValues();
String basedOn = event.getStringField(PlannedEventFields.BASED_ON);
FieldComponent date = (FieldComponent) view.getComponentByReference(PlannedEventFields.DATE);
FieldComponent counter = (FieldComponent) view.getComponentByReference(PlannedEventFields.COUNTER);
if (basedOn.equals(PlannedEventBasedOn.DATE.getStringValue())) {
date.setEnabled(true);
counter.setEnabled(false);
counter.setFieldValue(null);
} else if (basedOn.equals(PlannedEventBasedOn.COUNTER.getStringValue())) {
date.setEnabled(false);
date.setFieldValue(null);
counter.setEnabled(true);
}
}
private void disableCopyButtonForAfterReview(final ViewDefinitionState view) {
FormComponent form = (FormComponent) view.getComponentByReference(L_FORM);
Entity event = form.getPersistedEntityWithIncludedFormValues();
if (PlannedEventType.from(event).equals(PlannedEventType.AFTER_REVIEW)) {
toggleRibbonButton(view, "actions", "copy", false);
}
}
private void enableShowPlannedEvent(final ViewDefinitionState view) {
FormComponent form = (FormComponent) view.getComponentByReference(L_FORM);
Entity event = form.getPersistedEntityWithIncludedFormValues();
Optional<Entity> plannedEvent = maintenanceEventService.getPlannedEventForMaintenanceEvent(event);
if (plannedEvent.isPresent()) {
toggleRibbonButton(view, "plannedEvents", "showPlannedEvent", true);
} else {
toggleRibbonButton(view, "plannedEvents", "showPlannedEvent", false);
}
}
private void enableShowMaintenanceEvent(final ViewDefinitionState view) {
FormComponent form = (FormComponent) view.getComponentByReference(L_FORM);
Entity event = form.getPersistedEntityWithIncludedFormValues();
Entity maintenanceEvent = event.getBelongsToField(PlannedEventFields.MAINTENANCE_EVENT);
if (maintenanceEvent != null) {
toggleRibbonButton(view, "maintenanceEvents", "showMaintenanceEvent", true);
} else {
toggleRibbonButton(view, "maintenanceEvents", "showMaintenanceEvent", false);
}
}
private void toggleRibbonButton(final ViewDefinitionState view, String groupName, String itemName, boolean enabled) {
WindowComponent window = (WindowComponent) view.getComponentByReference("window");
Ribbon ribbon = window.getRibbon();
RibbonGroup group = ribbon.getGroupByName(groupName);
RibbonActionItem item = group.getItemByName(itemName);
item.setEnabled(enabled);
item.requestUpdate(true);
}
private void disableFieldsForState(final ViewDefinitionState view) {
FormComponent form = (FormComponent) view.getComponentByReference(L_FORM);
Entity event = form.getPersistedEntityWithIncludedFormValues();
MaintenanceEventState state = MaintenanceEventState.of(event);
if (state.compareTo(MaintenanceEventState.CLOSED) == 0 || state.compareTo(MaintenanceEventState.REVOKED) == 0
|| state.compareTo(MaintenanceEventState.PLANNED) == 0) {
form.setFormEnabled(false);
GridComponent staffWorkTimes = (GridComponent) view.getComponentByReference(MaintenanceEventFields.STAFF_WORK_TIMES);
GridComponent machineParts = (GridComponent) view
.getComponentByReference(MaintenanceEventFields.MACHINE_PARTS_FOR_EVENT);
staffWorkTimes.setEnabled(false);
machineParts.setEnabled(false);
}
}
private void fillDefaultFields(final ViewDefinitionState view) {
FormComponent form = (FormComponent) view.getComponentByReference(L_FORM);
Entity event = form.getPersistedEntityWithIncludedFormValues();
String type = event.getStringField(MaintenanceEventFields.TYPE);
LookupComponent faultType = (LookupComponent) view.getComponentByReference(MaintenanceEventFields.FAULT_TYPE);
if (type.compareTo(MaintenanceEventType.PROPOSAL.getStringValue()) == 0) {
if (faultType.getFieldValue() == null) {
faultType.setFieldValue(faultTypesService.getDefaultFaultType().getId());
}
faultType.setEnabled(false);
}
}
private void generateNumber(final ViewDefinitionState view, String modelName, String fieldName) {
if (numberGeneratorService.checkIfShouldInsertNumber(view, L_FORM, fieldName)) {
numberGeneratorService.generateAndInsertNumber(view, CmmsMachinePartsConstants.PLUGIN_IDENTIFIER, modelName, L_FORM,
fieldName);
}
}
public void fillDefaultFieldsFromContext(final ViewDefinitionState view, String contextField) {
FormComponent form = (FormComponent) view.getComponentByReference(L_FORM);
if (form.getEntityId() == null) {
Entity event = form.getEntity();
Entity eventContext = event.getBelongsToField(contextField);
if (eventContext != null) {
Entity factoryEntity = eventContext.getBelongsToField(MaintenanceEventContextFields.FACTORY);
if (factoryEntity != null) {
FieldComponent factoryField = (FieldComponent) view.getComponentByReference(MaintenanceEventFields.FACTORY);
factoryField.setFieldValue(factoryEntity.getId());
factoryField.requestComponentUpdateState();
fillSourceCost(view, factoryEntity);
} else {
LookupComponent sc = (LookupComponent) view.getComponentByReference("sourceCost");
if (sc.isEmpty()) {
fillSourceCost(view);
}
}
Entity divisionEntity = eventContext.getBelongsToField(MaintenanceEventContextFields.DIVISION);
if (divisionEntity != null) {
FieldComponent divisionField = (FieldComponent) view.getComponentByReference(MaintenanceEventFields.DIVISION);
divisionField.setFieldValue(divisionEntity.getId());
divisionField.requestComponentUpdateState();
}
}
}
}
public void fillSourceCost(final ViewDefinitionState view, final Entity factoryEntity) {
Optional<Entity> costForFactory = sourceCostService.findDefaultSourceCodeForFactory(factoryEntity);
if (costForFactory.isPresent()) {
FieldComponent costField = (FieldComponent) view.getComponentByReference(MaintenanceEventFields.SOURCE_COST);
costField.setFieldValue(costForFactory.get().getId());
costField.requestComponentUpdateState();
} else {
fillSourceCost(view);
}
}
public void fillSourceCost(final ViewDefinitionState view) {
Optional<Entity> costForFactory = sourceCostService.findDefaultSourceCode();
if (costForFactory.isPresent()) {
FieldComponent costField = (FieldComponent) view.getComponentByReference(MaintenanceEventFields.SOURCE_COST);
costField.setFieldValue(costForFactory.get().getId());
costField.requestComponentUpdateState();
} else {
FieldComponent costField = (FieldComponent) view.getComponentByReference(MaintenanceEventFields.SOURCE_COST);
costField.setFieldValue(null);
costField.requestComponentUpdateState();
}
}
public void toggleEnabledViewComponents(final ViewDefinitionState view, String contextField) {
FormComponent form = (FormComponent) view.getComponentByReference(L_FORM);
Entity event = form.getPersistedEntityWithIncludedFormValues();
toggleEnabledForWorkstation(view, event);
toggleEnabledForFactory(view, event, contextField);
toggleEnabledForDivision(view, event, contextField);
toggleEnabledForSubassembly(view, event);
toggleEnabledForProductionLine(view, event);
}
private void toggleEnabledForWorkstation(final ViewDefinitionState view, final Entity event) {
boolean enabled = event.getBelongsToField(MaintenanceEventFields.PRODUCTION_LINE) != null;
LookupComponent workstation = (LookupComponent) view.getComponentByReference(MaintenanceEventFields.WORKSTATION);
workstation.setEnabled(enabled);
}
private void toggleEnabledForProductionLine(final ViewDefinitionState view, final Entity event) {
boolean enabled = event.getBelongsToField(MaintenanceEventFields.DIVISION) != null;
LookupComponent productionLine = (LookupComponent) view.getComponentByReference(MaintenanceEventFields.PRODUCTION_LINE);
productionLine.setEnabled(enabled);
}
private void toggleEnabledForFactory(final ViewDefinitionState view, final Entity event, String contextField) {
if (event.getBelongsToField(contextField) == null) {
return;
}
boolean enabled = event.getBelongsToField(contextField).getBelongsToField(MaintenanceEventContextFields.FACTORY) == null;
LookupComponent factoryLookup = (LookupComponent) view.getComponentByReference(MaintenanceEventFields.FACTORY);
factoryLookup.setEnabled(enabled);
}
private void toggleEnabledForDivision(final ViewDefinitionState view, final Entity event, String contextField) {
if (event.getBelongsToField(contextField) == null) {
return;
}
boolean enabled = event.getBelongsToField(contextField).getBelongsToField(MaintenanceEventContextFields.DIVISION) == null;
LookupComponent divisionLookup = (LookupComponent) view.getComponentByReference(MaintenanceEventFields.DIVISION);
divisionLookup.setEnabled(enabled);
}
private void toggleEnabledForSubassembly(final ViewDefinitionState view, final Entity event) {
boolean enabled = event.getBelongsToField(MaintenanceEventFields.WORKSTATION) != null;
LookupComponent subassemblyLookup = (LookupComponent) view.getComponentByReference(MaintenanceEventFields.SUBASSEMBLY);
subassemblyLookup.setEnabled(enabled);
}
private void setFieldsRequired(final ViewDefinitionState view) {
FieldComponent factory = (FieldComponent) view.getComponentByReference(MaintenanceEventFields.FACTORY);
FieldComponent division = (FieldComponent) view.getComponentByReference(MaintenanceEventFields.DIVISION);
FieldComponent faultType = (FieldComponent) view.getComponentByReference(MaintenanceEventFields.FAULT_TYPE);
factory.setRequired(true);
division.setRequired(true);
faultType.setRequired(true);
}
public void setEventCriteriaModifiers(ViewDefinitionState view) {
FormComponent formComponent = (FormComponent) view.getComponentByReference(L_FORM);
Entity event = formComponent.getPersistedEntityWithIncludedFormValues();
setEventCriteriaModifier(view, event, MaintenanceEventFields.FACTORY, MaintenanceEventFields.DIVISION);
setEventCriteriaModifier(view, event, MaintenanceEventFields.DIVISION, MaintenanceEventFields.WORKSTATION);
setEventCriteriaModifier(view, event, MaintenanceEventFields.DIVISION, MaintenanceEventFields.PRODUCTION_LINE);
setEventCriteriaModifier(view, event, MaintenanceEventFields.PRODUCTION_LINE, MaintenanceEventFields.WORKSTATION);
setEventCriteriaModifier(view, event, MaintenanceEventFields.WORKSTATION, MaintenanceEventFields.SUBASSEMBLY);
}
private void setEventCriteriaModifier(ViewDefinitionState view, Entity event, String fieldFrom, String fieldTo) {
LookupComponent lookupComponent = (LookupComponent) view.getComponentByReference(fieldTo);
Entity value = event.getBelongsToField(fieldFrom);
if (value != null) {
FilterValueHolder holder = lookupComponent.getFilterValue();
holder.put(fieldFrom, value.getId());
lookupComponent.setFilterValue(holder);
}
}
private void setUpFaultTypeLookup(final ViewDefinitionState view) {
FormComponent formComponent = (FormComponent) view.getComponentByReference(L_FORM);
LookupComponent faultTypeLookup = (LookupComponent) view.getComponentByReference(MaintenanceEventFields.FAULT_TYPE);
Entity event = formComponent.getPersistedEntityWithIncludedFormValues();
Entity workstation = event.getBelongsToField(MaintenanceEventFields.WORKSTATION);
Entity subassembly = event.getBelongsToField(MaintenanceEventFields.SUBASSEMBLY);
FilterValueHolder filter = faultTypeLookup.getFilterValue();
if (workstation == null) {
filter.remove(MaintenanceEventFields.WORKSTATION);
filter.remove(WorkstationFields.WORKSTATION_TYPE);
filter.remove(MaintenanceEventFields.SUBASSEMBLY);
} else {
filter.put(MaintenanceEventFields.WORKSTATION, workstation.getId());
if (subassembly == null) {
filter.remove(MaintenanceEventFields.SUBASSEMBLY);
Entity workstationType = workstation.getBelongsToField(WorkstationFields.WORKSTATION_TYPE);
filter.put(WorkstationFields.WORKSTATION_TYPE, workstationType.getId());
} else {
Entity workstationType = subassembly.getBelongsToField(SubassemblyFields.WORKSTATION_TYPE);
filter.put(MaintenanceEventFields.SUBASSEMBLY, subassembly.getId());
filter.put(WorkstationFields.WORKSTATION_TYPE, workstationType.getId());
}
}
faultTypeLookup.setFilterValue(filter);
}
public void setEventIdForMultiUploadField(final ViewDefinitionState view) {
FormComponent technology = (FormComponent) view.getComponentByReference(L_FORM);
FieldComponent technologyIdForMultiUpload = (FieldComponent) view.getComponentByReference("eventIdForMultiUpload");
FieldComponent technologyMultiUploadLocale = (FieldComponent) view.getComponentByReference("eventMultiUploadLocale");
if (technology.getEntityId() != null) {
technologyIdForMultiUpload.setFieldValue(technology.getEntityId());
technologyIdForMultiUpload.requestComponentUpdateState();
} else {
technologyIdForMultiUpload.setFieldValue("");
technologyIdForMultiUpload.requestComponentUpdateState();
}
technologyMultiUploadLocale.setFieldValue(LocaleContextHolder.getLocale());
technologyMultiUploadLocale.requestComponentUpdateState();
}
private void toggleOldSolutionsButton(ViewDefinitionState view) {
WindowComponent windowComponent = (WindowComponent) view.getComponentByReference("window");
Ribbon ribbon = windowComponent.getRibbon();
RibbonGroup solutionsRibbonGroup = ribbon.getGroupByName("solutions");
RibbonActionItem showSolutionsRibbonActionItem = solutionsRibbonGroup.getItemByName("showSolutions");
FormComponent formComponent = (FormComponent) view.getComponentByReference(L_FORM);
Entity event = formComponent.getPersistedEntityWithIncludedFormValues();
showSolutionsRibbonActionItem.setEnabled(event.getId() != null);
showSolutionsRibbonActionItem.requestUpdate(true);
}
public final void onBeforeRenderListView(final ViewDefinitionState view) {
FieldComponent acceptanceEvents = (FieldComponent) view.getComponentByReference(PlannedEventFields.ACCEPTANCE_EVENTS);
acceptanceEvents.setFieldValue(parameterService.getParameter().getBooleanField(ParameterFieldsCMP.ACCEPTANCE_EVENTS));
maintenanceEventContextService.beforeRenderListView(view);
hideAccordingToRole(view);
}
public final void onBeforeRenderPlannedListView(final ViewDefinitionState view) {
FieldComponent acceptanceEvents = (FieldComponent) view.getComponentByReference(PlannedEventFields.ACCEPTANCE_EVENTS);
acceptanceEvents.setFieldValue(parameterService.getParameter().getBooleanField(ParameterFieldsCMP.ACCEPTANCE_EVENTS));
maintenanceEventContextService.beforeRenderListView(view);
}
public void hideAccordingToRole(ViewDefinitionState view) {
Entity user = userService.getCurrentUserEntity();
for (EventRoles role : EventRoles.values()) {
if (!securityService.hasRole(user, role.toString())) {
role.disableFieldsWhenNotInRole(view);
}
}
if (!parameterService.getParameter().getBooleanField(ParameterFieldsCMP.ACCEPTANCE_EVENTS)) {
if (!securityService.hasRole(user, EventRoles.ROLE_EVENTS_CLOSE.toString())) {
enableCloseEvents(view, false);
} else {
enableCloseEvents(view, true);
}
}
}
private void enableCloseEvents(final ViewDefinitionState view, final boolean enable) {
if (eventInState(view, MaintenanceEventState.EDITED) || eventInState(view, MaintenanceEventState.ACCEPTED)) {
enableFromRibbonGroup(view, enable, "status", "closeEvent");
}
}
private boolean eventInState(final ViewDefinitionState view, final MaintenanceEventState state) {
FormComponent form = (FormComponent) view.getComponentByReference(L_FORM);
Entity event = form.getEntity();
String eventState = event.getStringField(MaintenanceEventFields.STATE);
if (eventState == null) {
GridComponent grid = (GridComponent) view.getComponentByReference("grid");
List<Entity> entities = grid.getSelectedEntities();
if (entities.isEmpty()) {
return false;
}
return entities.stream().allMatch(e -> state.getStringValue().equals(e.getStringField(MaintenanceEventFields.STATE)));
}
return state.getStringValue().equals(eventState);
}
private void enableFromRibbonGroup(final ViewDefinitionState view, final boolean enable, final String groupName,
String... items) {
WindowComponent window = (WindowComponent) view.getComponentByReference(L_WINDOW);
Ribbon ribbon = window.getRibbon();
RibbonGroup ribbonGroup = ribbon.getGroupByName(groupName);
if (ribbonGroup != null) {
for (String item : items) {
RibbonActionItem ribbonItem = ribbonGroup.getItemByName(item);
if (ribbonItem != null) {
ribbonItem.setEnabled(enable);
ribbonItem.requestUpdate(true);
}
}
}
}
}