import java.util.*; import com.db4o.*; import com.db4o.config.Configuration; import com.db4o.query.*; public class CreateDatabase { public static void main(String[] args) { String DB4OFILENAME = args[0]; Configuration config = Db4o.configure(); config.objectClass(Employee.class).cascadeOnUpdate(true); config.objectClass(Department.class).cascadeOnUpdate(true); config.objectClass(Project.class).cascadeOnUpdate(true); config.objectClass(Dependent.class).cascadeOnUpdate(true); config.objectClass(WorksOn.class).cascadeOnUpdate(true); config.updateDepth(1000); ObjectContainer db = Db4o.openFile(config,DB4OFILENAME); try { createEmployees(db); createDependents(db); createDepartments(db); createProjects(db); setManagers(db); setControls(db); setWorksfor(db); setSupervisors(db); createWorksOn(db); db.commit(); } catch (Exception e) { System.out.println("Exception: " + e.getMessage()); } finally { db.close(); } System.out.println("DONE"); } public static void createEmployees(ObjectContainer db) throws Exception { InputFile fin = new InputFile(); if (fin.openFile("data/employee.dat")) { int nEmps = Integer.parseInt(fin.readLine()); for (int i = 0; i < nEmps; i++) { String line = fin.readLine(); String[] fields = line.split(":"); String fname = fields[0]; char minit = fields[1].charAt(0); String lname = fields[2]; int ssn = Integer.parseInt(fields[3]); String bdate = fields[4]; String address = fields[5]; char sex = fields[6].charAt(0); float salary = Float.parseFloat(fields[7]); Employee e = new Employee(ssn, fname, minit, lname, address, bdate, salary, sex); db.store(e); } } } public static void createDependents(ObjectContainer db) throws Exception { InputFile fin = new InputFile(); if (fin.openFile("data/dependent.dat")) { int nDeps = Integer.parseInt(fin.readLine()); for (int i = 0; i < nDeps; i++) { String line = fin.readLine(); String[] fields = line.split(","); final int essn = Integer.parseInt(fields[0]); String name = fields[1]; char sex = fields[2].charAt(0); String bdate = fields[3]; String relationship = fields[4]; List emps = db.query(new Predicate() { public boolean match(Employee emp) { return (emp.getSsn() == essn); } }); Employee e = emps.get(0); Dependent d = new Dependent(name, sex, bdate, relationship); d.setDependentOf(e); db.store(d); e.addDependent(d); db.store(e); } } } public static void createDepartments(ObjectContainer db) throws Exception { InputFile fin = new InputFile(); if (fin.openFile("data/department.dat")) { int nDepts = Integer.parseInt(fin.readLine()); for (int i = 0; i < nDepts; i++) { String line = fin.readLine(); String[] fields = line.split(":"); int dnumber = Integer.parseInt(fields[0]); String dname = fields[1]; String[] ls = fields[2].split(","); Vector locs = new Vector(); for (int j = 0; j < ls.length; j++) locs.add(ls[j]); Department d = new Department(dnumber, dname, locs); db.store(d); } } } public static void createProjects(ObjectContainer db) throws Exception { InputFile fin = new InputFile(); if (fin.openFile("data/project.dat")) { int nProjs = Integer.parseInt(fin.readLine()); for (int i = 0; i < nProjs; i++) { String line = fin.readLine(); String[] fields = line.split(","); int pnumber = Integer.parseInt(fields[0]); String pname = fields[1]; String loc = fields[2]; Project p = new Project(pnumber, pname, loc); db.store(p); } } } public static void setManagers(ObjectContainer db) throws Exception { InputFile fin = new InputFile(); if (fin.openFile("data/manager.dat")) { int nMgrs = Integer.parseInt(fin.readLine()); for (int i = 0; i < nMgrs; i++) { String line = fin.readLine(); String[] fields = line.split(","); final int dno = Integer.parseInt(fields[0]); final int essn = Integer.parseInt(fields[1]); String startDate = fields[2]; List depts = db.query(new Predicate() { public boolean match(Department dept) { return (dept.getDnumber() == dno); } }); Department d = depts.get(0); List emps = db.query(new Predicate() { public boolean match(Employee emp) { return (emp.getSsn() == essn); } }); Employee e = emps.get(0); d.setMgrStartDate(startDate); e.setManages(d); d.setManager(e); db.store(d); db.store(e); } } } public static void setControls(ObjectContainer db) throws Exception { InputFile fin = new InputFile(); if (fin.openFile("data/controls.dat")) { int nControls = Integer.parseInt(fin.readLine()); for (int i = 0; i < nControls; i++) { String line = fin.readLine(); String[] fields = line.split(":"); final int dno = Integer.parseInt(fields[0]); String[] projects = fields[1].split(","); List depts = db.query(new Predicate() { public boolean match(Department dept) { return (dept.getDnumber() == dno); } }); Department d = depts.get(0); for (int j = 0; j < projects.length; j++) { final int pno = Integer.parseInt(projects[j]); List prjs = db.query(new Predicate() { public boolean match(Project prj) { return (prj.getPnumber() == pno); } }); Project p = prjs.get(0); p.setControlledBy(d); db.store(p); d.addProject(p); } db.store(d); } } } private static void setWorksfor(ObjectContainer db) throws Exception { InputFile fin = new InputFile(); if (fin.openFile("data/worksFor.dat")) { int nWorksFor = Integer.parseInt(fin.readLine()); for (int i = 0; i < nWorksFor; i++) { String line = fin.readLine(); String[] fields = line.split(":"); final int dno = Integer.parseInt(fields[0]); String[] emps = fields[1].split(","); List depts = db.query(new Predicate() { public boolean match(Department dept) { return (dept.getDnumber() == dno); } }); Department d = depts.get(0); for (int j = 0; j < emps.length; j++) { final int ssn = Integer.parseInt(emps[j]); List es = db.query(new Predicate() { public boolean match(Employee emp) { return (emp.getSsn() == ssn); } }); Employee e = es.get(0); e.setWorksFor(d); db.store(e); d.addEmployee(e); } db.store(d); } } } private static void setSupervisors(ObjectContainer db) throws Exception { InputFile fin = new InputFile(); if (fin.openFile("data/sups.dat")) { int nSups = Integer.parseInt(fin.readLine()); for (int i = 0; i < nSups; i++) { String line = fin.readLine(); String[] fields = line.split(":"); final int superssn = Integer.parseInt(fields[0]); String[] subs = fields[1].split(","); List emps = db.query(new Predicate() { public boolean match(Employee emp) { return (emp.getSsn() == superssn); } }); Employee s = emps.get(0); for (int j = 0; j < subs.length; j++) { final int essn = Integer.parseInt(subs[j]); List subworkers = db.query(new Predicate() { public boolean match(Employee emp) { return (emp.getSsn() == essn); } }); Employee e = subworkers.get(0); e.setSupervisor(s); db.store(e); s.addSupervisee(e); } db.store(s); } } } private static void createWorksOn(ObjectContainer db) throws Exception { InputFile fin = new InputFile(); if (fin.openFile("data/worksOn.dat")) { int nWorksOn = Integer.parseInt(fin.readLine()); for (int i = 0; i < nWorksOn; i++) { String line = fin.readLine(); String[] fields = line.split(","); final int essn = Integer.parseInt(fields[0]); final int pno = Integer.parseInt(fields[1]); float hours = Float.parseFloat(fields[2]); List emps = db.query(new Predicate() { public boolean match(Employee emp) { return (emp.getSsn() == essn); } }); Employee e = emps.get(0); List prjs = db.query(new Predicate() { public boolean match(Project prj) { return (prj.getPnumber() == pno); } }); Project p = prjs.get(0); WorksOn won = new WorksOn(hours); won.setEmployee(e); won.setProject(p); db.store(won); e.addWorksOn(won); p.addWorksOn(won); db.store(e); db.store(p); //System.out.println(i+" Just added "+essn+" "+pno+" "+hours); } } } }