package ilarkesto.mda.legacy.generator; import ilarkesto.auth.DeleteProtected; import ilarkesto.auth.EditProtected; import ilarkesto.auth.Ownable; import ilarkesto.auth.ViewProtected; import ilarkesto.base.Str; import ilarkesto.base.time.Date; import ilarkesto.base.time.DateAndTime; import ilarkesto.base.time.Time; import ilarkesto.mda.legacy.model.EntityModel; import ilarkesto.mda.legacy.model.PropertyModel; import ilarkesto.persistence.ADatob; import ilarkesto.persistence.AEntity; import ilarkesto.search.Searchable; import java.util.LinkedHashSet; import java.util.Set; public class EntityGenerator extends DatobGenerator<EntityModel> { public EntityGenerator(EntityModel bean) { super(bean); } @Override protected void writeContent() { String daoName = Str.lowercaseFirstLetter(bean.getDaoName()); if (!bean.isAbstract()) { ln(); comment(AEntity.class.getSimpleName()); ln(); s(" public final " + bean.getDaoName() + " getDao() {").ln(); s(" return " + daoName + ";").ln(); s(" }").ln(); } ln(); ln(" protected void repairDeadDatob(" + ADatob.class.getSimpleName() + " datob) {"); for (PropertyModel p : bean.getProperties()) { if (!p.isValueObject()) continue; if (p.isCollection()) { ln(" if (" + getFieldName(p) + ".contains(datob)) {"); ln(" " + getFieldName(p) + ".remove(datob);"); ln(" fireModified(\"" + p.getName() + "-=\" + datob);"); ln(" }"); } else { ln(" if (valueObject.equals(" + getFieldName(p) + ")) {"); ln(" " + getFieldName(p) + " = null;"); ln(" fireModified(\"" + p.getName() + "=null\");"); ln(" }"); } } ln(" }"); ln(); ln(" @Override"); ln(" public void storeProperties(Map properties) {"); ln(" super.storeProperties(properties);"); for (PropertyModel p : bean.getProperties()) { if (p.isCollection()) { String propertyVar = p.isReference() ? p.getName() + "Ids" : p.getName(); ln(" properties.put(\"" + propertyVar + "\", this." + propertyVar + ");"); } else { String propertyVar = p.isReference() ? p.getName() + "Id" : p.getName(); if (p.getType().equals(Date.class.getName())) { ln(" properties.put(\"" + propertyVar + "\", this." + propertyVar + " == null ? null : this." + propertyVar + ".toString());"); } else if (p.getType().equals(Time.class.getName())) { ln(" properties.put(\"" + propertyVar + "\", this." + propertyVar + " == null ? null : this." + propertyVar + ".toString());"); } else if (p.getType().equals(DateAndTime.class.getName())) { ln(" properties.put(\"" + propertyVar + "\", this." + propertyVar + " == null ? null : this." + propertyVar + ".toString());"); } else { ln(" properties.put(\"" + propertyVar + "\", this." + propertyVar + ");"); } } } ln(" }"); // if (bean.isGwtSupport()) { // String dtoType = getPackage().replace(".server", ".client") + ".G" + bean.getName() + "Dto"; // ln(); // ln(" public " + dtoType + " createDto() {"); // ln(" " + dtoType + " dto = new " + dtoType + "();"); // for (PropertyModel p : bean.getProperties()) { // if (p.isCollection()) { // String propertyVar = p.isReference() ? p.getName() + "Ids" : p.getName(); // ln(" dto." + propertyVar + ".addAll(this." + propertyVar + ");"); // } else { // String propertyVar = p.isReference() ? p.getName() + "Id" : p.getName(); // if (p.getType().equals(Date.class.getName())) { // ln(" properties.put(\"" + propertyVar + "\", this." + propertyVar // + " == null ? null : this." + propertyVar + ".toString());"); // } else { // ln(" properties.put(\"" + propertyVar + "\", this." + propertyVar + ");"); // } // } // } // ln(" return dto;"); // ln(" }"); // } if (!bean.isAbstract()) { ln(); ln(" public int compareTo(" + bean.getName() + " other) {"); ln(" return toString().toLowerCase().compareTo(other.toString().toLowerCase());"); ln(" }"); } super.writeContent(); } @Override protected Set<String> getSuperinterfaces() { Set<String> result = new LinkedHashSet<String>(); result.addAll(super.getSuperinterfaces()); if (bean.isViewProtected()) result.add(ViewProtected.class.getName() + "<" + getUserClassName() + ">"); if (bean.isEditProtected()) result.add(EditProtected.class.getName() + "<" + getUserClassName() + ">"); if (bean.isDeleteProtected()) result.add(DeleteProtected.class.getName() + "<" + getUserClassName() + ">"); if (bean.isOwnable()) result.add(Ownable.class.getName() + "<" + getUserClassName() + ">"); if (bean.isSearchable()) result.add(Searchable.class.getName()); if (!bean.isAbstract()) result.add(Comparable.class.getName() + "<" + bean.getName() + ">"); return result; } protected final String getUserClassName() { EntityModel userModel = bean.getUserModel(); if (userModel == null && bean.getName().equals("User")) userModel = bean; return userModel.getPackageName() + "." + userModel.getName(); } @Override protected void writeDependencies() { super.writeDependencies(); String daoName = Str.lowercaseFirstLetter(bean.getDaoName()); if (!bean.isAbstract() && !bean.containsDependency(daoName)) { dependency(bean.getDaoName(), daoName, true, false); } } @Override protected void writeCollectionProperty(PropertyModel p) { super.writeCollectionProperty(p); // --- isOwner --- if ("owners".equals(p.getName()) && bean.isOwnable()) { ln(); ln(" public final boolean isOwner(" + getUserClassName() + " user) {"); ln(" return " + getFieldName(p) + ".contains(user.getId());"); ln(" }"); } // --- setOwner --- if ("owners".equals(p.getName())) { ln(); ln(" public void setOwner(" + getUserClassName() + " owner) {"); ln(" clearOwners();"); ln(" if (owner != null) addOwner((" + p.getContentType() + ")owner);"); ln(" }"); } } @Override protected boolean isCopyConstructorEnabled() { return false; } }