protected NestedDatasource createEmbeddedDatasource() { return new EmbeddedDatasourceImpl(); }
@Override public void committed(Set<Entity> entities) { Entity item = masterDs.getItem(); Entity newItem = null; Entity previousItem = null; if (item != null) { Iterator<Entity> commitIter = entities.iterator(); while (commitIter.hasNext() && (previousItem == null) && (newItem == null)) { Entity commitItem = commitIter.next(); if (commitItem.equals(item)) { previousItem = item; newItem = commitItem; } } if (previousItem != null) { detachListener(getItem(previousItem)); } if (newItem != null) { attachListener(getItem(newItem)); } } modified = false; clearCommitLists(); }
protected void reattachListeners(Entity prevItem, Entity item) { if (prevItem != item) { detachListener(prevItem); attachListener(item); } }
protected void initParentDsListeners() { //noinspection unchecked masterDs.addItemChangeListener(e -> { Entity prevValue = getItem(e.getPrevItem()); Entity newValue = getItem(e.getItem()); reattachListeners(prevValue, newValue); fireItemChanged((T) prevValue); }); //noinspection unchecked masterDs.addStateChangeListener(e -> fireStateChanged(e.getPrevState())); //noinspection unchecked masterDs.addItemPropertyChangeListener(e -> { if (e.getProperty().equals(metaProperty.getName()) && !Objects.equals(e.getPrevValue(), e.getValue())) { reattachListeners((Entity) e.getPrevValue(), (Entity) e.getValue()); fireItemChanged((T) e.getPrevValue()); } }); }
@Override public void setItem(T item) { backgroundWorker.checkUIAccess(); if (getItem() != null) { metadata.getTools().copy(item, getItem()); itemsToUpdate.add(item); } else { final Instance parentItem = masterDs.getItem(); parentItem.setValue(metaProperty.getName(), item); } setModified(true); ((DatasourceImplementation) masterDs).modified(masterDs.getItem()); }
@Override public void commit() { if (!allowCommit) { return; } clearCommitLists(); modified = false; }
@Override public T getItem() { backgroundWorker.checkUIAccess(); final Instance item = masterDs.getItem(); return getItem(item); }
@Override public void setup(String id, Datasource masterDs, String property) { this.id = id; this.masterDs = masterDs; metaProperty = masterDs.getMetaClass().getProperty(property); initParentDsListeners(); }
@Override public View getView() { final ViewProperty property = masterDs.getView().getProperty(metaProperty.getName()); return property == null ? null : metadata.getViewRepository().getView(getMetaClass(), property.getView().getName()); }
protected void createNestedEmbeddedDatasources(Datasource masterDs, MetaClass metaClass, String fqnPrefix) { for (MetaProperty metaProperty : metaClass.getProperties()) { if (MetaProperty.Type.ASSOCIATION == metaProperty.getType() || MetaProperty.Type.COMPOSITION == metaProperty.getType()) { String fqn = metaProperty.getName(); if (StringUtils.isNotEmpty(fqnPrefix)) { fqn = fqnPrefix + "." + fqn; } if (managedEmbeddedProperties.contains(fqn) && metadataTools.isEmbedded(metaProperty)) { MetaClass propertyMetaClass = metaProperty.getRange().asClass(); @SuppressWarnings("unchecked") NestedDatasource<Entity> propertyDs = new EmbeddedDatasourceImpl(); propertyDs.setup(fqn + "Ds", masterDs, metaProperty.getName()); propertyDs.setAllowCommit(false); createNestedEmbeddedDatasources(propertyDs, propertyMetaClass, fqn); datasources.put(fqn, propertyDs); dsContext.register(propertyDs); } } } }
protected void createNestedEmbeddedDatasources(MetaClass metaClass, String fqnPrefix, Datasource masterDs) { for (MetaProperty metaProperty : metaClass.getProperties()) { if (MetaProperty.Type.ASSOCIATION == metaProperty.getType() || MetaProperty.Type.COMPOSITION == metaProperty.getType()) { if (isEmbedded(metaProperty)) { String fqn = fqnPrefix + "." + metaProperty.getName(); MetaClass propertyMetaClass = metaProperty.getRange().asClass(); NestedDatasource propertyDs = new EmbeddedDatasourceImpl(); propertyDs.setup(fqn + "Ds", masterDs, metaProperty.getName()); createNestedEmbeddedDatasources(propertyMetaClass, fqn, propertyDs); datasources.put(fqn, propertyDs); dsContext.register(propertyDs); } } } }
} else { if (isEmbedded(metaProperty)) { propertyDs = new EmbeddedDatasourceImpl(); } else { propertyDs = new PropertyDatasourceImpl();