A PersonalInformationManager written in Java using Derby and Hibernate. Here's my original "manifesto" posted to the Derby users mailing list:
Table of Contents
In our modern information driven society, I find myself often unable to locate information that I need and that I have. It may be in an email that I forgot to file or that is not filed in the folder that I expected it to be in or perhaps I need a document on my office computer - or my home computer.
Whatever the cause, I need a new way to store, manage and organize the constant flow of information that I want - or need - to keep track of.
Specific cases for LifeCache:
When I read POP email, it gets downloaded to the computer that I read it on - but I need to be able to move it, or at least access it, on other computers.
My email account is getting full, but if I download it to one computer I won't be able to access it on any other computers.
My email account is getting full in part because there are obsolete emails filling it up. I want to be able to mark emails so that they will automatically come up for review on a periodic basis, on a certain date or after a certain event has occurred.
A new guy has been assigned to my project and I have a collection of documents, notes, callendar entries and emails that he will want to have access to. I want to push a button and grant him access to them - or give him the option to download the whole batch to his computer.
I have a long email discussing several topics. I want to be able to associate it with all of those topics without having more than one copy of it.
I have an email with a text part and a large attachment. I want to be able to keep everything EXCEPT for the attachment.
I have all this information that is related - except that it is scattered amongst text documents, HTML documents, PDF documents, emails, chat logs.......
I want change tracking for something that isn't a Microsoft Word document. Maybe it's an email, maybe it's a text document.
I don't trust someone else to store my data but now that I have hundreds gigabytes in disk space and high-speed internet access, why should I need to?
To make LifeCache as flexible as possible, it will be necessary to throw out many of the standard assumptions that underlie this kind of software.
My current thinking is that the primary element will be an "information object" that will consist of data components and properties.
I have the following data components in mind:
- Child information object
- Binary data (blob)
- Character data (clob)
- Child information object collection
- Property collection (un/ordered group of properties)
- Data collection (un/ordered group of binary or character data objects)
I also have the following property types in mind:
- Dates, times, timestamps (may be qualified by accuracy limitations)
- Numeric (integer, double, etc)
So, for example, an email would be:
- A character data component.
- An ordered list of properties (the header)
- An ordered list of data components (attachments)
I'm more of an agile kind of person these days so we'll have some user stories that give the functionality that we want our software to have. Feel free to add your own or add comments to others but don't delete or modify anything that you didn't add.
Import a text file
I have a collection of text files from various sources that I want to organize.
What we'll end up with is an information object consisting of:
- A character data object
- An unordered list of properties (the file properties supplied by the file system)
Group information objects
Some of the text files are chapters of a "book" so I'll want to be able to create an ordered list of information objects that belong to a parent object.
Add custom properties
Once I have my text files imported (and possibly grouped), I'm going to want to add custom properties to them such as an official title and author.