package net.sf.minuteProject.configuration.bean;
import java.util.ArrayList;
import java.util.List;
import net.sf.minuteProject.configuration.bean.enrichment.group.FieldGroup;
import net.sf.minuteProject.configuration.bean.enrichment.group.Group;
import net.sf.minuteProject.configuration.bean.model.data.Column;
import net.sf.minuteProject.configuration.bean.model.data.Table;
import net.sf.minuteProject.utils.ColumnUtils;
public abstract class PackageAdapter<T extends Group, E extends GeneratorBean> extends AbstractConfiguration{
protected List<T> groups;
private List<List<E>> groupsList;
public void setGroups(List<T> groups) {
this.groups = groups;
}
public void setDefaultGroup (T group) {
getGroups().add(group);
}
public abstract T getDefaultGroup ();
// public abstract List<T> getGroups();
public List<T> getGroups() {
if (groups==null)
groups=new ArrayList<T>();
return groups;
}
public List<List<E>> getGroupsList () {
if (groupsList==null) {
groupsList = new ArrayList<List<E>>();
List<E> es = new ArrayList<E>();
for (E e : getElements()) {
if (!contains(es, e)) {
List<E> eGroup = getElementGroup(e);
groupsList.add(eGroup);
es.addAll(eGroup);
}
}
}
return groupsList;
}
public abstract List<E> getElements() ;
private List<E> getElementGroup(E e) {
List<E> es = new ArrayList<E>();
for (T t : getGroups()) {
if (groupContainsElement(t, e)) {
return convertGroupToElement(t);
}
}
es.add(e);
return es;
}
protected abstract List<E> convertGroupToElement(T t);
private boolean groupContainsElement(T t, E e) {
for (String element : t.getList()) {
if (element.equals(e.getName())) {
return true;
}
}
return false;
}
private boolean contains(List<E> es, E e) {
for (E ee : es) {
if (ee.getName().equals(e.getName()))
return true;
}
return false;
}
}