protected void setupModifiedTracking() { DataContext dataContext = getScreenData().getDataContext(); if (dataContext != null) { dataContext.addChangeListener(this::editedEntityModified); dataContext.addPostCommitListener(this::editedEntityCommitted); } }
protected boolean isEntityModifiedInParentContext() { boolean result = false; DataContext parentDc = getScreenData().getDataContext().getParent(); while (!result && parentDc != null) { result = isEntityModifiedRecursive(entityToEdit, parentDc, new HashSet<>()); parentDc = parentDc.getParent(); } return result; }
@Override public boolean hasUnsavedChanges() { if (isReadOnly()) { return false; } return isEntityModified() && getScreenData().getDataContext().hasChanges(); }
@Nullable protected DataContext setupParentDataContext(FrameOwner origin, Screen screen, InstanceContainer container, DataContext parentContext) { DataContext dataContext = parentContext; if (dataContext == null && container instanceof Nested) { InstanceContainer masterContainer = ((Nested) container).getMaster(); String property = ((Nested) container).getProperty(); MetaClass masterMetaClass = masterContainer.getEntityMetaClass(); MetaProperty metaProperty = masterMetaClass.getPropertyNN(property); if (metaProperty.getType() == MetaProperty.Type.COMPOSITION) { dataContext = UiControllerUtils.getScreenData(origin).getDataContext(); } } if (dataContext != null) { UiControllerUtils.getScreenData(screen).getDataContext().setParent(dataContext); } return dataContext; }
hostDataContext = hostScreenData.getDataContext();
protected void commitIfNeeded(Collection<? extends Entity> entitiesToRemove, CollectionContainer container, ScreenData screenData) { boolean needCommit = true; if (container instanceof Nested) { InstanceContainer masterContainer = ((Nested) container).getMaster(); String property = ((Nested) container).getProperty(); MetaClass masterMetaClass = masterContainer.getEntityMetaClass(); MetaProperty metaProperty = masterMetaClass.getPropertyNN(property); needCommit = metaProperty.getType() != MetaProperty.Type.COMPOSITION; } if (needCommit) { CommitContext commitContext = new CommitContext(); for (Entity entity : entitiesToRemove) { commitContext.addInstanceToRemove(entity); } dataManager.commit(commitContext); for (Entity entity : entitiesToRemove) { screenData.getDataContext().evict(entity); } } else { for (Entity entity : entitiesToRemove) { screenData.getDataContext().remove(entity); } } }
targetInstance = UiControllerUtils.getScreenData(frameOwner).getDataContext(); break;
protected void loadInstanceLoader(ScreenData screenData, Element element, InstanceContainer<Entity> container, @Nullable ScreenData hostScreenData) { InstanceLoader<Entity> loader; String loaderId = element.attributeValue("id"); if (loaderId == null) { loaderId = generateId(); } if (checkProvided(element, hostScreenData)) { //noinspection ConstantConditions loader = hostScreenData.getLoader(loaderId); } else { loader = factory.createInstanceLoader(); loader.setDataContext(screenData.getDataContext()); loader.setContainer(container); loadSoftDeletion(element, loader); loadDynamicAttributes(element, loader); loadQuery(element, loader); loadEntityId(element, loader); } screenData.registerLoader(loaderId, loader); }
eventTarget = UiControllerUtils.getScreenData(frameOwner).getDataContext(); break;
return data.getDataContext();
protected void loadCollectionLoader(ScreenData screenData, Element element, CollectionContainer<Entity> container, @Nullable ScreenData hostScreenData) { CollectionLoader<Entity> loader; String loaderId = element.attributeValue("id"); if (loaderId == null) { loaderId = generateId(); } if (checkProvided(element, hostScreenData)) { //noinspection ConstantConditions loader = hostScreenData.getLoader(loaderId); } else { loader = factory.createCollectionLoader(); loader.setDataContext(screenData.getDataContext()); loader.setContainer(container); loadQuery(element, loader); loadSoftDeletion(element, loader); loadDynamicAttributes(element, loader); loadFirstResult(element, loader); loadMaxResults(element, loader); loadCacheable(element, loader); } screenData.registerLoader(loaderId, loader); }
DataContext dataContext = UiControllerUtils.getScreenData(builder.getOrigin()).getDataContext();
/** * Validates screen and commits data context. * * @return operation result */ protected OperationResult commitChanges() { ValidationErrors validationErrors = validateScreen(); if (!validationErrors.isEmpty()) { ScreenValidation screenValidation = getBeanLocator().get(ScreenValidation.class); screenValidation.showValidationErrors(this, validationErrors); return OperationResult.fail(); } getScreenData().getDataContext().commit(); return OperationResult.success(); }
/** * 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(); }
protected void setupEntityToEdit() { if (getScreenData().getDataContext() == null) { throw new IllegalStateException("No DataContext defined. Make sure the editor screen XML descriptor has <data> element"); T mergedEntity = getScreenData().getDataContext().merge(entityToEdit);
/** * 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(); }
createAction.withHandler(actionPerformedEvent -> { T entity = getBeanLocator().get(Metadata.class).create(getEntityClass()); T trackedEntity = getScreenData().getDataContext().merge(entity);