ca.myewb.build.DevDBSetup.java Source code

Java tutorial

Introduction

Here is the source code for ca.myewb.build.DevDBSetup.java

Source

/*
    
This file is part of OpenMyEWB.
    
OpenMyEWB is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
    
OpenMyEWB is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
    
You should have received a copy of the GNU General Public License
along with OpenMyEWB.  If not, see <http://www.gnu.org/licenses/>.
    
OpenMyEWB is Copyright 2005-2009 Nicolas Kruchten (nicolas@kruchten.com), Francis Kung, Engineers Without Borders Canada, Michael Trauttmansdorff, Jon Fishbein, David Kadish
    
*/

package ca.myewb.build;

import java.io.InputStream;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.Properties;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

import ca.myewb.frame.Helpers;
import ca.myewb.frame.HibernateUtil;
import ca.myewb.frame.SafeHibList;
import ca.myewb.model.EventModel;
import ca.myewb.model.GroupChapterModel;
import ca.myewb.model.GroupModel;
import ca.myewb.model.PostModel;
import ca.myewb.model.RoleModel;
import ca.myewb.model.UserModel;

public class DevDBSetup {

    public static void main(String[] args) throws Exception {
        HibernateUtil.createFactory("dev");
        Session session = HibernateUtil.currentSession();
        Transaction tx = session.beginTransaction();

        Properties appProperties = new Properties();
        java.net.URL url = Thread.currentThread().getContextClassLoader().getResource("app.properties");
        InputStream stream = url.openStream();
        appProperties.load(stream);

        Helpers.setPrefixes(appProperties.getProperty("appprefix"), appProperties.getProperty("defaulturl"),
                appProperties.getProperty("domain"));
        Helpers.setEnShortName(appProperties.getProperty("enshortname"));
        Helpers.setFrShortName(appProperties.getProperty("frshortname"));
        Helpers.setLongName(appProperties.getProperty("longname"));
        Helpers.setSystemEmail(appProperties.getProperty("systememail"));
        Helpers.setDevMode(appProperties.getProperty("devmode").equals("yes"));

        DevDBSetup.populate();

        tx.commit();
    }

