Mizoine: How I create Java application. Step 4. File repository.

Problems to solve

  • Missing tools for repository management, backup, inconsistency problems solving
  • Multi-user access
  • Versioning (history of changes)
  • Cross-linking, referencing repository objects from/to other repository objects
  • Off-line access
  • Quick search
  • Performance

Solutions so far

1. Store everything in files

  • Do not install database or similar storage system
  • Use only simple file access functions
  • There are a lot of existing file-management tools for copying, moving, editing, backup, etc.
  • Version management can be achieved using git or similar already existing tools
  • Any object can be referenced by file path
  • Easy to clone, backup or move repository
  • Easy to clean-up (just remove redundant files)

2. Use standard text formats

  • Store meta-data in .json text files
  • Store descriptions in markdown (.md) text files
  • No need to develop special proprietary editors and tools
  • Easy to view the content and search using standard tools, which are already included to any operating system

3. Use git for version control

  • Do not care of object integrity or destroying by mistake
  • Let user control all commits/pushes
  • Use git history for undo functionality
  • Re-use git users
    • Always specify appropriate user name for git commits
    • Read and display git history user information
  • Exists already for almost any platform
  • Performance and other issues are already solved
  • There are a lot of libraries/frameworks to work with git
  • No need to develop additional version management
  • File repository can be easily cloned over network
  • Problems with multi-user access and synchronization are already solved
  • Repository can be stored off-line and easily synchronized with on-line version

Base entities

  1. Project
  2. Issue
  3. Attachment
  4. Comment

Project

Set of issues.

Issue

Main feature: Rich text.

Formatted in Markdown (most modern and community supported wiki-like syntax)

Required features:

  1. Basic text formatting: Headers, emphasized text, lists, tables
  2. Code samples
  3. Links to web pages
  4. Automatic links to issues, and other entities in Mizoine
  5. Embedding of images and other attachments (as many possible formats as possible)

Attachment

One uploaded file.

Required:

  1. Automatic thumbnails
  2. Drag-n-drop uploading

Comment

Simplified version of issue text.

Folder system

  • ABC – Project directory
    • 0
    • 1 – Issue folder. Simple counter. Issue can be identified by project name and number. For example: “ABC-1”
    • 2
    • 3
  • QWER
    • 0
    • 1
      • attachments – Attachments directory (within an issue)
        • JkRE0z – Folder for one attachment. Generated short Id.
        • 0_yZZj
      • comments – Comments directory (within an issue)
        • 2017-12-20-135803a – Folder for one comment. Date/time based Id.
        • 2017-12-20-140233a
    • 2