@Override public MetaClass getEntityMetaClass() { return container.getEntityMetaClass(); }
protected InstanceContainer<E> createInstanceContainer(E item) { if (itemContainers == null) { itemContainers = new WeakHashMap<>(); } InstanceContainer<E> container = itemContainers.get(item); if (container != null) { return container; } EntityDataGridItems<E> items = getEntityDataGridItemsNN(); DataComponents factory = beanLocator.get(DataComponents.class); ViewRepository viewRepository = beanLocator.get(ViewRepository.NAME); MetaClass metaClass = items.getEntityMetaClass(); InstanceContainer<E> instanceContainer = factory.createInstanceContainer(metaClass.getJavaClass()); instanceContainer.setView(viewRepository.getView(metaClass, View.LOCAL)); instanceContainer.setItem(item); itemContainers.put(item, instanceContainer); return instanceContainer; }
/** * Creates {@code CollectionPropertyContainer}. */ @SuppressWarnings("unchecked") public <E extends Entity> CollectionPropertyContainer<E> createCollectionContainer(Class<E> entityClass, InstanceContainer<? extends Entity> masterContainer, String property) { CollectionPropertyContainerImpl<E> container = new CollectionPropertyContainerImpl<>( metadata.getClassNN(entityClass), masterContainer, property); if (security.isEntityAttrReadPermitted(masterContainer.getEntityMetaClass(), property) && security.isEntityOpPermitted(entityClass, EntityOp.READ)) { masterContainer.addItemChangeListener(e -> { Entity item = masterContainer.getItemOrNull(); container.setItems(item != null ? item.getValue(property) : null); }); masterContainer.addItemPropertyChangeListener(e -> { if (e.getProperty().equals(property)) { container.setDisconnectedItems((Collection<E>) e.getValue()); } }); } return container; }
protected View resolveView() { View view = this.view; if (view == null && viewName != null) { view = getViewRepository().getView(container.getEntityMetaClass(), viewName); } if (view == null) { view = container.getView(); } return view; }
@Override public void setBeanLocator(BeanLocator beanLocator) { MetaClass metaClass = container.getEntityMetaClass(); this.container.addItemChangeListener(this::containerItemChanged); this.container.addItemPropertyChangeListener(this::containerItemPropertyChanged); InstanceContainer<Entity> propertyCont = dataComponents.createInstanceContainer(intermediatePath.getRangeJavaClass()); parentCont.addItemChangeListener(event -> { if (event.getItem() != null) { setState(BindingState.ACTIVE); setState(BindingState.INACTIVE); propertyCont.setItem(event.getItem() != null ? event.getItem().getValueEx(intermediatePath.getMetaProperty().getName()) : null); }); parentCont.addItemPropertyChangeListener(event -> { if (Objects.equals(event.getProperty(), intermediatePath.getMetaProperty().getName())) { Entity entity = (Entity) event.getValue(); Entity prevEntity = (Entity) event.getPrevValue(); propertyCont.setItem(entity); propertyCont.addItemPropertyChangeListener(event -> { if (Objects.equals(event.getProperty(), this.metaPropertyPath.getMetaProperty().getName())) { events.publish(ValueChangeEvent.class,
/** * Adds a listener that reloads the selected record and sets it to editCt. */ protected void initBrowseItemChangeListener() { getBrowseContainer().addItemChangeListener(e -> { if (e.getItem() != null) { InstanceLoader<T> editLoader = getEditLoader(); DynamicAttributesGuiTools tools = getBeanLocator().get(DynamicAttributesGuiTools.NAME); String screenId = getScreenContext().getWindowInfo().getId(); if (tools.screenContainsDynamicAttributes(getEditContainer().getView(), screenId)) { editLoader.setLoadDynamicAttributes(true); } editLoader.setEntityId(e.getItem().getId()); editLoader.load(); } else { if (!editing) { getEditContainer().setItem(null); } } }); }
@Override public void load() { if (container == null) throw new IllegalStateException("container is null"); E entity; if (delegate == null) { if (!needLoad()) return; LoadContext<E> loadContext = createLoadContext(); entity = getDataManager().load(loadContext); if (entity == null) { throw new EntityAccessException(container.getEntityMetaClass(), entityId); } } else { entity = delegate.apply(createLoadContext()); } if (dataContext != null) { entity = dataContext.merge(entity); } container.setItem(entity); }
/** * 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(); }
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()); } } }
@Override public E getItem() { return container.getItemOrNull(); }
protected void loadView(Element element, Class<Entity> entityClass, InstanceContainer<Entity> container) { String viewName = element.attributeValue("view"); if (viewName != null) { container.setView(viewRepository.getView(entityClass, viewName)); } }
@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 boolean doNotReloadEditedEntity() { if (isEntityModifiedInParentContext()) { InstanceContainer<T> container = getEditedEntityContainer(); if (getEntityStates().isLoadedWithView(entityToEdit, container.getView())) { return true; } } return false; }
/** * Sets value to the component without triggering change listeners for ContainerValueSource and without changing * a modify state of Datasource. * * @param item value */ protected void setValueSilently(V item) { boolean modified = false; if (getDatasource() != null) { modified = getDatasource().isModified(); } else { ((ContainerValueSource) getValueSource()).getContainer().mute(); } setValue(item); if (getDatasource() != null) { ((DatasourceImplementation) getDatasource()).setModified(modified); } else { ((ContainerValueSource) getValueSource()).getContainer().unmute(); } }
if (((HasLoader) editedEntityContainer).getLoader() instanceof InstanceLoader) { instanceLoader = getEditedEntityLoader(); if (tools.screenContainsDynamicAttributes(editedEntityContainer.getView(), screenId)) { instanceLoader.setLoadDynamicAttributes(true); container.setItem(mergedEntity); } else { InstanceLoader loader = getEditedEntityLoader();
@Override public BindingState getState() { return container.getItemOrNull() == null ? BindingState.INACTIVE : BindingState.ACTIVE; }
protected void updateMaster() { MetaProperty masterProperty = getMasterProperty(); Collection masterCollection = master.getItem().getValue(masterProperty.getName()); updateMasterCollection(masterProperty, masterCollection, this.collection); }
protected MetaProperty getMasterProperty() { MetaClass masterMetaClass = master.getEntityMetaClass(); MetaProperty masterProperty = masterMetaClass.getPropertyNN(property); if (!masterProperty.getRange().getCardinality().isMany()) { throw new IllegalStateException(String.format("Property '%s' is not a collection", property)); } return masterProperty; }
/** * Creates {@code InstancePropertyContainer}. */ @SuppressWarnings("unchecked") public <E extends Entity> InstancePropertyContainer<E> createInstanceContainer(Class<E> entityClass, InstanceContainer<? extends Entity> masterContainer, String property) { InstancePropertyContainerImpl<E> container = new InstancePropertyContainerImpl<>( metadata.getClassNN(entityClass), masterContainer, property); if (security.isEntityAttrReadPermitted(masterContainer.getEntityMetaClass(), property) && security.isEntityOpPermitted(entityClass, EntityOp.READ)) { masterContainer.addItemChangeListener(e -> { Entity item = masterContainer.getItemOrNull(); container.setItem(item != null ? item.getValue(property) : null); }); masterContainer.addItemPropertyChangeListener(e -> { if (e.getProperty().equals(property)) { container.setItem((E) e.getValue()); } }); } return container; }