    @SuppressWarnings("unused")
    public static void populate() throws Exception {
        UserModel randyBachman, burtonCummings, sydBarrett, rogerWaters, davidGilmour, justinTimberlake,
                singerRecipient, singerSender, singerLeader, guesswhoMember;
        GroupChapterModel theGuessWho, pinkFloyd;
        GroupModel leadSingers, songwriters, bachmanTurnerOverdrive;
        PostModel gw, gwExec, pf, pfExec, ls, sw, bto;
        PostModel gwReply, gqExecReply, pfReply, pfExecReply, lsReply, swReply, btoReply;
        EventModel liveAtParamount, rehearsal, onTheRoad, setup;

        System.out.println("Populating users...");

        //User Population
        randyBachman = UserModel.newAssociateSignUp("randy@theguesswho.ca", "Randy", "Bachman", "guesswho");
        burtonCummings = UserModel.newAssociateSignUp("burton@theguesswho.ca", "Burton", "Cummings", "guesswho");
        sydBarrett = UserModel.newAssociateSignUp("syd@pinkfloyd.co.uk", "Syd", "Barrett", "pinkfloyd");
        rogerWaters = UserModel.newAssociateSignUp("roger@pinkfloyd.co.uk", "Roger", "Waters", "pinkfloyd");
        davidGilmour = UserModel.newAssociateSignUp("david@pinkfloyd.co.uk", "David", "Gilmour", "pinkfloyd");
        justinTimberlake = UserModel.newAssociateSignUp("justin@nsuck.com", "Justin", "Timberlake", "istink");
        singerRecipient = UserModel.newMailingListSignUp("recipient@singers.org");
        singerSender = UserModel.newMailingListSignUp("sender@singers.org");
        singerLeader = UserModel.newMailingListSignUp("leader@singers.org");
        guesswhoMember = UserModel.newMailingListSignUp("guesswhomember@guesswho.ca");

        System.out.println("Populating chapters...");

        //Chapter Setup
        theGuessWho = GroupChapterModel.newChapter();
        pinkFloyd = GroupChapterModel.newChapter();

        theGuessWho.save("Guess Who Professional Chapter", "guesswho", "1 Guess St.\n\n\nWinnipeg\nMB\nH0H0H0\nCA",
                "(416) 222-3561", "(416) 222-3561", "chapter@theguesswho.ca", "http://theguesswho.ca/", false,
                true);
        pinkFloyd.save("Pink Floyd University Chapter", "pinkfloyd", "1 Pink Ln.\n\n\nLondon\nON\nH0H0H0\nCA",
                "(416) 222-3561", "(416) 222-3561", "chapter#pinkfloyd.co.uk", "http://pinkfloyd.co.uk/", false,
                false);

        System.out.println("Populating non-chapter lists...");

        //Group Setup
        leadSingers = GroupModel.newGroup();
        songwriters = GroupModel.newGroup();
        bachmanTurnerOverdrive = GroupModel.newGroup(theGuessWho);

        leadSingers.save("Lead Singers", "leadsingers", "Group for the lead singers of bands", false);
        songwriters.save("Songwriters", "songwriters", "A group for any songwriters", true);
        bachmanTurnerOverdrive.save("Bachman-Turner Overdrive", "BTO", "For those who went on to BTO", false);

        System.out.println("Populating chapter members...");

        //Putting people in groups
        randyBachman.joinChapter(theGuessWho);
        randyBachman.renew(randyBachman, true);
        randyBachman.upgradeToExec();
        randyBachman.setExecTitle("Exec member");
        burtonCummings.joinChapter(theGuessWho);
        sydBarrett.joinChapter(pinkFloyd);
        rogerWaters.joinChapter(pinkFloyd);
        rogerWaters.upgradeToExec();
        rogerWaters.setExecTitle("Exec member");
        davidGilmour.joinChapter(pinkFloyd);
        davidGilmour.upgradeToExec();
        davidGilmour.setExecTitle("President");
        davidGilmour.addGroup(Helpers.getGroup("UniPresidents"), 'm');
        guesswhoMember.joinChapter(theGuessWho);

        System.out.println("Populating non-chapter list members...");

        //Putting people in Lists
        davidGilmour.upgradeToListLeader(leadSingers);
        rogerWaters.subscribe(leadSingers);
        randyBachman.upgradeToListSender(leadSingers);

        randyBachman.subscribe(bachmanTurnerOverdrive);

        randyBachman.subscribe(songwriters);
        burtonCummings.upgradeToListSender(songwriters);
        davidGilmour.subscribe(songwriters);
        rogerWaters.upgradeToListLeader(songwriters);

        singerRecipient.subscribe(leadSingers);
        singerSender.upgradeToListSender(leadSingers);
        singerLeader.upgradeToListLeader(leadSingers);

        System.out.println("Fudging signup dates...");
        Criteria roleCrit = HibernateUtil.currentSession().createCriteria(RoleModel.class);
        List<RoleModel> roles = new SafeHibList<RoleModel>(roleCrit).list();
        Calendar c = GregorianCalendar.getInstance();
        c.add(Calendar.MONTH, -3);
        Date d = c.getTime();

        for (RoleModel r : roles) {
            if (r.getGroup().getAdmin()) {
                r.setStart(d);
            } else {
                c = GregorianCalendar.getInstance();
                c.add(Calendar.DATE, (int) (Math.random() * (-90)));
                r.setStart(c.getTime());
            }
        }

        System.out.println("Populating posts...");

        //Making Posts
        gw = PostModel.newPost(burtonCummings, theGuessWho, "The Guess Who", "Guess Who's First Post", "I dunno",
                "guess who, canada");
        gwExec = PostModel.newPost(randyBachman, theGuessWho.getExec(), "The Guess Who Exec",
                "Guess Who's First Exec List Post", "I do know!", "guess who, canada, exec");
        pf = PostModel.newPost(rogerWaters, pinkFloyd, "Pink Floyd", "Pink Floyd's First Post",
                "Up agains teh wall", "pink floyd, psychadelic rock");
        pfExec = PostModel.newPost(davidGilmour, pinkFloyd.getExec(), "Pink Floyd Execs", "Pink Floyd's First Post",
                "Wish you were here!", "pink floyd, psychadelic rock");
        ls = PostModel.newPost(davidGilmour, leadSingers, "Lead Singers", "Lead Singers's First Post",
                "haha. we rock", "lead singers, rock");
        sw = PostModel.newPost(rogerWaters, songwriters, "Songwriters", "Songwriters's First Post",
                "they write, they write yay", "writing, music");
        bto = PostModel.newPost(randyBachman, bachmanTurnerOverdrive, "Bachman Turner Overdrive",
                "BTO's First Post", "you ain't seen nothing yet", "bto, canada");

        System.out.println("Fudging post dates...");
        Criteria postCrit = HibernateUtil.currentSession().createCriteria(PostModel.class);
        List<PostModel> posts = new SafeHibList<PostModel>(postCrit).list();

        for (PostModel p : posts) {
            c = GregorianCalendar.getInstance();
            c.add(Calendar.DATE, (int) (Math.random() * (-90)));
            p.setDate(c.getTime());
        }

        System.out.println("Populating Replies...");
        gw.reply(randyBachman, "GW Reply", "");
        gwExec.reply(randyBachman, "GW Exec Reply", "");
        pf.reply(davidGilmour, "PF Reply", "");
        pfExec.reply(davidGilmour, "PF Exec Reply", "");
        ls.reply(davidGilmour, "Lead Singers Reply", "");
        sw.reply(rogerWaters, "Writers Reply", "");
        bto.reply(randyBachman, "BTO Reply", "");

        System.out.println("Fudging reply dates...");
        Criteria replyCrit = HibernateUtil.currentSession().createCriteria(PostModel.class);
        replyCrit.add(Restrictions.isNotNull("parent"));
        List<PostModel> replies = new SafeHibList<PostModel>(replyCrit).list();

        for (PostModel r : replies) {
            Date now = new Date();
            c.setTime(r.getParent().getDate());
            Date before = c.getTime();

            c = GregorianCalendar.getInstance();
            c.add(Calendar.DATE,
                    (int) (Math.random() * (before.getTime() - now.getTime()) / (1000 * 60 * 60 * 24)));
            r.setDate(c.getTime());
        }

        System.out.println("Populating events...");

        //Creating Events
        c = GregorianCalendar.getInstance();
        c.set(2007, 6, 31, 10, 30);
        Date startDate = c.getTime();
        c.add(Calendar.DATE, 2);
        Date endDate = c.getTime();

        rehearsal = EventModel.newEvent("Band Rehearsal", startDate, endDate, "Bachman's Basement", "Garageband",
                theGuessWho, false, "");

        c.set(2007, 7, 5, 5, 23);
        startDate = c.getTime();
        c.add(Calendar.WEEK_OF_YEAR, 1);
        endDate = c.getTime();
        onTheRoad = EventModel.newEvent("Driving", startDate, endDate, "The i95", "On the road again...",
                theGuessWho, false, "");

        c.set(2007, 7, 15, 12, 49);
        startDate = c.getTime();
        c.add(Calendar.HOUR, 7);
        endDate = c.getTime();
        setup = EventModel.newEvent("Setup", startDate, endDate, "Outside Paramount", "roadies!", theGuessWho,
                false, "");

        c.set(2007, 7, 15, 20, 35);
        startDate = c.getTime();
        c.add(Calendar.HOUR, 4);
        endDate = c.getTime();
        liveAtParamount = EventModel.newEvent("Concert: Live at the Paramount", startDate, endDate,
                "Paramount Stage", "Yeah for concerts", theGuessWho, false, "");

    }
}