package ilarkesto.mda.legacy.model;
import ilarkesto.base.Str;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
public abstract class BeanModel extends AModel {
private String packageName;
private Set<DependencyModel> dependencies = new LinkedHashSet<DependencyModel>();
private Set<CompositeModel> composites = new LinkedHashSet<CompositeModel>();
private Set<EventModel> events = new LinkedHashSet<EventModel>();
private List<PredicateModel> predicates = new ArrayList<PredicateModel>();
private boolean _abstract;
private BeanModel superbean;
private String superclass;
public BeanModel(String name, String packageName) {
super(name);
this.packageName = packageName;
}
public PredicateModel addPredicate(String name) {
PredicateModel predicate = new PredicateModel(name);
predicates.add(predicate);
return predicate;
}
public List<PredicateModel> getPredicates() {
return predicates;
}
@Deprecated
public boolean isEntity() {
return false;
}
@Deprecated
public boolean isValueObject() {
return false;
}
public String getBeanClass() {
return getPackageName() + "." + getName();
}
public Set<CompositeModel> getComposites() {
return composites;
}
public void addDaosAsComposites(Collection<EntityModel> entites) {
for (EntityModel entity : entites) {
addDaoAsComposite(entity);
}
}
public CompositeModel addDaoAsComposite(EntityModel entity) {
return addComposite(entity.getPackageName() + "." + entity.getDaoName(), entity.getDaoName());
}
public CompositeModel addComposite(BeanModel bean) {
return addComposite(bean.getBeanClass(), bean.getName());
}
public CompositeModel addComposite(String type, String name) {
CompositeModel composite = new CompositeModel(type, name);
composites.add(composite);
return composite;
}
public CompositeModel addComposite(String type) {
if (!Character.isUpperCase(type.charAt(0)))
throw new RuntimeException("Type needs to start with uppercase character: " + type);
return addComposite(type, Str.lowercaseFirstLetter(type));
}
public EventModel addEvent(String name) {
EventModel event = new EventModel(name);
events.add(event);
return event;
}
public Set<EventModel> getEvents() {
return events;
}
public String getAbstractBaseClassName() {
return "G" + getName();
}
public final String getPackageName() {
return packageName;
}
public final String getGwtPackageName() {
return packageName.replace(".server", ".client");
}
public Set<DependencyModel> getDependencies() {
return dependencies;
}
private void addDependency(DependencyModel dependencyModel) {
dependencies.add(dependencyModel);
}
public boolean containsDependency(String name) {
for (DependencyModel dm : dependencies) {
if (dm.getName().equals(name)) return true;
}
return false;
}
protected DependencyModel addDependency(String type, String name) {
// DEBUG.out("addDependency",type,name);
DependencyModel dependencyModel = new DependencyModel(type, name);
addDependency(dependencyModel);
return dependencyModel;
}
public boolean isAbstract() {
return _abstract;
}
public void setAbstract(boolean value) {
this._abstract = value;
}
public String getSuperclass() {
if (superbean != null) { return superbean.getName(); }
return superclass;
}
public BeanModel getSuperbean() {
return superbean;
}
public void setSuperbean(BeanModel superentity) {
if (superclass != null) throw new RuntimeException("superclass already set");
this.superbean = superentity;
}
public void setSuperclass(String superClass) {
if (superbean != null) throw new RuntimeException("superbean already set");
this.superclass = superClass;
}
}