Java 类org.eclipse.emf.ecore.change.ChangeDescription 实例源码
项目:DarwinSPL
文件:HyexpressionExpectedTerminal.java
/**
* This method creates a model that reflects the state that would be obtained if
* this proposal was accepted. This model can differ from the current model,
* because different proposals can result in different models. The code that is
* passed as argument is executed once the (changed) model was created. After
* executing the given code, all changes are reverted.
*/
public void materialize(Runnable code) {
EObject root = EcoreUtil.getRootContainer(getContainer());
if (root == null) {
code.run();
return;
}
ChangeRecorder recorder = new ChangeRecorder();
recorder.beginRecording(Collections.singleton(root));
// attach proposal model fragment to main model
Runnable attachmentCode = getAttachmentCode();
if (attachmentCode != null) {
// Applying attachment code
attachmentCode.run();
}
ChangeDescription changes = recorder.endRecording();
code.run();
// revert changes
changes.apply();
}
项目:DarwinSPL
文件:HymanifestExpectedTerminal.java
/**
* This method creates a model that reflects the state that would be obtained if
* this proposal was accepted. This model can differ from the current model,
* because different proposals can result in different models. The code that is
* passed as argument is executed once the (changed) model was created. After
* executing the given code, all changes are reverted.
*/
public void materialize(Runnable code) {
EObject root = EcoreUtil.getRootContainer(getContainer());
if (root == null) {
code.run();
return;
}
ChangeRecorder recorder = new ChangeRecorder();
recorder.beginRecording(Collections.singleton(root));
// attach proposal model fragment to main model
Runnable attachmentCode = getAttachmentCode();
if (attachmentCode != null) {
// Applying attachment code
attachmentCode.run();
}
ChangeDescription changes = recorder.endRecording();
code.run();
// revert changes
changes.apply();
}
项目:DarwinSPL
文件:HymappingExpectedTerminal.java
/**
* This method creates a model that reflects the state that would be obtained if
* this proposal was accepted. This model can differ from the current model,
* because different proposals can result in different models. The code that is
* passed as argument is executed once the (changed) model was created. After
* executing the given code, all changes are reverted.
*/
public void materialize(Runnable code) {
EObject root = EcoreUtil.getRootContainer(getContainer());
if (root == null) {
code.run();
return;
}
ChangeRecorder recorder = new ChangeRecorder();
recorder.beginRecording(Collections.singleton(root));
// attach proposal model fragment to main model
Runnable attachmentCode = getAttachmentCode();
if (attachmentCode != null) {
// Applying attachment code
attachmentCode.run();
}
ChangeDescription changes = recorder.endRecording();
code.run();
// revert changes
changes.apply();
}
项目:DarwinSPL
文件:HyconstraintsExpectedTerminal.java
/**
* This method creates a model that reflects the state that would be obtained if
* this proposal was accepted. This model can differ from the current model,
* because different proposals can result in different models. The code that is
* passed as argument is executed once the (changed) model was created. After
* executing the given code, all changes are reverted.
*/
public void materialize(Runnable code) {
EObject root = EcoreUtil.getRootContainer(getContainer());
if (root == null) {
code.run();
return;
}
ChangeRecorder recorder = new ChangeRecorder();
recorder.beginRecording(Collections.singleton(root));
// attach proposal model fragment to main model
Runnable attachmentCode = getAttachmentCode();
if (attachmentCode != null) {
// Applying attachment code
attachmentCode.run();
}
ChangeDescription changes = recorder.endRecording();
code.run();
// revert changes
changes.apply();
}
项目:DarwinSPL
文件:HyvalidityformulaExpectedTerminal.java
/**
* This method creates a model that reflects the state that would be obtained if
* this proposal was accepted. This model can differ from the current model,
* because different proposals can result in different models. The code that is
* passed as argument is executed once the (changed) model was created. After
* executing the given code, all changes are reverted.
*/
public void materialize(Runnable code) {
EObject root = EcoreUtil.getRootContainer(getContainer());
if (root == null) {
code.run();
return;
}
ChangeRecorder recorder = new ChangeRecorder();
recorder.beginRecording(Collections.singleton(root));
// attach proposal model fragment to main model
Runnable attachmentCode = getAttachmentCode();
if (attachmentCode != null) {
// Applying attachment code
attachmentCode.run();
}
ChangeDescription changes = recorder.endRecording();
code.run();
// revert changes
changes.apply();
}
项目:DarwinSPL
文件:HydatavalueExpectedTerminal.java
/**
* This method creates a model that reflects the state that would be obtained if
* this proposal was accepted. This model can differ from the current model,
* because different proposals can result in different models. The code that is
* passed as argument is executed once the (changed) model was created. After
* executing the given code, all changes are reverted.
*/
public void materialize(Runnable code) {
EObject root = EcoreUtil.getRootContainer(getContainer());
if (root == null) {
code.run();
return;
}
ChangeRecorder recorder = new ChangeRecorder();
recorder.beginRecording(Collections.singleton(root));
// attach proposal model fragment to main model
Runnable attachmentCode = getAttachmentCode();
if (attachmentCode != null) {
// Applying attachment code
attachmentCode.run();
}
ChangeDescription changes = recorder.endRecording();
code.run();
// revert changes
changes.apply();
}
项目:DarwinSPL
文件:DwprofileExpectedTerminal.java
/**
* This method creates a model that reflects the state that would be obtained if
* this proposal was accepted. This model can differ from the current model,
* because different proposals can result in different models. The code that is
* passed as argument is executed once the (changed) model was created. After
* executing the given code, all changes are reverted.
*/
public void materialize(Runnable code) {
EObject root = EcoreUtil.getRootContainer(getContainer());
if (root == null) {
code.run();
return;
}
ChangeRecorder recorder = new ChangeRecorder();
recorder.beginRecording(Collections.singleton(root));
// attach proposal model fragment to main model
Runnable attachmentCode = getAttachmentCode();
if (attachmentCode != null) {
// Applying attachment code
attachmentCode.run();
}
ChangeDescription changes = recorder.endRecording();
code.run();
// revert changes
changes.apply();
}
项目:Vitruv
文件:ChangeDescriptionPrinter.java
public static void printChangeDescription(ChangeDescription cd) {
System.err.println("* Saved, detected a change.");
System.err.println("* Saved, got change desc: " + cd.toString());
System.err.println("* CD Class: " + cd.getClass().getCanonicalName());
EMap<EObject, EList<FeatureChange>> changes = cd.getObjectChanges();
for (EObject obj : changes.keySet()) {
if (obj == null) {
System.err.println("Got null object");
continue;
}
System.err.println("Object: " + obj.toString());
EList<FeatureChange> fcList = changes.get(obj);
for (FeatureChange fc : fcList) {
processFeatureChange(obj, fc, " ");
}
}
}
项目:xtext-core
文件:RelatedXtextResourceUpdater.java
@Override
public void applyChange(Deltas deltas, IAcceptor<IEmfResourceChange> changeAcceptor) {
XtextResource res = (XtextResource) lifecycleManager.openAndApplyReferences(getResourceSet(), getResource());
if (!referenceUpdater.isAffected(deltas, getResource())) {
return;
}
ITextRegionAccess base = textRegionBuilderProvider.get().forNodeModel(res).create();
ITextRegionDiffBuilder rewriter = new StringBasedTextRegionAccessDiffBuilder(base);
ReferenceUpdaterContext context = new ReferenceUpdaterContext(deltas, rewriter);
referenceUpdater.update(context);
if (!context.getModifications().isEmpty()) {
ChangeRecorder rec = new ChangeRecorder(res);
for (Runnable run : context.getModifications()) {
run.run();
}
ChangeDescription recording = rec.endRecording();
ResourceSet rs = res.getResourceSet();
ResourceSetRecording tree = changeTreeProvider.createChangeTree(rs, Collections.emptyList(), recording);
ResourceRecording recordedResource = tree.getRecordedResource(res);
serializer.serializeChanges(recordedResource, rewriter);
}
for (IUpdatableReference upd : context.getUpdatableReferences()) {
referenceUpdater.updateReference(rewriter, upd);
}
ITextRegionAccessDiff rewritten = rewriter.create();
List<ITextReplacement> rep = formatter.format(rewritten);
TextDocumentChange change = new TextDocumentChange(rewritten, getResource().getUri(), rep);
changeAcceptor.accept(change);
}
项目:xtext-core
文件:RecordingXtextResourceUpdater.java
@Override
public void applyChange(Deltas deltas, IAcceptor<IEmfResourceChange> changeAcceptor) {
Resource resource = snapshot.getResource();
ResourceSet rs = resource.getResourceSet();
ReferenceUpdaterContext ctx = new ReferenceUpdaterContext(deltas, document);
if (serializer.isUpdateCrossReferences()) {
referenceUpdater.update(ctx);
for (Runnable run : ctx.getModifications()) {
run.run();
}
}
ChangeDescription recording = recorder.endRecording();
if (recording != null) {
List<IResourceSnapshot> snapshots = Collections.singletonList(snapshot);
ResourceSetRecording tree = changeTreeProvider.createChangeTree(rs, snapshots, recording);
ResourceRecording recordedResource = tree.getRecordedResource(resource);
partialSerializer.serializeChanges(recordedResource, document);
}
List<IUpdatableReference> updatableReferences = ctx.getUpdatableReferences();
for (IUpdatableReference upd : updatableReferences) {
referenceUpdater.updateReference(document, upd);
}
ITextRegionAccessDiff rewritten = document.create();
List<ITextReplacement> rep = formatter.format(rewritten);
URI oldUri = snapshot.getURI();
TextDocumentChange change = new TextDocumentChange(rewritten, oldUri, rep);
changeAcceptor.accept(change);
}
项目:NEXCORE-UML-Modeler
文件:ProjectUtil.java
/**
* rollbackResourceSet
*
* @param recorder void
*/
public static void rollbackResourceSet(final ChangeRecorder recorder) {
if (recorder == null || !recorder.isRecording()) {
return;
}
DomainRegistry.getEditingDomain().getCommandStack().execute(new CompoundCommand() {
/**
* @see org.eclipse.emf.common.command.CompoundCommand#execute()
*/
@Override
public void execute() {
try {
ChangeDescription endRecording = recorder.endRecording();
if (endRecording != null) {
endRecording.apply();
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* @see org.eclipse.emf.common.command.AbstractCommand#canExecute()
*/
@Override
public boolean canExecute() {
return true;
}
});
}
项目:OpenSPIFe
文件:FixedTransactionChangeRecorder.java
@Override
public ChangeDescription endRecording() {
try {
return super.endRecording();
} catch (Exception e) {
Logger logger = Logger.getLogger(FixedTransactionChangeRecorder.class);
logger.error("consolidateChanges error", e);
return null;
}
}
项目:OpenSPIFe
文件:TestChangeDescriptionReverse.java
void doit() throws Exception {
ResourceSet originalResourceSet = new ResourceSetImpl();
loadResources(originalResourceSet);
@SuppressWarnings("unused")
Map<EObject, URI> eObjectToProxyURIMap = new HashMap<EObject, URI>();
ChangeRecorder changeRecorder = new ChangeRecorder();
/* Uncomment this in 3.7.x for the test to work/pass
changeRecorder.setRecordingTransientFeatures(false);
changeRecorder.setEObjectToProxyURIMap(eObjectToProxyURIMap);
*/
changeRecorder.beginRecording(Collections.singleton(originalResourceSet));
makeChanges();
ChangeDescription changeDescription = changeRecorder.endRecording();
/* Uncomment this in 3.7.x for the test to work/pass
changeDescription.copyAndReverse(eObjectToProxyURIMap);
*/
ResourceSet finalResourceSet = new ResourceSetImpl();
Resource changeDescriptionResource = finalResourceSet.createResource(URI.createURI("changes.change"));
changeDescriptionResource.getContents().add(changeDescription);
ByteArrayOutputStream out = new ByteArrayOutputStream();
changeDescriptionResource.save(System.out, null);
changeDescriptionResource.save(out, null);
changeDescriptionResource.getContents().clear();
changeDescriptionResource.unload();
changeDescriptionResource.load(new ByteArrayInputStream(out.toByteArray()), null);
ChangeDescription finalChangeDescription = (ChangeDescription) changeDescriptionResource.getContents().get(0);
finalChangeDescription.apply();
finalResourceSet.getResources().remove(0);
assertEquals(originalResourceSet, finalResourceSet);
}
项目:OpenSPIFe
文件:SPIFePlanIntegrationOperation.java
private void applyAndReverseChangeDescription(ChangeDescription changeDescription){
final ChangeDescription inputChangeDescription = changeDescription;
TransactionUtils.writeIfNecessary(existingPlan, new Runnable() {
@Override
public void run() {
if(inputChangeDescription != null) {
inputChangeDescription.applyAndReverse();
}
}
});
}
项目:OpenSPIFe
文件:SPIFePlanIntegrationOperation.java
public ChangeDescription createAddActivityToPlanChangeDescription(EPlan plan, EActivity activity) {
ChangeDescription cd = ChangeFactory.eINSTANCE.createChangeDescription();
EStructuralFeature feature = PlanPackage.Literals.EPLAN_PARENT__CHILDREN;
List activitiesToAdd = new BasicEList();
activitiesToAdd.add(activity);
FeatureChange featureChange = createFeatureChangeForMultivalueFeatures(plan, feature, activitiesToAdd, null);
if(featureChange != null) {
EList<FeatureChange> allFeatureChanges = new BasicEList();
allFeatureChanges.add(featureChange);
cd.getObjectChanges().put(plan, allFeatureChanges);
}
return cd;
}
项目:NEXCORE-UML-Modeler
文件:ProjectUtil.java
/**
* 모델 rollback 후 모델 저장
*
*
* @param recorder
* @param eObject
* void
*/
public static void rollbackWithSave(final ChangeRecorder recorder, final EObject eObject) {
if (recorder == null || !recorder.isRecording() || eObject == null) {
return;
}
DomainRegistry.getEditingDomain().getCommandStack().execute(new CompoundCommand() {
/**
* @see org.eclipse.emf.common.command.CompoundCommand#execute()
*/
@Override
public void execute() {
try {
if (recorder.isRecording()) {
ChangeDescription endRecording = recorder.endRecording();
if (endRecording != null) {
endRecording.apply();
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
DomainModelHandlerUtil.save(eObject);
if( eObject instanceof Package) {
TreeMap<String, Package> fragmentedPackageList = ProjectUtil.getFragmentedPackageList((Package) eObject);
for (Iterator<Package> iterator = fragmentedPackageList.values().iterator(); iterator.hasNext();) {
Package pkg = (Package) iterator.next();
DomainModelHandlerUtil.save(pkg);
}
}
}
}
/**
* @see org.eclipse.emf.common.command.AbstractCommand#canExecute()
*/
@Override
public boolean canExecute() {
return true;
}
});
}
项目:OpenSPIFe
文件:SPIFePlanIntegrationOperation.java
protected ChangeDescription createChangeDescriptionInstance(){
ChangeDescription changeDescription = ChangeFactory.eINSTANCE.createChangeDescription();
return changeDescription;
}