r23 - trunk/echobase-services/src/main/java/fr/ifremer/echobase/services
Author: tchemit Date: 2011-11-08 15:07:37 +0100 (Tue, 08 Nov 2011) New Revision: 23 Url: http://forge.codelutin.com/repositories/revision/echobase/23 Log: begin of the dbEditorService Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/AbstractEchoBaseService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbEditorService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/EchoBaseServiceContext.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/EchoBaseServiceContextImpl.java Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/AbstractEchoBaseService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/AbstractEchoBaseService.java 2011-11-08 14:06:34 UTC (rev 22) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/AbstractEchoBaseService.java 2011-11-08 14:07:37 UTC (rev 23) @@ -23,8 +23,11 @@ */ package fr.ifremer.echobase.services; +import fr.ifremer.echobase.entities.meta.DbMeta; import org.nuiton.topia.TopiaContext; +import java.util.Locale; + /** * @author sletellier <letellier@codelutin.com> * @since 0.1 @@ -38,7 +41,15 @@ this.serviceContext = serviceContext; } - public TopiaContext getTransaction() { + protected TopiaContext getTransaction() { return serviceContext.getTransaction(); } + + protected Locale getLocale() { + return serviceContext.getLocale(); + } + + protected DbMeta getDbMeta() { + return serviceContext.getDbMeta(); + } } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbEditorService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbEditorService.java 2011-11-08 14:06:34 UTC (rev 22) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbEditorService.java 2011-11-08 14:07:37 UTC (rev 23) @@ -23,16 +23,21 @@ */ package fr.ifremer.echobase.services; -import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import fr.ifremer.echobase.EchoBaseTechnicalException; -import org.apache.commons.beanutils.ResultSetDynaClass; -import org.hibernate.mapping.Column; +import fr.ifremer.echobase.entities.EchoBaseDAOHelper; +import fr.ifremer.echobase.entities.EchoBaseEntityEnum; +import fr.ifremer.echobase.entities.meta.ColumnMeta; +import fr.ifremer.echobase.entities.meta.DbMeta; +import fr.ifremer.echobase.entities.meta.TableMeta; +import org.nuiton.topia.TopiaException; +import org.nuiton.topia.persistence.TopiaDAO; import org.nuiton.topia.persistence.TopiaEntity; +import org.nuiton.topia.persistence.util.EntityOperator; -import java.io.Serializable; -import java.sql.SQLException; -import java.util.Date; +import java.util.Iterator; import java.util.List; +import java.util.Map; /** * Service to edit the database. @@ -42,75 +47,46 @@ */ public class DbEditorService extends AbstractEchoBaseService { - protected static TableMeta newMeta(String name, Class<?> type) { - return new TableMeta(name, type); - } - - public List<TableMeta> getMetas(String tableName) { - List<TableMeta> result = Lists.newLinkedList(); + public TableMeta getTableMetas(String tableName) { + DbMeta dbMeta = getDbMeta(); + TableMeta result = dbMeta.getTable(tableName); return result; } - public ResultSetDynaClass getDatas(String tableName) { + //TODO Use an object to filter datas and do pagination + public Map[] getDatas(String tableName) { + DbMeta dbMeta = getDbMeta(); + TableMeta tableMeta = dbMeta.getTable(tableName); + EchoBaseEntityEnum entityEnum = tableMeta.getEntityEnum(); + Class<? extends TopiaEntity> contract = entityEnum.getContract(); try { - ResultSetDynaClass result = null; - result = new ResultSetDynaClass(null); + TopiaDAO dao = EchoBaseDAOHelper.getDAO(getTransaction(), contract); + List<?> all = dao.findAll(); + Map[] result = new Map[all.size()]; + Iterator<?> dataItr = all.iterator(); + int i = 0; + while (dataItr.hasNext()) { + TopiaEntity entity = (TopiaEntity) dataItr.next(); + Map<String, Object> row = loadRow(tableMeta, entity); + result[i++] = row; + } return result; - } catch (SQLException eee) { + } catch (TopiaException eee) { throw new EchoBaseTechnicalException("Could not obtain data", eee); } } - public static class TableMeta implements Serializable { - - private static final long serialVersionUID = 1L; - - protected String name; - - protected String label; - - protected Column hibernateColumn; - - protected Class<?> type; - - public TableMeta(String name, Class<?> type) { - this(name, name, type); + protected Map<String, Object> loadRow(TableMeta tableMeta, TopiaEntity entity) { + Map<String, Object> row = Maps.newLinkedHashMap(); + EntityOperator<TopiaEntity> operator = + (EntityOperator<TopiaEntity>) tableMeta.getOperator(); + for (ColumnMeta columnMeta : tableMeta) { + String propertyName = columnMeta.getName(); + Object property = + operator.get(propertyName, entity); + row.put(propertyName, property); } - - public TableMeta(String name, String label, Class<?> type) { - this.name = name; - this.label = label; - this.type = type; - } - - public String getName() { - return name; - } - - public String getLabel() { - return label; - } - - public Class<?> getType() { - return type; - } - - public String getColumnType() { - String result = "string"; - if (boolean.class.equals(type)) { - result = "boolean"; - } else if (Date.class.equals(type)) { - result = "date"; - } - return result; - } - - public boolean isFK() { - return TopiaEntity.class.isAssignableFrom(type); - } - - public Column getHibernateColumn() { - return hibernateColumn; - } + return row; } + } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/EchoBaseServiceContext.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/EchoBaseServiceContext.java 2011-11-08 14:06:34 UTC (rev 22) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/EchoBaseServiceContext.java 2011-11-08 14:07:37 UTC (rev 23) @@ -25,8 +25,11 @@ package fr.ifremer.echobase.services; import fr.ifremer.echobase.EchoBaseConfiguration; +import fr.ifremer.echobase.entities.meta.DbMeta; import org.nuiton.topia.TopiaContext; +import java.util.Locale; + /** * This contract represents objects you must provide when asking for a service. * Objects provided may be injected in services returned by @@ -39,8 +42,12 @@ TopiaContext getTransaction(); - <E extends EchoBaseService> E newService(Class<E> clazz); + Locale getLocale(); EchoBaseConfiguration getConfiguration(); + DbMeta getDbMeta(); + + <E extends EchoBaseService> E newService(Class<E> clazz); + } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/EchoBaseServiceContextImpl.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/EchoBaseServiceContextImpl.java 2011-11-08 14:06:34 UTC (rev 22) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/EchoBaseServiceContextImpl.java 2011-11-08 14:07:37 UTC (rev 23) @@ -25,13 +25,17 @@ import com.google.common.base.Preconditions; import fr.ifremer.echobase.EchoBaseConfiguration; +import fr.ifremer.echobase.entities.meta.DbMeta; import org.nuiton.topia.TopiaContext; -/** Instances of this class will be given to service factory. +import java.util.Locale; + +/** + * Instances of this class will be given to service factory. * * @author tchemit <chemit@codelutin.com> * @since 0.1 - **/ + */ public class EchoBaseServiceContextImpl implements EchoBaseServiceContext { protected TopiaContext transaction; @@ -40,11 +44,19 @@ protected EchoBaseConfiguration configuration; - public EchoBaseServiceContextImpl(TopiaContext transaction, + protected Locale locale; + + protected DbMeta dbMeta; + + public EchoBaseServiceContextImpl(Locale locale, + TopiaContext transaction, EchoBaseConfiguration configuration, + DbMeta dbMeta, EchoBaseServiceFactory serviceFactory) { + this.locale = locale; this.transaction = transaction; this.configuration = configuration; + this.dbMeta = dbMeta; this.serviceFactory = serviceFactory; } @@ -55,6 +67,11 @@ } @Override + public Locale getLocale() { + return locale; + } + + @Override public <E extends EchoBaseService> E newService(Class<E> clazz) { return serviceFactory.newService(clazz, this); } @@ -64,6 +81,11 @@ return configuration; } + @Override + public DbMeta getDbMeta() { + return dbMeta; + } + protected EchoBaseServiceFactory getServiceFactory() { return serviceFactory; }
participants (1)
-
tchemit@users.forge.codelutin.com