private Snapshot persistProject(Project project, @Nullable Project parent) {
// temporary hack
project.setEffectiveKey(project.getKey());
ResourceModel model = findOrCreateModel(project, parent);
// Used by ResourceKeyMigration in order to know that a project has already being migrated
model.setDeprecatedKey(project.getKey());
// language is null for project since multi-language support
model.setLanguageKey(null);
// For views
if (project instanceof ResourceCopy) {
model.setCopyResourceId(((ResourceCopy) project).getCopyResourceId());
}
Snapshot parentSnapshot = null;
if (parent != null) {
// assume that the parent project has already been saved
parentSnapshot = snapshotsByResource.get(project.getParent());
model.setRootId((Integer) ObjectUtils.defaultIfNull(parentSnapshot.getRootProjectId(), parentSnapshot.getResourceId()));
} else {
model.setRootId(null);
}
model = session.save(model);
project.setId(model.getId());
project.setUuid(model.getUuid());
Snapshot snapshot = new Snapshot(model, parentSnapshot);
snapshot.setVersion(project.getAnalysisVersion());
snapshot.setCreatedAt(project.getAnalysisDate());
snapshot.setBuildDate(new Date());