Hello All,
I'd like to start to post bi-weekly (2/month) status reports. So
that people can keep in sync with what's going on with the
new jyve system.
I'd first encourage people to use the current jyve system, so
that you can become familiar with how everything works and
let us know how you would like it improved.
What's the new jyve?
-------------------
I'd like to develop jyve from the ground up to be a generic system
that can be used to manage threaded data (text). I'll call this
gjyve (generic jyve). The system will allow for collaborative data
management building. The current jyve (FAQ system) will be one example
of using gjyve. Other examples would be to do lists, problem-solution
system, even things like organizing a report might be possible. You
will be able to organize the system in any way that best fits your
needs. For example, you might want your faq set up to be:
Project --> Question --> Answer
or
Questions --> answers -> reviews
A to do list might be
Project --> item --> responsible party
When's it going to be ready ?
----------------------------
Good question. I've been busy on other projects, but my time
will free up so I can devote myself close to full time on this.
I am tinkering with the idea of documenting everything as I
go along so that I can then publish a step by step manual
of using Turbine to develop a web app, including alternative
ways of doing things. This will slow down the development
cycle, but it may be worth it. let me know.
Here's a general outline of stuff I want to get working before
a cvs distribution is available. I really want to avoid putting
out anything that doesn't work.
1. refine the db schema (jyve.xml)
2. use torque to build all the om stuff so that the sql for
mysql and postgres are solid. (working with jason on this
now)
3. get basic templates built so that basic stuff works (sans
permission system)
4. create the distribution tree and get the basics in there
so we can all start the development
(directory structure, ant, docs/how tos)
Once we get the basics working....
5. get the permission system in
6. refine all the templates/screens
Here's the latest schema for gjyve. Take a look at it and post/send me
comments. Remember, if we try to be all things to all people, this
project will get nowhere fast. I am trying to keep it as lean as
possible without sacrificing too much functionality.
more soon!
mike
So here's nailing down #1 above:
BTW, you can now have several projects in the same database!
//
// The parent table
//
DROP SEQUENCE Project_id_seq;
DROP TABLE Project;
CREATE TABLE Project
(
id SERIAL, // auto increment primary key
name varchar(80) NOT NULL,
displayOrder integer DEFAULT 0,
// status
deleted char NOT NULL DEFAULT 'N',
released char NOT NULL DEFAULT 'N',
// who did what, when
createdBy integer, // fkey into Visitor
deletedBy integer,
modifiedBy integer,
modifedDate timestamp default 'now',
releasedBy integer,
releasedDate timestamp default 'now',
// web/ui info to dynamically serve up views
templateName varchar(80),
iconFile varchar(80),
cssFile varchar(80),
PRIMARY KEY(id)
);
create unique index p_idx1 on project (name);
//
// project level allows you to assign semantic meaning to each
// level of a project. This table will be populated by the author
// of the project
//
DROP SEQUENCE ProjectLevel_id_seq;
DROP TABLE ProjectLevel;
CREATE TABLE ProjectLevel
(
id SERIAL, // auto increment primary key
projectId integer NOT NULL, // fkey into Project
name varchar(80) NOT NULL,
levelValue integer NOT NULL default 0,
beforeActiontrigger varchar(80),
afterActiontrigger varchar(80),
// if not null, these classes will be loaded and called when a
// dataSegment is added, updated, marked as released or deleted at
// this level
// it's for the future; perhaps the interface will be
// ClassName.actionToTake(actionName, dataSegment)
// ClassName.actionCompleted(actionName, dataSegment)
// triggers best belong on the server side, but it's a way to cleanly
// attach additional business logic to the system where the only client
// will be jyve and the dbase doesn't support triggers/stored procedures
// options available for tagging the data (in DataSegments) at this level
optionGroupId integer, // fkey into OptionGroup
// options available for tagging any dates at this level
optionGroupDateId integer, // fkey into OptionGroup
// web/ui info to dynamically serve up views
templateName varchar(80),
iconFile varchar(80),
cssFile varchar(80),
PRIMARY KEY(id)
);
create unique index pl_idx1 on projectlevel (id, projectId);
create unique index pl_idx2 on projectlevel (projectId, name);
//
// dataSegments are the threaded data that belong to a project
//
// NOTE: projectLevelId must be updated if parentId is changed.
// this will only occur when a data segment is moved from one
// branch to another, the UI for this is not a priority right now.
// so we won't worry about this for awhile
// assert: (this.projectLevel.level == parent's projectLevel.level + 1)
//
DROP SEQUENCE DataSegment_id_seq;
DROP TABLE DataSegment;
CREATE TABLE DataSegment
(
id SERIAL, // auto increment primary key
parentId integer NOT NULL default 0, // fkey into DataSegment
projectLevelId integer not null, // fkey into ProjectLevel
// the actual text data
html text NOT NULL,
optionId integer, // fkey into Option; can be null
// order in which to display it
displayOrder integer DEFAULT 0,
// status
deleted char NOT NULL DEFAULT 'N',
released char NOT NULL DEFAULT 'N',
// who did what, when
createdBy integer, // fkey into Visitor
deletedBy integer,
modifiedBy integer,
modifedDate timestamp default 'now',
releasedBy integer,
releasedDate timestamp default 'now',
PRIMARY KEY (id)
);
create index ds_idx1 on datasegment (parentId);
create index ds_idx2 on datasegment (projectLevelId);
// a data segment can have 0 or more dates
DROP SEQUENCE DataSegmentDate_id_seq;
DROP TABLE DataSegmentDate;
CREATE TABLE DataSegmentDate
(
id SERIAL, // auto increment primary key
dataSegmentId integer,
optionId integer, // fkey into Option
date date,
info varchar(80),
PRIMARY KEY (id)
);
create index dsd_idx1 on datasegmentdate (dataSegmentId);
//
// the following tables allow you to assign additional
// type information to each dataSegment and dataSegmentDates
// it's a way to generically tag data
// usually the author of the project will populate these tables
// Note that they are project independant
//
DROP SEQUENCE optiongroup_id_seq;
DROP TABLE OptionGroup;
CREATE TABLE OptionGroup
(
id SERIAL, // auto increment primary key
name varchar(80) NOT NULL,
PRIMARY KEY(id)
);
create unique index og_idx1 on optiongroup (name);
DROP SEQUENCE option_id_seq;
DROP TABLE Option;
CREATE TABLE Option
(
id SERIAL, // auto increment primary key
optionGroupId integer not null,
name varchar(80) NOT NULL,
PRIMARY KEY(id)
);
create index op_idx1 on option (optionGroupId);
create unique index op_idx2 on option (optionGroupId, name);
--
--------------------------------------------------------------
To subscribe: [EMAIL PROTECTED]
To unsubscribe: [EMAIL PROTECTED]
Archives and Other: <http://java.apache.org/main/mail.html>
Problems?: [EMAIL PROTECTED]