WLDataModel.java 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package uk.ac.ic.wlgitbridge.writelatex.model;
  2. import uk.ac.ic.wlgitbridge.bridge.CandidateSnapshot;
  3. import uk.ac.ic.wlgitbridge.bridge.CandidateSnapshotCallback;
  4. import uk.ac.ic.wlgitbridge.bridge.RawDirectoryContents;
  5. import uk.ac.ic.wlgitbridge.bridge.WritableRepositoryContents;
  6. import uk.ac.ic.wlgitbridge.writelatex.WLDirectoryNodeSnapshot;
  7. import uk.ac.ic.wlgitbridge.writelatex.api.request.exception.FailedConnectionException;
  8. import uk.ac.ic.wlgitbridge.writelatex.api.request.getdoc.exception.InvalidProjectException;
  9. import uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception.SnapshotPostException;
  10. import uk.ac.ic.wlgitbridge.writelatex.filestore.store.WLFileStore;
  11. import uk.ac.ic.wlgitbridge.writelatex.model.db.Database;
  12. import java.io.File;
  13. import java.io.IOException;
  14. import java.util.List;
  15. /**
  16. * Created by Winston on 06/11/14.
  17. */
  18. public class WLDataModel implements CandidateSnapshotCallback {
  19. private final Database db;
  20. private final WLProjectStore projectStore;
  21. private final WLFileStore fileStore;
  22. public WLDataModel(String rootGitDirectoryPath) {
  23. File rootGitDirectory = initRootGitDirectory(rootGitDirectoryPath);
  24. db = new Database(rootGitDirectory);
  25. projectStore = new WLProjectStore();
  26. fileStore = new WLFileStore(rootGitDirectory);
  27. }
  28. public List<WritableRepositoryContents> updateProjectWithName(String name) throws FailedConnectionException, InvalidProjectException {
  29. return fileStore.updateForProject(getProjectWithName(name));
  30. }
  31. public WLProject getProjectWithName(String name) {
  32. return projectStore.getProjectWithName(name);
  33. }
  34. public CandidateSnapshot createCandidateSnapshotFromProjectWithContents(String projectName, RawDirectoryContents directoryContents, String hostname) throws SnapshotPostException, IOException, FailedConnectionException {
  35. return new WLDirectoryNodeSnapshot(getProjectWithName(projectName),
  36. fileStore.createNextDirectoryNodeInProjectFromContents(getProjectWithName(projectName),
  37. directoryContents),
  38. hostname,
  39. this);
  40. }
  41. @Override
  42. public void approveSnapshot(int versionID, CandidateSnapshot candidateSnapshot) {
  43. getProjectWithName(candidateSnapshot.getProjectName()).putLatestSnapshot(versionID);
  44. fileStore.approveCandidateSnapshot(candidateSnapshot);
  45. }
  46. private File initRootGitDirectory(String rootGitDirectoryPath) {
  47. File rootGitDirectory = new File(rootGitDirectoryPath);
  48. rootGitDirectory.mkdirs();
  49. return rootGitDirectory;
  50. }
  51. }