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]

Reply via email to