2
0
Fork 0

made first demo almost fully working

This commit is contained in:
Willem Cazander 2012-11-26 16:08:45 +01:00
parent 2a0d992642
commit 01b3b5cc54
104 changed files with 3259 additions and 2181 deletions

View file

@ -22,6 +22,11 @@
package net.forwardfire.vasc.backend.metamodel;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
import org.eobjects.metamodel.DataContext;
@ -29,11 +34,14 @@ import org.eobjects.metamodel.schema.Column;
import org.eobjects.metamodel.schema.Relationship;
import org.eobjects.metamodel.schema.Table;
import net.forwardfire.vasc.backend.VascBackend;
import net.forwardfire.vasc.backend.VascBackendControllerLocal;
import net.forwardfire.vasc.core.VascController;
import net.forwardfire.vasc.core.VascEntry;
import net.forwardfire.vasc.core.VascEntryAccessType;
import net.forwardfire.vasc.core.VascEntryControllerLocal;
import net.forwardfire.vasc.core.VascEntryFieldLocal;
import net.forwardfire.vasc.core.VascEntryGroupLocal;
import net.forwardfire.vasc.core.VascEntryLinkType;
import net.forwardfire.vasc.core.VascEntryLocal;
@ -53,15 +61,25 @@ public class MetaModelSchemaAutoEntry {
private Logger logger = null;
private VascController vascController = null;
private MetaModelDataContextProvider dataContextProvider = null;
private List<String> tables = null;
private String tableInclude = null;
private String tableExclude = null;
private String entryPrefix = null;
private String vascGroupId = null;
private Map<String,VascEntryLocal> resultEntries = null;
private Map<String,VascEntryGroupLocal> resultEntryGroups = null;
private Map<String,MetaModelVascBackend> resultBackends = null;
public MetaModelSchemaAutoEntry() {
logger = Logger.getLogger(MetaModelSchemaAutoEntry.class.getName());
tables = new ArrayList<String>();
resultEntries = new HashMap<String,VascEntryLocal>();
resultEntryGroups = new HashMap<String,VascEntryGroupLocal>();
resultBackends = new HashMap<String,MetaModelVascBackend>();
}
public void autoCreateEntries(VascController vascController) {
public void autoFillResult(VascController vascController) {
if (getDataContextProvider()==null) {
throw new NullPointerException("Can't auto create entries with null dataContextProvider.");
}
@ -72,6 +90,10 @@ public class MetaModelSchemaAutoEntry {
DataContext ds = getDataContextProvider().getDataContext();
for (String table:ds.getDefaultSchema().getTableNames()) {
if (tables.isEmpty()==false && tables.contains(table)==false) {
logger.finer("Excluding table: "+table+" because not in table list.");
continue;
}
if (getTableInclude()!=null && table.matches(getTableInclude())==false) {
logger.finer("Excluding table: "+table+" from include rule.");
continue;
@ -84,10 +106,22 @@ public class MetaModelSchemaAutoEntry {
}
}
public void autoAddResultToController() {
for (VascBackend backend:resultBackends.values()) {
((VascBackendControllerLocal)getVascController().getVascBackendController()).addVascBackend(backend);
}
for (VascEntryLocal ve:resultEntries.values()) {
((VascEntryControllerLocal)getVascController().getVascEntryController()).addVascEntry(ve);
}
for (VascEntryGroupLocal veg:resultEntryGroups.values()) {
((VascEntryControllerLocal)getVascController().getVascEntryController()).addVascEntryGroup(veg);
}
}
private VascController getVascController() {
return vascController;
}
private void createMetaEntry(DataContext ds,String id,String tableName) {
logger.fine("Creating entry id: "+id+" of table: "+tableName);
Table metaTable = null;
@ -117,28 +151,28 @@ public class MetaModelSchemaAutoEntry {
ve.setId(id);
ve.setBackendId(id+"_backend");
ve.setPrimaryKeyFieldId(backend.getTableId());
ve.setVascGroupId(getVascGroupId());
createFields(ve,cols);
for (Relationship rs:metaTable.getRelationships()) {
logger.finer("Found relation FT: "+rs.getForeignTable().getName()+" PT: "+rs.getPrimaryTable().getName());
if (tableName.equals(rs.getForeignTable().getName())==false) {
logger.finer("Creating Link entry for: "+rs.getForeignColumns()[0].getName()+" of table: "+rs.getForeignTable().getName());
createLinkEntry(rs,ve,metaTable,id+"_"+rs.getForeignTable().getName()+"_"+rs.getForeignColumns()[0].getName()+"_link");
createLinkEntry(rs,ve,metaTable);
//createLinkEntry(rs,ve,metaTable,id+"_"+rs.getForeignTable().getName()+"_"+rs.getForeignColumns()[0].getName()+"_link");
} else {
logger.finer("Creating List entry for: "+rs.getPrimaryColumns()[0].getName()+" of table: "+rs.getPrimaryTable().getName());
createListEntry(rs,ve,metaTable,id+"_"+rs.getPrimaryTable().getName()+"_"+rs.getPrimaryColumns()[0].getName()+"_list");
createListEntry(rs,ve,metaTable);
//createListEntry(rs,ve,metaTable,id+"_"+rs.getPrimaryTable().getName()+"_"+rs.getPrimaryColumns()[0].getName()+"_list");
}
}
try {
((VascBackendControllerLocal)getVascController().getVascBackendController()).addVascBackend(backend);
((VascEntryControllerLocal)getVascController().getVascEntryController()).addVascEntry(ve);
} catch (Exception ee) {
ee.printStackTrace();
}
resultBackends.put(backend.getId(),backend);
resultEntries.put(ve.getId(),ve);
}
private void createLinkEntry(Relationship rs2,VascEntryLocal ve,Table metaTable,String id) {
private void createLinkEntry(Relationship rs2,VascEntryLocal ve,Table metaTable) {
String id = getEntryPrefix()+"_"+metaTable.getName()+"_link";
MetaModelVascBackend backendLink = new MetaModelVascBackend();
backendLink.setId(id+"_backend");
backendLink.setDataContextProvider(getDataContextProvider());
@ -159,6 +193,8 @@ public class MetaModelSchemaAutoEntry {
veLink.setId(id);
veLink.setBackendId(id+"_backend");
veLink.setPrimaryKeyFieldId(backendLink.getTableId());
veLink.setVascGroupId(getVascGroupId());
veLink.setAccessType(VascEntryAccessType.ENTRY_LIST);
createFields(veLink,cols);
for (Relationship rs:rs2.getForeignTable().getRelationships()) {
@ -168,32 +204,31 @@ public class MetaModelSchemaAutoEntry {
//createLinkEntry(rs,ve,rs2.getForeignTable(),id+"_"+rs.getForeignTable().getName()+"_"+rs.getForeignColumns()[0].getName()+"_link");
} else {
logger.fine("Creating List entry for: "+rs.getPrimaryColumns()[0].getName()+" of table: "+rs.getPrimaryTable().getName());
createListEntry(rs,veLink,rs2.getForeignTable(),id+"_"+rs.getPrimaryTable().getName()+"_"+rs.getPrimaryColumns()[0].getName()+"_list");
createListEntry(rs,veLink,rs2.getForeignTable());
//createListEntry(rs,veLink,rs2.getForeignTable(),id+"_"+rs.getPrimaryTable().getName()+"_"+rs.getPrimaryColumns()[0].getName()+"_list");
}
}
try {
((VascBackendControllerLocal)getVascController().getVascBackendController()).addVascBackend(backendLink);
((VascEntryControllerLocal)getVascController().getVascEntryController()).addVascEntry(veLink);
DefaultVascEntryLink vle = new DefaultVascEntryLink();
vle.setId(id+"Link");
vle.setVascLinkEntryType(VascEntryLinkType.DEFAULT_TYPE);
vle.setVascEntryId(id);
vle.addEntryParameterFieldId(rs2.getForeignColumns()[0].getName(), rs2.getPrimaryColumns()[0].getName());
ve.addVascEntryLink(vle);
} catch (Exception e) {
e.printStackTrace();
if (resultBackends.containsKey(backendLink.getId())==false) {
resultBackends.put(backendLink.getId(),backendLink);
resultEntries.put(veLink.getId(),veLink);
}
DefaultVascEntryLink vle = new DefaultVascEntryLink();
vle.setId(id+"Link");
vle.setVascEntryLinkType(VascEntryLinkType.DEFAULT_TYPE);
vle.setVascEntryId(id);
vle.addEntryParameterFieldId(rs2.getForeignColumns()[0].getName(), rs2.getPrimaryColumns()[0].getName());
ve.addVascEntryLink(vle);
}
private void createListEntry(Relationship rs,VascEntry ve,Table metaTable,String id) {
MetaModelVascBackend backendLink = new MetaModelVascBackend();
backendLink.setId(id+"_backend");
backendLink.setDataContextProvider(getDataContextProvider());
backendLink.setTable(rs.getPrimaryTable().getName());
private void createListEntry(Relationship rs,VascEntry ve,Table metaTable) {
String id = getEntryPrefix()+"_"+metaTable.getName()+"_list";
MetaModelVascBackend backendList = new MetaModelVascBackend();
backendList.setId(id+"_backend");
backendList.setDataContextProvider(getDataContextProvider());
backendList.setTable(rs.getPrimaryTable().getName());
Column[] keys = rs.getPrimaryTable().getPrimaryKeys();
Column[] cols = rs.getPrimaryTable().getColumns();
@ -201,33 +236,35 @@ public class MetaModelSchemaAutoEntry {
return;
}
if (keys.length>0) {
backendLink.setTableId(keys[0].getName());
backendList.setTableId(keys[0].getName());
} else {
backendLink.setTableId(cols[0].getName());
backendList.setTableId(cols[0].getName());
}
DefaultVascEntry veLink = new DefaultVascEntry();
veLink.setId(id);
veLink.setBackendId(id+"_backend");
veLink.setPrimaryKeyFieldId(backendLink.getTableId());
createFields(veLink,cols);
try {
VascEntryFieldLocal vef = (VascEntryFieldLocal)ve.getVascEntryFieldById(rs.getForeignColumns()[0].getName());
if (vef==null) {
logger.warning("Could not find: "+rs.getForeignColumns()[0].getName()+" in ve: "+ve.getId());
return;
}
vef.setVascEntryFieldType(getVascController().getVascEntryFieldTypeController().getVascEntryFieldTypeById("ListField"));
VascSelectItemModelEntry itemModel = new VascSelectItemModelEntry();
itemModel.setEntryId(veLink.getId());
itemModel.setDisplayFieldId(veLink.getDisplayNameFieldId());
vef.getVascEntryFieldType().setDataObject(itemModel);
((VascBackendControllerLocal)getVascController().getVascBackendController()).addVascBackend(backendLink);
((VascEntryControllerLocal)getVascController().getVascEntryController()).addVascEntry(veLink);
} catch (Exception e) {
e.printStackTrace();
DefaultVascEntry veList = new DefaultVascEntry();
veList.setId(id);
veList.setBackendId(id+"_backend");
veList.setPrimaryKeyFieldId(backendList.getTableId());
veList.setVascGroupId(getVascGroupId());
veList.setAccessType(VascEntryAccessType.ENTRY_LIST);
createFields(veList,cols);
if (resultBackends.containsKey(backendList.getId())==false) {
resultBackends.put(backendList.getId(),backendList);
resultEntries.put(veList.getId(),veList);
}
VascEntryFieldLocal vef = (VascEntryFieldLocal)ve.getVascEntryFieldById(rs.getForeignColumns()[0].getName());
if (vef==null) {
logger.warning("Could not find: "+rs.getForeignColumns()[0].getName()+" in ve: "+ve.getId());
return;
}
vef.setVascEntryFieldType(getVascController().getVascEntryFieldTypeController().getVascEntryFieldTypeById("ListField"));
VascSelectItemModelEntry itemModel = new VascSelectItemModelEntry();
itemModel.setEntryId(veList.getId());
itemModel.setDisplayFieldId(veList.getDisplayNameFieldId());
vef.getVascEntryFieldType().setDataObject(itemModel);
}
private void createFields(VascEntryLocal ve,Column[] cols) {
@ -317,4 +354,53 @@ public class MetaModelSchemaAutoEntry {
public void setEntryPrefix(String entryPrefix) {
this.entryPrefix = entryPrefix;
}
/**
* @return the vascGroupId
*/
public String getVascGroupId() {
return vascGroupId;
}
/**
* @param vascGroupId the vascGroupId to set
*/
public void setVascGroupId(String vascGroupId) {
this.vascGroupId = vascGroupId;
}
/**
* @return the resultEntries
*/
public Collection<VascEntryLocal> getResultEntries() {
return resultEntries.values();
}
/**
* @return the resultEntryGroups
*/
public Collection<VascEntryGroupLocal> getResultEntryGroups() {
return resultEntryGroups.values();
}
/**
* @return the resultBackends
*/
public Collection<MetaModelVascBackend> getResultBackends() {
return resultBackends.values();
}
/**
* @return the tables
*/
public List<String> getTables() {
return tables;
}
public void addTable(String table) {
tables.add(table);
}
public void removeTable(String table) {
tables.remove(table);
}
}

View file

@ -51,6 +51,7 @@ public class SchemaAutoEntryElementConfigurator extends AbstractElementConfigura
}
MetaModelSchemaAutoEntry autoEntry = (MetaModelSchemaAutoEntry)element.getElementObject();
VascController vascController = VascParser.getVascController(element.getElementLanguage());
autoEntry.autoCreateEntries(vascController);
autoEntry.autoFillResult(vascController);
autoEntry.autoAddResultToController();
}
}