Author: tchemit Date: 2011-11-09 08:31:29 +0100 (Wed, 09 Nov 2011) New Revision: 28 Url: http://forge.codelutin.com/repositories/revision/echobase/28 Log: contiue Dbeditor service + headers 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/SurveyService.java trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/models/ImportModel.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-09 07:29:52 UTC (rev 27) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/AbstractEchoBaseService.java 2011-11-09 07:31:29 UTC (rev 28) @@ -52,4 +52,6 @@ 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-09 07:29:52 UTC (rev 27) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/DbEditorService.java 2011-11-09 07:31:29 UTC (rev 28) @@ -27,15 +27,23 @@ import fr.ifremer.echobase.EchoBaseTechnicalException; import fr.ifremer.echobase.entities.EchoBaseDAOHelper; import fr.ifremer.echobase.entities.EchoBaseEntityEnum; +import fr.ifremer.echobase.entities.EchoBaseUser; +import fr.ifremer.echobase.entities.EntityModificationLog; +import fr.ifremer.echobase.entities.EntityModificationLogDAO; import fr.ifremer.echobase.entities.meta.ColumnMeta; import fr.ifremer.echobase.entities.meta.DbMeta; import fr.ifremer.echobase.entities.meta.TableMeta; +import org.apache.commons.beanutils.BeanUtils; +import org.apache.commons.lang.StringUtils; import org.nuiton.topia.TopiaException; +import org.nuiton.topia.framework.TopiaQuery; import org.nuiton.topia.persistence.TopiaDAO; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.util.EntityOperator; +import org.nuiton.util.beans.BeanMonitor; +import org.nuiton.util.beans.PropertyDiff; -import java.util.Iterator; +import java.util.Date; import java.util.List; import java.util.Map; @@ -47,6 +55,31 @@ */ public class DbEditorService extends AbstractEchoBaseService { + public static class ResultDatas { + + /** Total count. */ + int count; + + /** Loaded datas (for the given asked page). */ + Map[] rows; + + public int getCount() { + return count; + } + + public void setCount(int count) { + this.count = count; + } + + public Map[] getRows() { + return rows; + } + + public void setRows(Map[] rows) { + this.rows = rows; + } + } + public TableMeta getTableMetas(String tableName) { DbMeta dbMeta = getDbMeta(); TableMeta result = dbMeta.getTable(tableName); @@ -54,32 +87,124 @@ } //TODO Use an object to filter datas and do pagination - public Map[] getDatas(String tableName) { + public ResultDatas getDatas(String tableName, + int from, + int to, + String sidx, + Boolean ascendantOrder) { + DbMeta dbMeta = getDbMeta(); TableMeta tableMeta = dbMeta.getTable(tableName); EchoBaseEntityEnum entityEnum = tableMeta.getEntityEnum(); Class<? extends TopiaEntity> contract = entityEnum.getContract(); try { 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(); + ResultDatas result = new ResultDatas(); + TopiaQuery query = dao.createQuery("e"); + if (StringUtils.isNotEmpty(sidx)) { + if (ascendantOrder) { + query.addOrder(sidx); + } else { + query.addOrderDesc(sidx); + } + } + List<?> all = dao.findAllByQuery(query); + int count = all.size(); + if (count < to) { + to = count; + } + Map[] rows = new Map[to - from]; + + int j = 0; + for (int i = from; i < to; i++) { + TopiaEntity entity = (TopiaEntity) all.get(i); Map<String, Object> row = loadRow(tableMeta, entity); - result[i++] = row; + rows[j++] = row; } + + result.setCount(all.size()); + result.setRows(rows); return result; } catch (TopiaException eee) { throw new EchoBaseTechnicalException("Could not obtain data", eee); } } + public PropertyDiff[] saveEntity(TableMeta tableMeta, + String id, + Map<String, String> properties, + EchoBaseUser user) { + + Class<? extends TopiaEntity> entityType = tableMeta.getEntityType(); + String[] columnNames = tableMeta.getColumnNamesAsArray(); + BeanMonitor monitor = new BeanMonitor(columnNames); + + try { + TopiaDAO dao = EchoBaseDAOHelper.getDAO( + getTransaction(), + entityType); + + TopiaEntity entityToSave = dao.findByTopiaId(id); + monitor.setBean(entityToSave); + for (Map.Entry<String, String> entry : properties.entrySet()) { + String propertyName = entry.getKey(); + String propertyValue = entry.getValue(); + BeanUtils.setProperty(entityToSave, + propertyName, + propertyValue); + } + + PropertyDiff[] propertyDiffs = monitor.getPropertyDiffs(); + + int length = propertyDiffs.length; + + if (length > 0) { + + // something was modified on the entity + + EntityModificationLogDAO dao1 = + EchoBaseDAOHelper.getEntityModificationLogDAO( + getTransaction() + ); + + StringBuilder buffer; + if (length == 1) { + buffer = new StringBuilder("Une propriété a été modifiée :"); + } else { + buffer = new StringBuilder(length + " propriétés ont été modifiées :"); + } + for (int i = 0; i < length; i++) { + PropertyDiff diff = propertyDiffs[i]; + buffer.append(String.format("\n Propriété '%s', ancienne valeur : %s, nouvelle valeur : %s", + diff.getSourceProperty(), + diff.getSourceValue(), + diff.getTargetValue() + )); + } + dao1.create( + EntityModificationLog.PROPERTY_ENTITY_TYPE, entityType.getSimpleName(), + EntityModificationLog.PROPERTY_ENTITY_ID, id, + EntityModificationLog.PROPERTY_USER, user, + EntityModificationLog.PROPERTY_MODIFICATION_DATE, new Date(), + EntityModificationLog.PROPERTY_MODIFICATION_TEXT, buffer.toString() + ); + + getTransaction().commitTransaction(); + } + return propertyDiffs; + } catch (Exception eee) { + throw new EchoBaseTechnicalException("Could not update entity", eee); + } finally { + monitor.setBean(null); + } + + } + protected Map<String, Object> loadRow(TableMeta tableMeta, TopiaEntity entity) { Map<String, Object> row = Maps.newLinkedHashMap(); EntityOperator<TopiaEntity> operator = (EntityOperator<TopiaEntity>) tableMeta.getOperator(); + row.put("id", entity.getTopiaId()); for (ColumnMeta columnMeta : tableMeta) { String propertyName = columnMeta.getName(); Object property = @@ -88,5 +213,4 @@ } return row; } - } Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/SurveyService.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/SurveyService.java 2011-11-09 07:29:52 UTC (rev 27) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/SurveyService.java 2011-11-09 07:31:29 UTC (rev 28) @@ -1,3 +1,26 @@ +/* + * #%L + * EchoBase :: Services + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ package fr.ifremer.echobase.services; import fr.ifremer.echobase.EchoBaseTechnicalException; Property changes on: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/SurveyService.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/models/ImportModel.java =================================================================== --- trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/models/ImportModel.java 2011-11-09 07:29:52 UTC (rev 27) +++ trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/models/ImportModel.java 2011-11-09 07:31:29 UTC (rev 28) @@ -1,3 +1,26 @@ +/* + * #%L + * EchoBase :: Services + * + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2011 Ifremer, Codelutin + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * #L% + */ package fr.ifremer.echobase.services.models; import fr.ifremer.echobase.entities.Survey; Property changes on: trunk/echobase-services/src/main/java/fr/ifremer/echobase/services/models/ImportModel.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native