DataManager dataManager = networkManager.getDataManager();
UpdateFileProcessContext context = new UpdateFileProcessContext(file);
H2HSession session = networkManager.getSession();
SequentialProcess process = new SequentialProcess();
process.add(new ValidateFileSizeStep(context, session.getFileConfiguration(), false));
process.add(new CheckWriteAccessStep(context, session.getProfileManager(), session.getRoot()));
process.add(new File2MetaFileComponent(file, context, context, networkManager));
process.add(new InitializeChunksStep(context, dataManager, session.getFileConfiguration()));
process.add(new CreateNewVersionStep(context, session.getFileConfiguration()));
process.add(new PutMetaFileStep(context, dataManager));
process.add(new UpdateMD5inUserProfileStep(context, session.getProfileManager()));
// TODO: cleanup can be made async because user operation does not depend on it
process.add(new CleanupChunksStep(context, dataManager));
process.add(new PrepareNotificationStep(context));
process.add(createNotificationProcess(context, networkManager));
return process;
}