@SuppressWarnings("unchecked") private void updateMasterCollection(MetaProperty metaProperty, @Nullable Collection masterCollection, @Nullable Collection<E> newCollection) { if (newCollection == null) { master.getItem().setValue(metaProperty.getName(), null); } else { if (masterCollection == null) { if (List.class.isAssignableFrom(metaProperty.getJavaType())) { masterCollection = new ArrayList(newCollection); } else { masterCollection = new LinkedHashSet(newCollection); } master.getItem().setValue(metaProperty.getName(), masterCollection); } else { masterCollection.clear(); masterCollection.addAll(newCollection); if (master instanceof ItemPropertyChangeNotifier) { Instance.PropertyChangeEvent event = new Instance.PropertyChangeEvent( master.getItem(), metaProperty.getName(), masterCollection, masterCollection ); ((ItemPropertyChangeNotifier) master).itemPropertyChanged(event); } } } } }
protected void updateMaster() { MetaProperty masterProperty = getMasterProperty(); Collection masterCollection = master.getItem().getValue(masterProperty.getName()); updateMasterCollection(masterProperty, masterCollection, this.collection); }
/** * Validates the cross-field rules if passed validation errors are empty. * * @param errors errors found during components validation */ protected void validateAdditionalRules(ValidationErrors errors) { // all previous validations return no errors if (isCrossFieldValidate() && errors.isEmpty()) { ScreenValidation screenValidation = getBeanLocator().get(ScreenValidation.NAME); ValidationErrors validationErrors = screenValidation.validateCrossFieldRules(this, getEditContainer().getItem()); errors.addAll(validationErrors); } }
protected <E extends Entity> void initializeNestedEntity(E entity, Nested container) { InstanceContainer masterContainer = container.getMaster(); String property = container.getProperty(); MetaClass masterMetaClass = masterContainer.getEntityMetaClass(); MetaProperty metaProperty = masterMetaClass.getPropertyNN(property); MetaProperty inverseProp = metaProperty.getInverse(); if (inverseProp != null) { Class<?> inversePropClass = extendedEntities.getEffectiveClass(inverseProp.getDomain()); Class<?> containerEntityClass = extendedEntities.getEffectiveClass(((CollectionContainer) container).getEntityMetaClass()); if (inversePropClass.isAssignableFrom(containerEntityClass)) { entity.setValue(inverseProp.getName(), masterContainer.getItem()); } } }
@SuppressWarnings("unchecked") protected <E extends Entity> void excludeItems(RemoveBuilder<E> builder, List<E> selectedItems) { CollectionContainer<E> container = getCollectionContainer(builder); if (!(container instanceof Nested)) { throw new IllegalArgumentException("Exclude action supports only Nested containers"); } InstanceContainer masterDc = ((Nested) container).getMaster(); String property = ((Nested) container).getProperty(); Entity masterItem = masterDc.getItem(); MetaProperty metaProperty = masterItem.getMetaClass().getPropertyNN(property); MetaProperty inverseMetaProperty = metaProperty.getInverse(); if (inverseMetaProperty != null && !inverseMetaProperty.getRange().getCardinality().isMany()) { Class inversePropClass = extendedEntities.getEffectiveClass(inverseMetaProperty.getDomain()); Class dcClass = extendedEntities.getEffectiveClass(container.getEntityMetaClass()); if (inversePropClass.isAssignableFrom(dcClass)) { // update reference for One-To-Many for (Entity item : selectedItems) { item.setValue(inverseMetaProperty.getName(), null); } } } container.getMutableItems().removeAll(selectedItems); focusListComponent(builder); }
masterItem = masterDc.getItem();
/** * Method invoked when clicking on the Ok button after editing an existing or creating a new record. */ public void saveChanges() { if (!editing) return; ValidationErrors validationErrors = validateEditorForm(); if (!validationErrors.isEmpty()) { ScreenValidation screenValidation = getBeanLocator().get(ScreenValidation.class); screenValidation.showValidationErrors(this, validationErrors); return; } getScreenData().getDataContext().commit(); T editedItem = getEditContainer().getItem(); if (creating) { getBrowseContainer().getMutableItems().add(0, editedItem); } else { getBrowseContainer().replaceItem(editedItem); } getTable().setSelected(editedItem); releaseLock(); disableEditControls(); }
/** * Method invoked when clicking the Cancel button, discards changes and disables controls for editing. */ public void discardChanges() { releaseLock(); getScreenData().getDataContext().evict(getEditContainer().getItem()); getEditContainer().setItem(null); T selectedItem = getBrowseContainer().getItemOrNull(); if (selectedItem != null) { View view = getEditContainer().getView(); boolean loadDynamicAttributes = getEditLoader().isLoadDynamicAttributes(); T reloadedItem = getBeanLocator().get(DataManager.class) .reload(selectedItem, view, null, loadDynamicAttributes); getBrowseContainer().setItem(reloadedItem); } disableEditControls(); }