package com.nexirius.theteam.persistence;
import com.nexirius.framework.datamodel.ArrayModel;
import com.nexirius.framework.datamodel.DataModel;
import com.nexirius.framework.datamodel.DataModelEnumeration;
import com.nexirius.framework.datamodel.DataModelVector;
import com.nexirius.theteam.datamodel.*;
import com.nexirius.util.SortedVector;
import java.io.File;
public class FileBasedTeamPersistence implements ITeamPersistence {
public FileBasedTeamPersistence() {
FilePersistence.init(System.getProperty("user.dir") + File.separator + "data" );
}
public void getAllMembers(ArrayModel members) {
members.clear();
SortedVector all = FilePersistence.getInstance().getAll(MemberModel.class);
for (MemberModel m = (MemberModel) all.firstObject(); m != null; m = (MemberModel) all.nextObject()) {
members.append(m);
m.getPerson().setInstanceName(m.getPersonId());
FilePersistence.getInstance().read(m.getPerson());
getAddressesForMember(m);
getPhonesForMember(m);
}
}
public void getAddressesForMember(MemberModel member) {
member.getAddresses().clear();
SortedVector all = FilePersistence.getInstance().getAll(AddressModel.class, ITeamPersistence.FOREIGN_KEY, member.getInstanceName());
for (AddressModel am = (AddressModel) all.firstObject(); am != null; am = (AddressModel) all.nextObject()) {
member.getAddresses().append(am);
}
}
public void getPhonesForMember(MemberModel member) {
member.getPhones().clear();
SortedVector all = FilePersistence.getInstance().getAll(PhoneModel.class, ITeamPersistence.FOREIGN_KEY, member.getInstanceName());
for (PhoneModel pm = (PhoneModel) all.firstObject(); pm != null; pm = (PhoneModel) all.nextObject()) {
member.getPhones().append(pm);
}
}
public void update(DataModel model) {
if (model instanceof ArrayModel) {
DataModelEnumeration en = model.getEnumeration();
while (en.hasMore()) {
DataModel child = en.next();
if (child.getInstanceName() == null) {
create(child);
} else {
update(child);
}
}
} else {
if (model instanceof MemberModel) {
MemberModel member = (MemberModel) model;
member.setRelatedInstancesTransient(true);
}
FilePersistence.getInstance().update(model);
if (model instanceof MemberModel) {
MemberModel member = (MemberModel) model;
member.setRelatedInstancesTransient(false);
}
}
}
public void updateChildren(DataModel parent, ArrayModel children) {
DataModelEnumeration en = children.getEnumeration();
while (en.hasMore()) {
DataModel child = en.next();
if (child.getInstanceName() == null) {
child.setChildText(ITeamPersistence.FOREIGN_KEY, parent.getInstanceName());
create(child);
} else {
update(child);
}
}
delete(children.getDeleted());
}
public void create(DataModel model) {
FilePersistence.getInstance().create(model);
}
public void createChildren(DataModel parent, ArrayModel children) {
if (parent.getInstanceName() == null) {
create(parent);
}
DataModelEnumeration en = children.getEnumeration();
while (en.hasMore()) {
DataModel model = en.next();
model.setChildText(ITeamPersistence.FOREIGN_KEY, parent.getInstanceName());
create(model);
}
}
public void delete(DataModel model) {
FilePersistence.getInstance().delete(model);
}
public void delete(DataModelVector v) {
if (v == null) {
return;
}
DataModelEnumeration en = v.getEnumeration();
while (en.hasMore()) {
FilePersistence.getInstance().delete(en.next());
}
}
public void deleteMember(MemberModel member) {
AddressArrayModel addresses = member.getAddresses();
DataModelEnumeration en = addresses.getEnumeration();
while (en.hasMore()) {
DataModel model = en.next();
FilePersistence.getInstance().delete(model);
}
PhoneArrayModel phones = member.getPhones();
DataModelEnumeration en1 = phones.getEnumeration();
while (en1.hasMore()) {
DataModel model = en1.next();
FilePersistence.getInstance().delete(model);
}
FilePersistence.getInstance().delete(member.getPerson());
FilePersistence.getInstance().delete(member);
}
}