Merge branch 'undirty-on-refresh-1046' into transaction-clearing-1059

Conflicts:
	platform/commonUI/edit/src/actions/SaveAsAction.js
This commit is contained in:
Victor Woeltjen 2016-07-14 11:53:39 -07:00
commit 4c7ad6d93a
5 changed files with 44 additions and 5 deletions

View File

@ -111,7 +111,8 @@ define([
var self = this,
domainObject = this.domainObject,
copyService = this.copyService,
dialog = new SaveInProgressDialog(this.dialogService);
dialog = new SaveInProgressDialog(this.dialogService),
toUndirty = [];
function doWizardSave(parent) {
var wizard = self.createWizard(parent);
@ -143,14 +144,28 @@ define([
}
function allowClone(objectToClone) {
return (objectToClone.getId() === domainObject.getId()) ||
objectToClone.getCapability('location').isOriginal();
var allowed =
(objectToClone.getId() === domainObject.getId()) ||
objectToClone.getCapability('location').isOriginal();
if (allowed) {
toUndirty.push(objectToClone);
}
return allowed;
}
function cloneIntoParent(parent) {
return copyService.perform(domainObject, parent, allowClone);
}
function undirty(object) {
return object.getCapability('persistence').refresh();
}
function undirtyOriginals(object) {
return Promise.all(toUndirty.map(undirty))
.then(resolveWith(object));
}
function commitEditingAfterClone(clonedObject) {
return domainObject.getCapability("editor").save()
.then(resolveWith(clonedObject));
@ -166,6 +181,7 @@ define([
.then(showBlockingDialog)
.then(getParent)
.then(cloneIntoParent)
.then(undirtyOriginals)
.then(commitEditingAfterClone)
.then(hideBlockingDialog)
.catch(onFailure);

View File

@ -49,6 +49,7 @@ define(
this.domainObject = domainObject;
this.$q = $q;
this.persistPending = false;
this.removeFromTransaction = undefined;
}
/**
@ -75,6 +76,7 @@ define(
});
} else {
self.persistPending = false;
self.removeFromTransaction = undefined;
//Model is undefined in persistence, so return undefined.
return self.$q.when(undefined);
}
@ -82,7 +84,8 @@ define(
if (this.transactionService.isActive()) {
if (!this.persistPending) {
this.transactionService.addToTransaction(onCommit, onCancel);
this.removeFromTransaction = this.transactionService
.addToTransaction(onCommit, onCancel);
this.persistPending = true;
}
//Need to return a promise from this function
@ -93,6 +96,11 @@ define(
};
TransactionalPersistenceCapability.prototype.refresh = function () {
if (this.persistPending) {
this.persistPending = false;
this.removeFromTransaction();
this.removeFromTransaction = undefined;
}
return this.persistenceCapability.refresh();
};

View File

@ -81,6 +81,15 @@ define(
//Log error because this is a programming error if it occurs.
this.$log.error("No transaction in progress");
}
return function () {
this.onCommits = this.onCommits.filter(function (callback) {
return callback !== onCommit;
});
this.onCancels = this.onCancels.filter(function (callback) {
return callback !== onCancel;
});
}.bind(this);
};
/**

View File

@ -152,6 +152,10 @@ define(
}, modified);
}
if (domainObject.getModel().persisted === undefined) {
return this.$q.when(true);
}
return this.persistenceService.readObject(
this.getSpace(),
this.getKey()

View File

@ -74,7 +74,7 @@ define(
);
mockQ = jasmine.createSpyObj(
"$q",
["reject"]
["reject", "when"]
);
mockNofificationService = jasmine.createSpyObj(
"notificationService",
@ -103,6 +103,7 @@ define(
mockIdentifierService.parse.andReturn(mockIdentifier);
mockIdentifier.getSpace.andReturn(SPACE);
mockIdentifier.getKey.andReturn(key);
mockQ.when.andCallFake(asPromise);
persistence = new PersistenceCapability(
mockCacheService,
mockPersistenceService,
@ -156,6 +157,7 @@ define(
});
it("refreshes the domain object model from persistence", function () {
var refreshModel = {someOtherKey: "some other value"};
model.persisted = 1;
mockPersistenceService.readObject.andReturn(asPromise(refreshModel));
persistence.refresh();
expect(model).toEqual(refreshModel);