Switch to new meta model,fixed small bugs and made demo work pretty oke.
This commit is contained in:
parent
afd821c360
commit
b3635cf64d
46 changed files with 1055 additions and 688 deletions
|
|
@ -102,7 +102,7 @@ public class XpqlHibernateVascBackend extends AbstractHibernateVascBackend {
|
|||
i++;
|
||||
}
|
||||
if (isPageable() && state.getPageSize()>0) {
|
||||
q.setFirstResult(state.getPageIndex());
|
||||
q.setFirstResult(state.getPageIndex()*state.getPageSize());
|
||||
q.setMaxResults(state.getPageSize());
|
||||
}
|
||||
List<Object> data = q.list();
|
||||
|
|
|
|||
|
|
@ -102,7 +102,7 @@ public class XpqlPersistanceVascBackend extends AbstractPersistenceVascBackend
|
|||
i++;
|
||||
}
|
||||
if (isPageable() && state.getPageSize()>0) {
|
||||
q.setFirstResult(state.getPageIndex());
|
||||
q.setFirstResult(state.getPageIndex()*state.getPageSize());
|
||||
q.setMaxResults(state.getPageSize());
|
||||
}
|
||||
if (emTransaction) {
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@
|
|||
xsi:schemaLocation="http://eld.x4o.org/xml/ns/eld-root http://eld.x4o.org/xml/ns/eld-root-1.0.xsd"
|
||||
providerName="vasc.forwardfire.net"
|
||||
name="Vasc Backend JPA"
|
||||
id="mod-vasc-backend-jpa"
|
||||
id="vasc-backend-jpa"
|
||||
>
|
||||
<description>Provides VASC JPA backend support.</description>
|
||||
<namespace uri="http://vasc.forwardfire.net/xml/ns/vasc-backend-jpa"
|
||||
|
|
|
|||
|
|
@ -61,6 +61,8 @@ public class LdapVascBackend extends AbstractVascBackend {
|
|||
private String keyAttribute = null;
|
||||
private String ldapFilter = null;
|
||||
private String createObjectClass = null;
|
||||
private int timeLimit = 10000;
|
||||
private boolean referralFollowing = true;
|
||||
|
||||
/**
|
||||
* @return the ldapConnectionProvider
|
||||
|
|
@ -75,9 +77,6 @@ public class LdapVascBackend extends AbstractVascBackend {
|
|||
public void setLdapConnectionProvider(LdapConnectionProvider ldapConnectionProvider) {
|
||||
this.ldapConnectionProvider = ldapConnectionProvider;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.VascBackend#execute()
|
||||
|
|
@ -88,23 +87,21 @@ public class LdapVascBackend extends AbstractVascBackend {
|
|||
List<Object> result = new ArrayList<Object>(50);
|
||||
try {
|
||||
|
||||
|
||||
LDAPSearchConstraints cons = new LDAPSearchConstraints();
|
||||
cons.setBatchSize( 0 );
|
||||
cons.setTimeLimit( 10000 ) ;
|
||||
cons.setReferralFollowing(true);
|
||||
cons.setTimeLimit(getTimeLimit() ) ;
|
||||
cons.setReferralFollowing(isReferralFollowing());
|
||||
connection.setConstraints(cons);
|
||||
|
||||
int searchScope = LDAPConnection.SCOPE_ONE;
|
||||
String searchBase = baseDN;
|
||||
|
||||
//System.out.println("Reading object :" + searchBase + " with filter: " + ldapFilter);
|
||||
LDAPSearchResults searchResults = connection.search(
|
||||
searchBase, // object to read
|
||||
searchScope, // scope - read single object
|
||||
ldapFilter, // search filter
|
||||
null, // return all attributes
|
||||
false); // return attrs and values
|
||||
searchBase, // object to read
|
||||
searchScope, // scope - read single object
|
||||
getLdapFilter(), // search filter
|
||||
null, // return all attributes
|
||||
false); // return attrs and values
|
||||
|
||||
while (searchResults.hasMore()) {
|
||||
LDAPEntry entry = searchResults.next();
|
||||
|
|
@ -114,7 +111,6 @@ public class LdapVascBackend extends AbstractVascBackend {
|
|||
Iterator<LDAPAttribute> i = attributeSet.iterator();
|
||||
while (i.hasNext()) {
|
||||
LDAPAttribute attr = i.next();
|
||||
//System.out.println("ATTR: "+attr.getName()+" value: "+attr.getStringValue());
|
||||
String[] s = attr.getStringValueArray();
|
||||
if (s.length==1) {
|
||||
map.put(attr.getName(), attr.getStringValue());
|
||||
|
|
@ -149,14 +145,12 @@ public class LdapVascBackend extends AbstractVascBackend {
|
|||
String keyValue = (String)map.get(keyAttribute);
|
||||
LDAPSearchConstraints cons = new LDAPSearchConstraints();
|
||||
cons.setBatchSize( 0 );
|
||||
cons.setTimeLimit( 10000 ) ;
|
||||
cons.setReferralFollowing(true);
|
||||
cons.setTimeLimit(getTimeLimit() ) ;
|
||||
cons.setReferralFollowing(isReferralFollowing());
|
||||
connection.setConstraints(cons);
|
||||
|
||||
int searchScope = LDAPConnection.SCOPE_ONE;
|
||||
String searchBase = baseDN;
|
||||
String filter = "(&("+keyAttribute+"="+keyValue+"))";
|
||||
System.out.println("ldap filter: "+filter);
|
||||
String filter = "(&"+ldapFilter+"("+keyAttribute+"="+keyValue+"))";
|
||||
LDAPSearchResults searchResults = connection.search(
|
||||
searchBase, // object to read
|
||||
searchScope, // scope - read single object
|
||||
|
|
@ -210,8 +204,9 @@ public class LdapVascBackend extends AbstractVascBackend {
|
|||
}
|
||||
|
||||
LDAPModification[] m = new LDAPModification[mods.size()];
|
||||
mods.toArray(m);
|
||||
m = mods.toArray(m);
|
||||
connection.modify(entry.getDN(), m);
|
||||
|
||||
return object;
|
||||
} catch (Exception e) {
|
||||
throw new VascException(e);
|
||||
|
|
@ -270,7 +265,7 @@ public class LdapVascBackend extends AbstractVascBackend {
|
|||
String keyValue = (String)map.get(keyAttribute);
|
||||
int searchScope = LDAPConnection.SCOPE_ONE;
|
||||
String searchBase = baseDN;
|
||||
String filter = "(&("+ldapFilter+")("+keyAttribute+"="+keyValue+"))";
|
||||
String filter = "(&"+ldapFilter+"("+keyAttribute+"="+keyValue+"))";
|
||||
LDAPSearchResults searchResults = connection.search(
|
||||
searchBase, // object to read
|
||||
searchScope, // scope - read single object
|
||||
|
|
@ -362,4 +357,32 @@ public class LdapVascBackend extends AbstractVascBackend {
|
|||
public void setCreateObjectClass(String createObjectClass) {
|
||||
this.createObjectClass = createObjectClass;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the timeLimit
|
||||
*/
|
||||
public int getTimeLimit() {
|
||||
return timeLimit;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param timeLimit the timeLimit to set
|
||||
*/
|
||||
public void setTimeLimit(int timeLimit) {
|
||||
this.timeLimit = timeLimit;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the referralFollowing
|
||||
*/
|
||||
public boolean isReferralFollowing() {
|
||||
return referralFollowing;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param referralFollowing the referralFollowing to set
|
||||
*/
|
||||
public void setReferralFollowing(boolean referralFollowing) {
|
||||
this.referralFollowing = referralFollowing;
|
||||
}
|
||||
}
|
||||
|
|
@ -26,7 +26,6 @@ import java.net.UnknownHostException;
|
|||
|
||||
import org.eobjects.metamodel.DataContext;
|
||||
import org.eobjects.metamodel.mongodb.MongoDbDataContext;
|
||||
import org.eobjects.metamodel.mongodb.MongoDbDataContextBean;
|
||||
|
||||
import com.mongodb.DB;
|
||||
import com.mongodb.Mongo;
|
||||
|
|
@ -51,13 +50,16 @@ public class MetaModelDataContextMongodb implements MetaModelDataContextProvider
|
|||
protected Mongo mongo = null;
|
||||
|
||||
public DataContext getDataContext() {
|
||||
MongoDbDataContextBean dataContext = new MongoDbDataContextBean(getMongodbConnection());
|
||||
dataContext.setRegisterMBean(true);
|
||||
dataContext.start();
|
||||
//MongoDbDataContextBean dataContext = new MongoDbDataContextBean(getMongodbConnection());
|
||||
///dataContext.setRegisterMBean(true);
|
||||
//dataContext.start();
|
||||
|
||||
//MongoDbDataContextSchemaDetector detector = new MongoDbDataContextSchemaDetector();
|
||||
//detector.setDataCheckSize(10);
|
||||
//detector.setSearchReference(true);
|
||||
//DataContext dataContext = detector.new MongoDbDataContextExtended(getMongodbConnection(),detector);
|
||||
|
||||
DataContext dataContext = new MongoDbDataContext(getMongodbConnection());
|
||||
return dataContext;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -23,7 +23,9 @@
|
|||
package net.forwardfire.vasc.backend.metamodel;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
|
@ -67,6 +69,8 @@ public class MetaModelSchemaAutoEntry {
|
|||
private String tableExclude = null;
|
||||
private String entryPrefix = null;
|
||||
private String vascGroupId = null;
|
||||
private String veLinkPostfix = "_velink";
|
||||
private String veListPostfix = "_velist";
|
||||
|
||||
private Map<String,VascEntryLocal> resultEntries = null;
|
||||
private Map<String,VascEntryGroupLocal> resultEntryGroups = null;
|
||||
|
|
@ -160,11 +164,9 @@ public class MetaModelSchemaAutoEntry {
|
|||
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);
|
||||
//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);
|
||||
//createListEntry(rs,ve,metaTable,id+"_"+rs.getPrimaryTable().getName()+"_"+rs.getPrimaryColumns()[0].getName()+"_list");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -173,7 +175,7 @@ public class MetaModelSchemaAutoEntry {
|
|||
}
|
||||
|
||||
private void createLinkEntry(Relationship rs2,VascEntryLocal ve,Table metaTable) {
|
||||
String id = getEntryPrefix()+"_"+metaTable.getName()+"_link";
|
||||
String id = getEntryPrefix()+"_"+rs2.getForeignTable().getName()+getVeLinkPostfix();
|
||||
MetaModelVascBackend backendLink = new MetaModelVascBackend();
|
||||
backendLink.setId(id+"_backend");
|
||||
backendLink.setDataContextProvider(getDataContextProvider());
|
||||
|
|
@ -195,26 +197,25 @@ public class MetaModelSchemaAutoEntry {
|
|||
veLink.setBackendId(id+"_backend");
|
||||
veLink.setPrimaryKeyFieldId(backendLink.getTableId());
|
||||
veLink.setVascGroupId(getVascGroupId());
|
||||
veLink.setAccessType(VascEntryAccessType.ENTRY_LIST);
|
||||
veLink.setAccessType(VascEntryAccessType.ENTRY_LINK);
|
||||
createFields(veLink,cols);
|
||||
|
||||
if (resultBackends.containsKey(backendLink.getId())==false) {
|
||||
resultBackends.put(backendLink.getId(),backendLink);
|
||||
resultEntries.put(veLink.getId(),veLink);
|
||||
}
|
||||
|
||||
for (Relationship rs:rs2.getForeignTable().getRelationships()) {
|
||||
logger.finer("Found relation FT: "+rs.getForeignTable().getName()+" PT: "+rs.getPrimaryTable().getName());
|
||||
if (rs2.getForeignTable().getName().equals(rs.getForeignTable().getName())==false) {
|
||||
//logger.info("Creating Link entry for: "+rs.getForeignColumns()[0].getName()+" of table: "+rs.getForeignTable().getName());
|
||||
//createLinkEntry(rs,ve,rs2.getForeignTable(),id+"_"+rs.getForeignTable().getName()+"_"+rs.getForeignColumns()[0].getName()+"_link");
|
||||
//createLinkEntry(rs,veLink,rs2.getForeignTable());
|
||||
} else {
|
||||
logger.fine("Creating List entry for: "+rs.getPrimaryColumns()[0].getName()+" of table: "+rs.getPrimaryTable().getName());
|
||||
createListEntry(rs,veLink,rs2.getForeignTable());
|
||||
//createListEntry(rs,veLink,rs2.getForeignTable(),id+"_"+rs.getPrimaryTable().getName()+"_"+rs.getPrimaryColumns()[0].getName()+"_list");
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
|
|
@ -225,7 +226,7 @@ public class MetaModelSchemaAutoEntry {
|
|||
}
|
||||
|
||||
private void createListEntry(Relationship rs,VascEntry ve,Table metaTable) {
|
||||
String id = getEntryPrefix()+"_"+metaTable.getName()+"_list";
|
||||
String id = getEntryPrefix()+"_"+rs.getPrimaryTable().getName()+getVeListPostfix();
|
||||
MetaModelVascBackend backendList = new MetaModelVascBackend();
|
||||
backendList.setId(id+"_backend");
|
||||
backendList.setDataContextProvider(getDataContextProvider());
|
||||
|
|
@ -263,27 +264,34 @@ public class MetaModelSchemaAutoEntry {
|
|||
|
||||
VascSelectItemModelEntry itemModel = new VascSelectItemModelEntry();
|
||||
itemModel.setEntryId(veList.getId());
|
||||
itemModel.setDisplayFieldId(veList.getDisplayNameFieldId());
|
||||
if (veList.getDisplayNameFieldId()==null) {
|
||||
itemModel.setDisplayFieldId(veList.getPrimaryKeyFieldId()); // display can be null see createFields(), in vasc display is not null but defaulted on primary id.
|
||||
} else {
|
||||
itemModel.setDisplayFieldId(veList.getDisplayNameFieldId());
|
||||
}
|
||||
|
||||
vef.getVascEntryFieldType().setDataObject(itemModel);
|
||||
|
||||
}
|
||||
|
||||
private void createFields(VascEntryLocal ve,Column[] cols) {
|
||||
for (Column c:cols) {
|
||||
String name = c.getName().toLowerCase();
|
||||
DefaultVascEntryField vef = new DefaultVascEntryField();
|
||||
vef.setId(c.getName());
|
||||
vef.setVascEntryFieldType(getVascController().getVascEntryFieldTypeController().getVascEntryFieldTypeByClass(c.getType().getJavaEquivalentClass()));
|
||||
|
||||
if (vef.getId().equals(ve.getPrimaryKeyFieldId())) {
|
||||
vef.setEditReadOnly(true);
|
||||
// vef.setCreate(false); mmm
|
||||
vef.setCreate(false);
|
||||
}
|
||||
|
||||
if (vef.getVascEntryFieldType()==null || "TextField".equals(vef.getVascEntryFieldType().getId())) {
|
||||
if (c.getName().toLowerCase().contains("desc") || c.getName().toLowerCase().contains("text")) {
|
||||
if (name.contains("desc") || name.contains("text") || name.contains("comment") || name.contains("memo") ) {
|
||||
vef.setVascEntryFieldType(getVascController().getVascEntryFieldTypeController().getVascEntryFieldTypeById("TextAreaField"));
|
||||
}
|
||||
if (c.getName().toLowerCase().contains("active")) {
|
||||
if (name.contains("active")) {
|
||||
vef.setDefaultValue("true");
|
||||
vef.setVascEntryFieldType(getVascController().getVascEntryFieldTypeController().getVascEntryFieldTypeById("BooleanField"));
|
||||
} /* todo
|
||||
if (c.getName().toLowerCase().contains("email")) {
|
||||
|
|
@ -293,25 +301,55 @@ public class MetaModelSchemaAutoEntry {
|
|||
vef.setVascEntryFieldType(getVascController().getVascEntryFieldTypeController().getVascEntryFieldTypeById("URLField"));
|
||||
} */
|
||||
}
|
||||
|
||||
if (vef.getVascEntryFieldType()!=null && vef.getVascEntryFieldType().getAutoDetectClass()==Date.class) {
|
||||
vef.setDefaultValue("now()");
|
||||
if (name.contains("create") || name.contains("modified")) {
|
||||
vef.setEdit(false);
|
||||
vef.setCreate(false);
|
||||
}
|
||||
if (name.contains("update")) {
|
||||
vef.setCreate(false);
|
||||
}
|
||||
}
|
||||
|
||||
ve.addVascEntryField(vef);
|
||||
if (ve.getDisplayNameFieldId()==null && c.getName().equals(ve.getPrimaryKeyFieldId())==false && c.getType().getJavaEquivalentClass()==String.class) {
|
||||
ve.setDisplayNameFieldId(c.getName());
|
||||
}
|
||||
}
|
||||
|
||||
// Disable lists when id contains;
|
||||
for (VascEntryField vef:ve.getVascEntryFields()) {
|
||||
String id = vef.getId().toLowerCase();
|
||||
if (ve.getDisplayNameFieldId()!=null && ve.getDisplayNameFieldId().equals(vef.getId())) {
|
||||
continue;
|
||||
}
|
||||
if (ve.getPrimaryKeyFieldId()!=null && ve.getPrimaryKeyFieldId().equals(vef.getId())) {
|
||||
continue;
|
||||
}
|
||||
if (vef.getList()!=null && vef.getList()==false) {
|
||||
continue;
|
||||
}
|
||||
if ( id.contains("email") |
|
||||
id.contains("phone") |
|
||||
id.contains("data") |
|
||||
id.contains("value") |
|
||||
id.contains("create") |
|
||||
id.contains("update") |
|
||||
id.contains("delete") |
|
||||
id.contains("classname") |
|
||||
id.contains("description")
|
||||
) {
|
||||
vef.setList(false);
|
||||
}
|
||||
}
|
||||
|
||||
// Some auto detection on fields so default imported list view looks oke on 8++ columns.
|
||||
if (ve.getVascEntryFields().size()>8) {
|
||||
if (ve.getVascEntryFields().size()>10) {
|
||||
List<String> vefListIds = new ArrayList<String>(20);
|
||||
int max = 0;
|
||||
for (VascEntryField vef:ve.getVascEntryFields()) {
|
||||
String id = vef.getId().toLowerCase();
|
||||
if ( id.contains("create") |
|
||||
id.contains("update") |
|
||||
id.contains("delete") |
|
||||
id.contains("classname") |
|
||||
id.contains("description")
|
||||
) {
|
||||
vef.setList(false);
|
||||
}
|
||||
if (ve.getDisplayNameFieldId()!=null && ve.getDisplayNameFieldId().equals(vef.getId())) {
|
||||
continue;
|
||||
}
|
||||
|
|
@ -322,14 +360,15 @@ public class MetaModelSchemaAutoEntry {
|
|||
continue;
|
||||
}
|
||||
vefListIds.add(vef.getId());
|
||||
}
|
||||
if (vefListIds.size()<8) {
|
||||
List<String> vefListFalseIds = vefListIds.subList(8-1, vefListIds.size());
|
||||
for (String key:vefListFalseIds) {
|
||||
VascEntryField vef = ve.getVascEntryFieldById(key);
|
||||
vef.setList(false);
|
||||
max++;
|
||||
if (max>8) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (String key:vefListIds) {
|
||||
VascEntryField vef = ve.getVascEntryFieldById(key);
|
||||
vef.setList(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -406,22 +445,43 @@ public class MetaModelSchemaAutoEntry {
|
|||
/**
|
||||
* @return the resultEntries
|
||||
*/
|
||||
public Collection<VascEntryLocal> getResultEntries() {
|
||||
return resultEntries.values();
|
||||
public List<VascEntryLocal> getResultEntries() {
|
||||
List<VascEntryLocal> result = new ArrayList<VascEntryLocal>(resultEntries.values());
|
||||
Collections.sort(result, new Comparator<VascEntryLocal>() {
|
||||
@Override
|
||||
public int compare(VascEntryLocal o1, VascEntryLocal o2) {
|
||||
return o1.getId().compareTo(o2.getId());
|
||||
}
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the resultEntryGroups
|
||||
*/
|
||||
public Collection<VascEntryGroupLocal> getResultEntryGroups() {
|
||||
return resultEntryGroups.values();
|
||||
public List<VascEntryGroupLocal> getResultEntryGroups() {
|
||||
List<VascEntryGroupLocal> result = new ArrayList<VascEntryGroupLocal>(resultEntryGroups.values());
|
||||
Collections.sort(result, new Comparator<VascEntryGroupLocal>() {
|
||||
@Override
|
||||
public int compare(VascEntryGroupLocal o1, VascEntryGroupLocal o2) {
|
||||
return o1.getId().compareTo(o2.getId());
|
||||
}
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the resultBackends
|
||||
*/
|
||||
public Collection<MetaModelVascBackend> getResultBackends() {
|
||||
return resultBackends.values();
|
||||
public List<MetaModelVascBackend> getResultBackends() {
|
||||
List<MetaModelVascBackend> result = new ArrayList<MetaModelVascBackend>(resultBackends.values());
|
||||
Collections.sort(result, new Comparator<MetaModelVascBackend>() {
|
||||
@Override
|
||||
public int compare(MetaModelVascBackend o1, MetaModelVascBackend o2) {
|
||||
return o1.getId().compareTo(o2.getId());
|
||||
}
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -437,4 +497,32 @@ public class MetaModelSchemaAutoEntry {
|
|||
public void removeTable(String table) {
|
||||
tables.remove(table);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the veLinkPostfix
|
||||
*/
|
||||
public String getVeLinkPostfix() {
|
||||
return veLinkPostfix;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param veLinkPostfix the veLinkPostfix to set
|
||||
*/
|
||||
public void setVeLinkPostfix(String veLinkPostfix) {
|
||||
this.veLinkPostfix = veLinkPostfix;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the veListPostfix
|
||||
*/
|
||||
public String getVeListPostfix() {
|
||||
return veListPostfix;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param veListPostfix the veListPostfix to set
|
||||
*/
|
||||
public void setVeListPostfix(String veListPostfix) {
|
||||
this.veListPostfix = veListPostfix;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,10 +32,13 @@ import org.eobjects.metamodel.DataContext;
|
|||
import org.eobjects.metamodel.UpdateableDataContext;
|
||||
import org.eobjects.metamodel.data.DataSet;
|
||||
import org.eobjects.metamodel.data.Row;
|
||||
import org.eobjects.metamodel.jdbc.JdbcDataContext;
|
||||
import org.eobjects.metamodel.query.OrderByItem.Direction;
|
||||
import org.eobjects.metamodel.query.Query;
|
||||
import org.eobjects.metamodel.query.SelectItem;
|
||||
import org.eobjects.metamodel.query.builder.SatisfiedQueryBuilder;
|
||||
import org.eobjects.metamodel.query.builder.SatisfiedWhereBuilder;
|
||||
import org.eobjects.metamodel.schema.Column;
|
||||
import org.eobjects.metamodel.schema.Schema;
|
||||
import org.eobjects.metamodel.schema.Table;
|
||||
|
||||
|
|
@ -131,6 +134,14 @@ public class MetaModelVascBackend extends AbstractVascBackend {
|
|||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.AbstractVascBackend#isSortable()
|
||||
*/
|
||||
@Override
|
||||
public boolean isSortable() {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see net.forwardfire.vasc.backend.AbstractVascBackend#fetchTotalExecuteSize(net.forwardfire.vasc.backend.VascBackendState)
|
||||
*/
|
||||
|
|
@ -208,8 +219,23 @@ public class MetaModelVascBackend extends AbstractVascBackend {
|
|||
throw new VascException("Could not get meta table for: '"+table+"'.");
|
||||
}
|
||||
Query q = createFilterQuery(state,t,false);
|
||||
if (isSortable() && state.getSortField() != null) {
|
||||
Column orderColumn = t.getColumnByName(state.getSortField());
|
||||
if (state.isSortAscending()) {
|
||||
q.orderBy(orderColumn,Direction.ASC);
|
||||
} else {
|
||||
q.orderBy(orderColumn,Direction.DESC);
|
||||
}
|
||||
}
|
||||
if (isPageable() && state.getPageSize()>0) {
|
||||
q.setFirstRow(state.getPageIndex()+1); // +1 for mm ?
|
||||
if (state.getPageIndex()>0) {
|
||||
q.setFirstRow((state.getPageIndex()*state.getPageSize())+1); // MM is 1 based ??
|
||||
|
||||
// workaround for bug in MM in jdbc/pg mode which is zero based.
|
||||
if (dataContext instanceof JdbcDataContext) {
|
||||
q.setFirstRow((state.getPageIndex()*state.getPageSize())+0); // MM is 1 based but sql is 0 based
|
||||
}
|
||||
}
|
||||
q.setMaxRows(state.getPageSize());
|
||||
}
|
||||
if (crudDataContext!=null) {
|
||||
|
|
@ -227,7 +253,7 @@ public class MetaModelVascBackend extends AbstractVascBackend {
|
|||
SelectItem[] cols = row.getSelectItems();
|
||||
List<String> keys = new ArrayList<String>(1);
|
||||
keys.add(cols[0].getColumn().getName());
|
||||
UpdateableRowMapImpl rowMM = new UpdateableRowMapImpl(dataContext.getDefaultSchema().getTableByName(table),keys);
|
||||
UpdateableRowMapImpl rowMM = new UpdateableRowMapImpl(dataContext.getDefaultSchema().getTableByName(table),keys,cols);
|
||||
for (SelectItem col:cols) {
|
||||
Object value = row.getValue(col);
|
||||
rowMM.setValue(col, value);
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ public class MongoDbDataContextSchemaDetector /* implements MetaModelSchemaDetec
|
|||
private int dataCheckSize = 100;
|
||||
private boolean searchReference = true;
|
||||
|
||||
public MongoDbDataContextSchemaDetector() {
|
||||
private MongoDbDataContextSchemaDetector() {
|
||||
}
|
||||
|
||||
public class MongoDbDataContextExtended extends QueryPostprocessDataContext /* MongoDbDataContext */ {
|
||||
|
|
@ -153,8 +153,10 @@ public class MongoDbDataContextSchemaDetector /* implements MetaModelSchemaDetec
|
|||
private boolean _closed;
|
||||
private volatile DBObject _dbObject;
|
||||
|
||||
public MongoDbDataSet(DBCursor cursor, Column[] columns,
|
||||
boolean queryPostProcessed) {
|
||||
public MongoDbDataSet(DBCursor cursor, Column[] columns,boolean queryPostProcessed) {
|
||||
|
||||
super(columns); // create header
|
||||
|
||||
_cursor = cursor;
|
||||
_selectItems = new SelectItem[columns.length];
|
||||
for (int i = 0; i < columns.length; i++) {
|
||||
|
|
@ -211,7 +213,7 @@ public class MongoDbDataContextSchemaDetector /* implements MetaModelSchemaDetec
|
|||
Object value = _dbObject.get(key);
|
||||
values[i] = toValue(_selectItems[i].getColumn(), value);
|
||||
}
|
||||
return new DefaultRow(_selectItems, values);
|
||||
return new DefaultRow(getHeader(), values);
|
||||
}
|
||||
|
||||
private Object toValue(Column column, Object value) {
|
||||
|
|
@ -440,6 +442,7 @@ public class MongoDbDataContextSchemaDetector /* implements MetaModelSchemaDetec
|
|||
|
||||
// Override to make public
|
||||
class PublicTable extends MutableTable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
public PublicTable(String name,TableType type) {
|
||||
super(name,type);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ package net.forwardfire.vasc.backend.metamodel.crud;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import org.eobjects.metamodel.DataContext;
|
||||
|
|
@ -45,15 +44,15 @@ abstract public class AbstractCrudDataContext implements CrudDataContext {
|
|||
public void persist(final UpdateableRow row) {
|
||||
UpdateableDataContext dataContext = abstractProviderUpdateableDataContext();
|
||||
dataContext.executeUpdate(new UpdateScript() {
|
||||
public void run(UpdateCallback backendImpl) {
|
||||
RowInsertionBuilder query = backendImpl.insertInto(row.getTable());
|
||||
for (int i=0;i<row.size();i++) {
|
||||
SelectItem si = row.getSelectItem(i);
|
||||
Object value = row.getValue(i);
|
||||
query.value(si.getColumn(), value);
|
||||
}
|
||||
query.execute();
|
||||
}
|
||||
public void run(UpdateCallback backendImpl) {
|
||||
RowInsertionBuilder query = backendImpl.insertInto(row.getTable());
|
||||
for (int i=0;i<row.size();i++) {
|
||||
SelectItem si = row.getSelectItem(i);
|
||||
Object value = row.getValue(i);
|
||||
query.value(si.getColumn(), value);
|
||||
}
|
||||
query.execute();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -70,18 +69,18 @@ abstract public class AbstractCrudDataContext implements CrudDataContext {
|
|||
boolean first = true;
|
||||
List<String> primaryKeyColumns = new ArrayList<String>(30);
|
||||
Collections.addAll(primaryKeyColumns, row.getPrimaryKeys());
|
||||
for (String column:primaryKeyColumns) {
|
||||
Object value = row.getValue(column);
|
||||
queryWhereBuilderUpdate(qWhere,column,value,first);
|
||||
first = false;
|
||||
}
|
||||
List<String> columns = new ArrayList<String>(30);
|
||||
for (String column:primaryKeyColumns) {
|
||||
Object value = row.getValue(column);
|
||||
queryWhereBuilderUpdate(qWhere,column,value,first);
|
||||
first = false;
|
||||
}
|
||||
List<String> columns = new ArrayList<String>(30);
|
||||
Collections.addAll(columns, row.getTable().getColumnNames());
|
||||
columns.removeAll(primaryKeyColumns);
|
||||
for (String column:columns) {
|
||||
Object value = row.getValue(column);
|
||||
((RowUpdationBuilder)qWhere).value(column, value);
|
||||
}
|
||||
Object value = row.getValue(column);
|
||||
((RowUpdationBuilder)qWhere).value(column, value);
|
||||
}
|
||||
if (first==false) {
|
||||
((RowUpdationBuilder)qWhere).execute();
|
||||
} else {
|
||||
|
|
@ -92,18 +91,18 @@ abstract public class AbstractCrudDataContext implements CrudDataContext {
|
|||
|
||||
Object qWhere = dataContext.query().from(row.getTable()).select(row.getTable().getColumns());
|
||||
boolean first = true;
|
||||
for (String column:row.getPrimaryKeys()) {
|
||||
Object value = row.getValue(column);
|
||||
queryWhereBuilder(qWhere,column,value,first);
|
||||
first = false;
|
||||
}
|
||||
Query mergeSelectQuery = ((SatisfiedQueryBuilder<?>)qWhere).toQuery();
|
||||
DataSet ds = dataContext.executeQuery(mergeSelectQuery);
|
||||
if (ds.next()==false) {
|
||||
ds.close();
|
||||
throw new IllegalStateException("Could not fetch row after merging.");
|
||||
}
|
||||
UpdateableRow rowResult = wrapOrCreateToUpdateableRow(ds.getRow(),row.getTable());
|
||||
for (String column:row.getPrimaryKeys()) {
|
||||
Object value = row.getValue(column);
|
||||
queryWhereBuilder(qWhere,column,value,first);
|
||||
first = false;
|
||||
}
|
||||
Query mergeSelectQuery = ((SatisfiedQueryBuilder<?>)qWhere).toQuery();
|
||||
DataSet ds = dataContext.executeQuery(mergeSelectQuery);
|
||||
if (ds.next()==false) {
|
||||
ds.close();
|
||||
throw new IllegalStateException("Could not fetch row after merging.");
|
||||
}
|
||||
UpdateableRow rowResult = wrapOrCreateToUpdateableRow(ds.getRow(),row.getTable());
|
||||
ds.close();
|
||||
return rowResult;
|
||||
}
|
||||
|
|
@ -111,131 +110,71 @@ abstract public class AbstractCrudDataContext implements CrudDataContext {
|
|||
public void delete(final UpdateableRow row) {
|
||||
UpdateableDataContext dataContext = abstractProviderUpdateableDataContext();
|
||||
dataContext.executeUpdate(new UpdateScript() {
|
||||
public void run(UpdateCallback backendImpl) {
|
||||
Object qWhere = backendImpl.deleteFrom(row.getTable());
|
||||
boolean first = true;
|
||||
for (String column:row.getPrimaryKeys()) {
|
||||
Object value = row.getValue(column);
|
||||
queryWhereBuilderDelete(qWhere,column,value,first);
|
||||
first = false;
|
||||
}
|
||||
if (first==false) {
|
||||
((RowDeletionBuilder)qWhere).execute();
|
||||
} else {
|
||||
///logger.warning no where clause
|
||||
}
|
||||
}
|
||||
public void run(UpdateCallback backendImpl) {
|
||||
Object qWhere = backendImpl.deleteFrom(row.getTable());
|
||||
boolean first = true;
|
||||
for (String column:row.getPrimaryKeys()) {
|
||||
Object value = row.getValue(column);
|
||||
queryWhereBuilderDelete(qWhere,column,value,first);
|
||||
first = false;
|
||||
}
|
||||
if (first==false) {
|
||||
((RowDeletionBuilder)qWhere).execute();
|
||||
} else {
|
||||
///logger.warning no where clause
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// TODO: redo these queryWhereBuilder methods to cleaner code
|
||||
|
||||
protected Object queryWhereBuilder(Object qWhere,String key,Object value,boolean first) {
|
||||
if (value instanceof Number) {
|
||||
if (first) {
|
||||
qWhere = ((SatisfiedQueryBuilder<?>)qWhere).where(key).equals((Number)value);
|
||||
} else {
|
||||
qWhere = ((SatisfiedWhereBuilder<?>)qWhere).and(key).equals((Number)value);
|
||||
}
|
||||
} else if (value instanceof Date) {
|
||||
if (value==null) {
|
||||
if (first) {
|
||||
qWhere = ((SatisfiedQueryBuilder<?>)qWhere).where(key).equals((Date)value);
|
||||
qWhere = ((SatisfiedQueryBuilder<?>)qWhere).where(key).isNull();
|
||||
} else {
|
||||
qWhere = ((SatisfiedWhereBuilder<?>)qWhere).and(key).equals((Date)value);
|
||||
}
|
||||
} else if (value instanceof Boolean) {
|
||||
if (first) {
|
||||
qWhere = ((SatisfiedQueryBuilder<?>)qWhere).where(key).equals((Boolean)value);
|
||||
} else {
|
||||
qWhere = ((SatisfiedWhereBuilder<?>)qWhere).and(key).equals((Boolean)value);
|
||||
qWhere = ((SatisfiedWhereBuilder<?>)qWhere).and(key).isNull();
|
||||
}
|
||||
} else {
|
||||
if (value==null) {
|
||||
if (first) {
|
||||
qWhere = ((SatisfiedQueryBuilder<?>)qWhere).where(key).isNull();
|
||||
} else {
|
||||
qWhere = ((SatisfiedWhereBuilder<?>)qWhere).and(key).isNull();
|
||||
}
|
||||
if (first) {
|
||||
qWhere = ((SatisfiedQueryBuilder<?>)qWhere).where(key).isEquals(value);
|
||||
} else {
|
||||
if (first) {
|
||||
qWhere = ((SatisfiedQueryBuilder<?>)qWhere).where(key).equals(value.toString());
|
||||
} else {
|
||||
qWhere = ((SatisfiedWhereBuilder<?>)qWhere).and(key).equals(value.toString());
|
||||
}
|
||||
qWhere = ((SatisfiedWhereBuilder<?>)qWhere).and(key).isEquals(value);
|
||||
}
|
||||
}
|
||||
return qWhere;
|
||||
}
|
||||
|
||||
protected Object queryWhereBuilderUpdate(Object qWhere,String key,Object value,boolean first) {
|
||||
if (value instanceof Number) {
|
||||
if (first) {
|
||||
qWhere = ((RowUpdationBuilder)qWhere).where(key).equals((Number)value);
|
||||
} else {
|
||||
qWhere = ((RowUpdationBuilder)qWhere).where(key).equals((Number)value);
|
||||
}
|
||||
} else if (value instanceof Date) {
|
||||
if (value==null) {
|
||||
if (first) {
|
||||
qWhere = ((RowUpdationBuilder)qWhere).where(key).equals((Date)value);
|
||||
qWhere = ((RowUpdationBuilder)qWhere).where(key).isNull();
|
||||
} else {
|
||||
qWhere = ((RowUpdationBuilder)qWhere).where(key).equals((Date)value);
|
||||
}
|
||||
} else if (value instanceof Boolean) {
|
||||
if (first) {
|
||||
qWhere = ((RowUpdationBuilder)qWhere).where(key).equals((Boolean)value);
|
||||
} else {
|
||||
qWhere = ((RowUpdationBuilder)qWhere).where(key).equals((Boolean)value);
|
||||
qWhere = ((RowUpdationBuilder)qWhere).where(key).isNull();
|
||||
}
|
||||
} else {
|
||||
if (value==null) {
|
||||
if (first) {
|
||||
qWhere = ((RowUpdationBuilder)qWhere).where(key).isNull();
|
||||
} else {
|
||||
qWhere = ((RowUpdationBuilder)qWhere).where(key).isNull();
|
||||
}
|
||||
if (first) {
|
||||
qWhere = ((RowUpdationBuilder)qWhere).where(key).isEquals(value);
|
||||
} else {
|
||||
if (first) {
|
||||
qWhere = ((RowUpdationBuilder)qWhere).where(key).equals(value.toString());
|
||||
} else {
|
||||
qWhere = ((RowUpdationBuilder)qWhere).where(key).equals(value.toString());
|
||||
}
|
||||
qWhere = ((RowUpdationBuilder)qWhere).where(key).isEquals(value);
|
||||
}
|
||||
}
|
||||
return qWhere;
|
||||
}
|
||||
|
||||
protected Object queryWhereBuilderDelete(Object qWhere,String key,Object value,boolean first) {
|
||||
if (value instanceof Number) {
|
||||
if (first) {
|
||||
qWhere = ((RowDeletionBuilder)qWhere).where(key).equals((Number)value);
|
||||
} else {
|
||||
qWhere = ((RowDeletionBuilder)qWhere).where(key).equals((Number)value);
|
||||
}
|
||||
} else if (value instanceof Date) {
|
||||
if (value==null) {
|
||||
if (first) {
|
||||
qWhere = ((RowDeletionBuilder)qWhere).where(key).equals((Date)value);
|
||||
qWhere = ((RowDeletionBuilder)qWhere).where(key).isNull();
|
||||
} else {
|
||||
qWhere = ((RowDeletionBuilder)qWhere).where(key).equals((Date)value);
|
||||
}
|
||||
} else if (value instanceof Boolean) {
|
||||
if (first) {
|
||||
qWhere = ((RowDeletionBuilder)qWhere).where(key).equals((Boolean)value);
|
||||
} else {
|
||||
qWhere = ((RowDeletionBuilder)qWhere).where(key).equals((Boolean)value);
|
||||
qWhere = ((RowDeletionBuilder)qWhere).where(key).isNull();
|
||||
}
|
||||
} else {
|
||||
if (value==null) {
|
||||
if (first) {
|
||||
qWhere = ((RowDeletionBuilder)qWhere).where(key).isNull();
|
||||
} else {
|
||||
qWhere = ((RowDeletionBuilder)qWhere).where(key).isNull();
|
||||
}
|
||||
if (first) {
|
||||
qWhere = ((RowDeletionBuilder)qWhere).where(key).isEquals(value);
|
||||
} else {
|
||||
if (first) {
|
||||
qWhere = ((RowDeletionBuilder)qWhere).where(key).equals(value.toString());
|
||||
} else {
|
||||
qWhere = ((RowDeletionBuilder)qWhere).where(key).equals(value.toString());
|
||||
}
|
||||
qWhere = ((RowDeletionBuilder)qWhere).where(key).isEquals(value);
|
||||
}
|
||||
}
|
||||
return qWhere;
|
||||
|
|
|
|||
|
|
@ -22,7 +22,8 @@ abstract public class AbstractUpdateableRow extends AbstractRow implements Updat
|
|||
}
|
||||
public int indexOf(String columnName) {
|
||||
if (columnName==null) {
|
||||
return UpdateableRow.INDEX_NOT_FOUND;
|
||||
throw new NullPointerException("Can't search for null column name.");
|
||||
//return UpdateableRow.INDEX_NOT_FOUND;
|
||||
}
|
||||
int index = 0;
|
||||
for (SelectItem si:getIndexedSelectItemList()) {
|
||||
|
|
@ -31,7 +32,8 @@ abstract public class AbstractUpdateableRow extends AbstractRow implements Updat
|
|||
}
|
||||
index++;
|
||||
}
|
||||
return UpdateableRow.INDEX_NOT_FOUND;
|
||||
throw new IndexOutOfBoundsException("Can't find key of column: "+columnName);
|
||||
////return UpdateableRow.INDEX_NOT_FOUND;
|
||||
}
|
||||
|
||||
public void setValue(Row row) {
|
||||
|
|
@ -66,7 +68,7 @@ abstract public class AbstractUpdateableRow extends AbstractRow implements Updat
|
|||
|
||||
if (selectItem.getSubQuerySelectItem() != null) {
|
||||
value = getValue(selectItem.getSubQuerySelectItem());
|
||||
style = getStyle(selectItem.getSubQuerySelectItem());
|
||||
style = getStyle(selectItem.getSubQuerySelectItem());
|
||||
}
|
||||
if (value == null) {
|
||||
value = getValue(selectItem);
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ import org.eobjects.metamodel.UpdateScript;
|
|||
import org.eobjects.metamodel.UpdateableDataContext;
|
||||
import org.eobjects.metamodel.data.DataSet;
|
||||
import org.eobjects.metamodel.data.Row;
|
||||
import org.eobjects.metamodel.query.CompiledQuery;
|
||||
import org.eobjects.metamodel.query.Query;
|
||||
import org.eobjects.metamodel.query.builder.InitFromBuilder;
|
||||
import org.eobjects.metamodel.query.builder.InitFromBuilderImpl;
|
||||
|
|
@ -81,7 +82,7 @@ public class CrudDataContextImpl extends AbstractCrudDataContext implements Abst
|
|||
if (row==null) {
|
||||
result.addSelectItems(table.getColumns()); // create new when row is null
|
||||
} else {
|
||||
result.addSelectItems(row.getSelectItems());
|
||||
result.addSelectItems(row.getSelectItems());
|
||||
result.setValue(row); // copy all values to impl
|
||||
}
|
||||
return result;
|
||||
|
|
@ -205,4 +206,12 @@ public class CrudDataContextImpl extends AbstractCrudDataContext implements Abst
|
|||
public DataSet executeQuery(String queryString) throws MetaModelException {
|
||||
return dataContextDelegate.executeQuery(queryString);
|
||||
}
|
||||
|
||||
public CompiledQuery compileQuery(Query q) throws MetaModelException {
|
||||
return dataContextDelegate.compileQuery(q);
|
||||
}
|
||||
|
||||
public DataSet executeQuery(CompiledQuery cq, Object... args) {
|
||||
return dataContextDelegate.executeQuery(cq, args);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import java.util.HashMap;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.eobjects.metamodel.data.DataSetHeader;
|
||||
import org.eobjects.metamodel.data.Row;
|
||||
import org.eobjects.metamodel.query.SelectItem;
|
||||
import org.eobjects.metamodel.schema.Table;
|
||||
|
|
@ -47,6 +48,9 @@ public class UpdateableRowMapImpl extends AbstractUpdateableRow {
|
|||
}
|
||||
|
||||
public void setValue(int index, Object value) throws IndexOutOfBoundsException {
|
||||
if (index == UpdateableRow.INDEX_NOT_FOUND) {
|
||||
throw new IndexOutOfBoundsException("Can't save value without key index: "+UpdateableRow.INDEX_NOT_FOUND+" value:"+value);
|
||||
}
|
||||
dataMap.put(index, value);
|
||||
}
|
||||
|
||||
|
|
@ -57,4 +61,8 @@ public class UpdateableRowMapImpl extends AbstractUpdateableRow {
|
|||
public Row getSubSelection(SelectItem[] selectItems) {
|
||||
return getSubSelectionFromImpl(new UpdateableRowMapImpl(table,primaryKeys,selectItems),selectItems);
|
||||
}
|
||||
|
||||
public Row getSubSelection(DataSetHeader header) {
|
||||
return getSubSelection(header.getSelectItems());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package net.forwardfire.vasc.backend.metamodel.jndi;
|
|||
import org.eobjects.metamodel.DataContext;
|
||||
import org.eobjects.metamodel.MetaModelException;
|
||||
import org.eobjects.metamodel.data.DataSet;
|
||||
import org.eobjects.metamodel.query.CompiledQuery;
|
||||
import org.eobjects.metamodel.query.Query;
|
||||
import org.eobjects.metamodel.query.builder.InitFromBuilder;
|
||||
import org.eobjects.metamodel.schema.Column;
|
||||
|
|
@ -53,4 +54,12 @@ public class JndiReadOnlyDataContext /* extends DataContextProxy */ implements D
|
|||
public DataSet executeQuery(String queryString) throws MetaModelException {
|
||||
return proxyDataContext.executeQuery(queryString);
|
||||
}
|
||||
@Override
|
||||
public CompiledQuery compileQuery(Query q) throws MetaModelException {
|
||||
return proxyDataContext.compileQuery(q);
|
||||
}
|
||||
@Override
|
||||
public DataSet executeQuery(CompiledQuery cq, Object... args) {
|
||||
return proxyDataContext.executeQuery(cq, args);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ import javax.naming.NamingException;
|
|||
|
||||
import org.eobjects.metamodel.DataContext;
|
||||
import org.eobjects.metamodel.mongodb.MongoDbDataContext;
|
||||
import org.eobjects.metamodel.mongodb.MongoDbDataContextBean;
|
||||
|
||||
import com.mongodb.DB;
|
||||
import com.mongodb.Mongo;
|
||||
|
|
@ -31,27 +30,38 @@ public class JndiMongodbDataContextLoader implements JndiDataContextLoader {
|
|||
}
|
||||
|
||||
public DataContext loadDataContext(JndiDataContextLoaderConfig config) {
|
||||
MongoDbDataContextBean result = null;
|
||||
//MongoDbDataContextBean result = null;
|
||||
DB mongoDb = null;
|
||||
if (useJndiResource) {
|
||||
config.checkBackendUrl();
|
||||
result = new MongoDbDataContextBean(getMongodbJdni(config.getJndiObjectName(),config.getBackendUrl()));
|
||||
//result = new MongoDbDataContextBean(,));
|
||||
mongoDb = getMongodbJdni(config.getJndiObjectName(),config.getBackendUrl());
|
||||
|
||||
} else {
|
||||
int mongoPort = 27017;
|
||||
if (config.getBackendPort()!=null && config.getBackendPort().isEmpty()==false) {
|
||||
mongoPort = new Integer(config.getBackendPort());
|
||||
}
|
||||
result = new MongoDbDataContextBean(getMongodbConnection(
|
||||
mongoDb = getMongodbConnection(
|
||||
config.getJndiObjectName(),
|
||||
config.getBackendHost(),
|
||||
mongoPort,
|
||||
config.getBackendDatabase(),
|
||||
config.getBackendUsername(),
|
||||
config.getBackendPassword()
|
||||
));
|
||||
);
|
||||
}
|
||||
result.setRegisterMBean(true); // TODO: make flag
|
||||
result.start();
|
||||
return result;
|
||||
//MongoDbDataContextSchemaDetector detector = new MongoDbDataContextSchemaDetector();
|
||||
//detector.setDataCheckSize(10);
|
||||
//detector.setSearchReference(true);
|
||||
//DataContext dataContext = detector.new MongoDbDataContextExtended(mongoDb,detector);
|
||||
|
||||
DataContext dataContext = new MongoDbDataContext(mongoDb);
|
||||
return dataContext;
|
||||
|
||||
//result.setRegisterMBean(true); // TODO: make flag
|
||||
//result.start();
|
||||
//return result;
|
||||
}
|
||||
|
||||
protected DB getMongodbJdni(String objectName,String jndiName) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue