@Override public R getHistoryFactory(String id) { DataAndStoredMetadata<R,S> data = storage.get(id); return data.root.internal().copy(); }
public DataMerger(R currentData, R commonData, R newData) { if (currentData==commonData){ throw new IllegalArgumentException("Arguments: currentData and commonData can't be the same, use .utility().copy() to create a copy"); } currentData.internal().addBackReferences(); commonData.internal().addBackReferences(); newData.internal().addBackReferences(); this.currentData = currentData; this.commonData = commonData; this.newData = newData; }
public InMemoryDataStorage(R initialFactory, ChangeSummaryCreator<R,S> changeSummaryCreator){ initialFactory.internal().addBackReferences(); this.initialFactory=initialFactory; this.changeSummaryCreator = changeSummaryCreator; }
@Override @SuppressWarnings("unchecked") public Collection<T> apply(Data root) { List<T> result = new ArrayList<>(); for (Data factory : root.internal().collectChildrenDeep()) { if (clazz.isAssignableFrom(factory.getClass())) { result.add((T) factory); } } return result; } }
public String getDisplayText() { if (text==null && data!=null){ return data.internal().getDisplayText(); } return text; }
@JsonIgnore @Override public String getDisplayText() { String referenceDisplayText = "empty"; if (value!=null){ referenceDisplayText=value.internal().getDisplayText(); } return referenceDisplayText; }
private boolean treeStructureChanged(Data root){ if (root!=null) { return lastSize != root.internal().collectChildrenDeep().size(); } return false; }
public DataObservableDisplayText(Data data){ if (data.internal().getDisplayTextObservable() instanceof SimpleStringProperty){ simpleStringProperty=(SimpleStringProperty)data.internal().getDisplayTextObservable(); } simpleStringProperty.set(data.internal().getDisplayText()); data.internal().addDisplayTextListeners((attributeParam, value) -> simpleStringProperty.set(data.internal().getDisplayText())); data.internal().storeDisplayTextObservable(simpleStringProperty); }
private void validate(R root) { List<ValidationError> validationErrors=new ArrayList<>(); for (Data data : root.internal().collectChildrenDeep()) { validationErrors.addAll(data.internal().validateFlat()); } if (!validationErrors.isEmpty()){ throw new IllegalStateException("\n Factory tree contains validation errors:\n --------------------------------\n"+ validationErrors.stream().map(ValidationError::getSimpleErrorDescription).collect(Collectors.joining( "\n --------------------------------\n"))+ "\n --------------------------------" ); } }
@SuppressWarnings("unchecked") private <T> T readInternal(ReaderFunction<T> function) { try { T value = function.read(); if (value instanceof Data) { return (T) ((Data) value).internal().addBackReferences(); } return value; } catch (IOException e) { throw new RuntimeException(e); } }
@Override public DataAndStoredMetadata<R,S> getCurrentFactory() { DataAndStoredMetadata<R,S> result = storage.get(currentFactoryStorageId); return new DataAndStoredMetadata<>(result.root.internal().copy(),result.metadata); }
@Override public void set(T value) { this.value=value; if (root!=null && value!=null) { value.internal().addBackReferencesForSubtree(root,this.parent); } if (listeners!=null) { for (AttributeChangeListener<T, A> listener : listeners) { listener.changed(this, value); } } }
@Override public String getDisplayText() { String referenceDisplayText = "empty"; T value = get(); if (value !=null){ referenceDisplayText=value.internal().getDisplayText(); } return referenceDisplayText; }
@SuppressWarnings("unchecked") public MergeDiffInfo<R> executeMerge() { if (hasNoConflicts() && hasNoPermissionViolation()){ for (Runnable mergeAction : mergeExecutions) { mergeAction.run(); } currentRoot.internal().fixDuplicatesAndAddBackReferences(); } return new MergeDiffInfo<>(mergeInfos, conflictInfos, mergePermissionViolations, previousRoot, currentRoot, (Class<R>) currentRoot.getClass()); }
@SuppressWarnings("unchecked") public L create(Data data){ //TODO add generic root to data? R rootFactory= (R) data.internal().getRoot(); final R copy = rootFactory.internal().copy(); return subRootFactoryProvider.apply(copy).internalFactory().create(); }
public void applyToRootFactoryDeep(R root) { factoryTreeBuilder.fillFromExistingFactoryTree(root); root.internal().collectChildrenDeep().forEach(data -> { data.internal().visitAttributesFlat((attributeVariableName, attribute) -> applyToAttribute(attribute)); }); } }
@Override public void internal_semanticCopyTo(A copyAttribute) { if (getCopySemantic()==CopySemantic.SELF){ copyAttribute.set(get()); } else { for (T item: get()){ final T itemCopy = item.internal().semanticCopy(); if (itemCopy!=null){ copyAttribute.get().add(itemCopy); } } } }
@Override public void internal_semanticCopyTo(A copyAttribute) { if (get()!=null){ if (getCopySemantic()==CopySemantic.SELF){ copyAttribute.set(get()); } else { copyAttribute.set(get().internal().semanticCopy()); } } }