branch feature/7017 updated (02aea27 -> d34cd1e)
This is an automated email from the git hooks/post-receive script. New change to branch feature/7017 in repository observe. See http://git.codelutin.com/observe.git from 02aea27 refactor delete action for seine and longline new d34cd1e refactor save action for table entities The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit d34cd1e100663ba6efcfc29ed2c6d3eca7ae3ecf Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Tue Apr 28 17:34:37 2015 +0200 refactor save action for table entities Summary of changes: .../observe/services/AbstractObserveService.java | 74 ++++++++- .../ird/observe/services/data/TripServiceImpl.java | 4 +- .../services/data/seine/TargetSampleService.java | 12 +- .../data/seine/TargetSampleServiceImpl.java | 176 +++++++++++++++++++-- .../table/impl/seine/TargetSampleUIHandler.java | 99 ++---------- 5 files changed, 270 insertions(+), 95 deletions(-) -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7017 in repository observe. See http://git.codelutin.com/observe.git commit d34cd1e100663ba6efcfc29ed2c6d3eca7ae3ecf Author: Sylvain Bavencoff <bavencoff@codelutin.com> Date: Tue Apr 28 17:34:37 2015 +0200 refactor save action for table entities --- .../observe/services/AbstractObserveService.java | 74 ++++++++- .../ird/observe/services/data/TripServiceImpl.java | 4 +- .../services/data/seine/TargetSampleService.java | 12 +- .../data/seine/TargetSampleServiceImpl.java | 176 +++++++++++++++++++-- .../table/impl/seine/TargetSampleUIHandler.java | 99 ++---------- 5 files changed, 270 insertions(+), 95 deletions(-) diff --git a/observe-services/src/main/java/fr/ird/observe/services/AbstractObserveService.java b/observe-services/src/main/java/fr/ird/observe/services/AbstractObserveService.java index 0e6e506..807403a 100644 --- a/observe-services/src/main/java/fr/ird/observe/services/AbstractObserveService.java +++ b/observe-services/src/main/java/fr/ird/observe/services/AbstractObserveService.java @@ -14,6 +14,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.decorator.Decorator; import org.nuiton.topia.TopiaContext; +import org.nuiton.topia.TopiaException; import org.nuiton.topia.persistence.TopiaDAO; import org.nuiton.topia.persistence.TopiaEntity; import org.nuiton.topia.persistence.util.TopiaEntityBinder; @@ -272,7 +273,6 @@ public abstract class AbstractObserveService implements ObserveService { public abstract E onUpdate(P parentBean, E toSave, E beanToSave); } - public <P extends TopiaEntity, E extends TopiaEntity> void doDelete(String parentId, String idToDelete, DeleteAction<P, E> deleteAction) { P parent = null; @@ -315,6 +315,78 @@ public abstract class AbstractObserveService implements ObserveService { } + public <P extends TopiaEntity, E extends TopiaEntity> void doSaveList(P parentToSave, Collection<E> childrentoSave, SaveCollectionAction<P, E> saveCollectionAction ) { + + saveCollectionAction.prepareSave(parentToSave, childrentoSave); + + P parentSaved = getDao(saveCollectionAction.parentClass).findByTopiaId(parentToSave.getTopiaId()); + + List<E> oldChilds = new ArrayList<E>(saveCollectionAction.getChildren(parentSaved)); + + saveCollectionAction.clearChildren(parentSaved); + + TopiaDAO<E> dao = getDao(saveCollectionAction.entityClass); + + for (E childToSave : childrentoSave) { + + E childSaved; + + if (childToSave.getTopiaId() == null) { + + // creation du fils + childSaved = saveCollectionAction.onCreateChild(childToSave); + + } else { + + // mise a jour du fils + childSaved = dao.findByTopiaId(childToSave.getTopiaId()); + + childSaved = saveCollectionAction.onUpdateChild(childToSave, childSaved); + } + + saveCollectionAction.addChild(parentSaved, childSaved); + } + + // on donne la main aux implantations pour faire des traitements + // supplémentaires + saveCollectionAction.onUpdateFinalize(parentToSave, oldChilds); + + + } + + + protected abstract class SaveCollectionAction<P extends TopiaEntity, E extends TopiaEntity> { + + protected final Class<P> parentClass; + + protected final Class<E> entityClass; + + public SaveCollectionAction(Class<P> parentClass, Class<E> entityClass) { + this.parentClass = parentClass; + this.entityClass = entityClass; + } + + public void prepareSave(P parent, Collection<E> tosaves) { + // par defaut, rien de specifique a faire avant de faire la sauvegarde + } + + public void onUpdateFinalize(P parent, Collection<E> oldChilds) throws TopiaException { + // par défaut, rien à faire + } + + + public abstract Collection<E> getChildren(P parent); + + public abstract void clearChildren(P parent); + + public abstract E onCreateChild(E childToSave); + + public abstract E onUpdateChild(E childToSave, E childSaved); + + public abstract void addChild(P parent, E child); + + } + public <E extends TopiaEntity> void checkNotNullAndNoneExistingEntity(String variableName, E entity) { TopiaEntityHelper.checkNotNullAndNoneExistingEntity(variableName, entity); diff --git a/observe-services/src/main/java/fr/ird/observe/services/data/TripServiceImpl.java b/observe-services/src/main/java/fr/ird/observe/services/data/TripServiceImpl.java index 4a7e2c9..96a740b 100644 --- a/observe-services/src/main/java/fr/ird/observe/services/data/TripServiceImpl.java +++ b/observe-services/src/main/java/fr/ird/observe/services/data/TripServiceImpl.java @@ -55,7 +55,7 @@ public class TripServiceImpl extends AbstractObserveService implements TripServi Trip trip; - if (tripId.startsWith(TripSeine.class.getSimpleName())) { + if (tripId.startsWith(TripSeine.class.getName())) { trip = findByTopiaId(TripSeine.class, tripId); } else { trip = findByTopiaId(TripLongline.class, tripId); @@ -70,7 +70,7 @@ public class TripServiceImpl extends AbstractObserveService implements TripServi Trip trip; - if (tripId.startsWith(TripSeine.class.getSimpleName())) { + if (tripId.startsWith(TripSeine.class.getName())) { trip = findByTopiaId(TripSeine.class, tripId); } else { trip = findByTopiaId(TripLongline.class, tripId); diff --git a/observe-services/src/main/java/fr/ird/observe/services/data/seine/TargetSampleService.java b/observe-services/src/main/java/fr/ird/observe/services/data/seine/TargetSampleService.java index 84fb0e4..82fe30f 100644 --- a/observe-services/src/main/java/fr/ird/observe/services/data/seine/TargetSampleService.java +++ b/observe-services/src/main/java/fr/ird/observe/services/data/seine/TargetSampleService.java @@ -2,7 +2,10 @@ package fr.ird.observe.services.data.seine; import fr.ird.observe.entities.referentiel.Species; import fr.ird.observe.entities.seine.TargetLength; +import fr.ird.observe.entities.seine.TargetSample; +import fr.ird.observe.services.Commit; import fr.ird.observe.services.ObserveService; +import org.nuiton.topia.persistence.util.TopiaEntityBinder; import java.util.Collection; import java.util.List; @@ -17,7 +20,7 @@ public interface TargetSampleService extends ObserveService { List<Species> getAvailableEspeceForTargetSample(String setSeineId, boolean discarded); - String getTargetSampleId(String setSeineId, boolean discarded); + TargetSample getTargetSample(String setSeineId, boolean discarded); boolean canUseTargetSample(String setSeineId, boolean discarded); @@ -26,5 +29,12 @@ public interface TargetSampleService extends ObserveService { Collection<Species> speciessToDelete, List<TargetLength> tailleToDelete, boolean discarded); + @Commit + void delete(String setId, TargetSample bean); + String save(String setSeineId, TargetSample toSave, Collection<TargetLength> childrenToSave); + + TopiaEntityBinder<TargetLength> getChildBinderForEdit(); + + TopiaEntityBinder<TargetSample> getBinderForEdit(); } diff --git a/observe-services/src/main/java/fr/ird/observe/services/data/seine/TargetSampleServiceImpl.java b/observe-services/src/main/java/fr/ird/observe/services/data/seine/TargetSampleServiceImpl.java index b9d8aaa..4b8021c 100644 --- a/observe-services/src/main/java/fr/ird/observe/services/data/seine/TargetSampleServiceImpl.java +++ b/observe-services/src/main/java/fr/ird/observe/services/data/seine/TargetSampleServiceImpl.java @@ -1,13 +1,18 @@ package fr.ird.observe.services.data.seine; +import fr.ird.observe.BinderService; import fr.ird.observe.entities.referentiel.Species; import fr.ird.observe.entities.seine.SetSeine; import fr.ird.observe.entities.seine.TargetCatch; import fr.ird.observe.entities.seine.TargetLength; +import fr.ird.observe.entities.seine.TargetLengthDAO; import fr.ird.observe.entities.seine.TargetSample; +import fr.ird.observe.entities.seine.TargetSampleDAO; import fr.ird.observe.services.AbstractObserveService; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.nuiton.topia.persistence.util.TopiaEntityBinder; +import org.nuiton.util.beans.BinderModelBuilder; import java.util.ArrayList; import java.util.Collection; @@ -24,6 +29,14 @@ public class TargetSampleServiceImpl extends AbstractObserveService implements T /** Logger. */ private static final Log log = LogFactory.getLog(TargetSampleServiceImpl.class); + protected TargetSampleDAO getDao() { + return (TargetSampleDAO) getDao(TargetSample.class); + } + + protected TargetLengthDAO getChildDao() { + return (TargetLengthDAO) getDao(TargetLength.class); + } + @Override public List<Species> getAvailableEspeceForTargetSample(String setSeineId, boolean discarded) { @@ -68,11 +81,11 @@ public class TargetSampleServiceImpl extends AbstractObserveService implements T @Override - public String getTargetSampleId(String setSeineId, boolean discarded) { + public TargetSample getTargetSample(String setSeineId, boolean discarded) { SetSeine setSeine = findByTopiaId(SetSeine.class, setSeineId); - String targetSampleId = null; + TargetSample toLoad = null; if (!setSeine.isNonTargetSampleEmpty()) { @@ -81,19 +94,33 @@ public class TargetSampleServiceImpl extends AbstractObserveService implements T Boolean isDiscarded = targetSample.getDiscarded(); - if (discarded) { - if (isDiscarded != null && isDiscarded) { - targetSampleId = targetSample.getTopiaId(); - } - } else if (isDiscarded == null || !isDiscarded) { - targetSampleId = targetSample.getTopiaId(); + if (discarded == (isDiscarded != null && isDiscarded)) { + toLoad = targetSample; } } } - return targetSampleId; + TargetSample loaded = getDao().newInstance(); + + if (toLoad != null) { + + getBinderForEdit().copy(toLoad, loaded, TargetSample.PROPERTY_TARGET_LENGTH); + + for (TargetLength childToLoad : toLoad.getTargetLength()) { + + TargetLength childLoaded = getChildDao().newInstance(); + + getChildBinderForEdit().copy(childToLoad, childLoaded); + + loaded.addTargetLength(childLoaded); + + } + } + + + return loaded; } @@ -139,4 +166,135 @@ public class TargetSampleServiceImpl extends AbstractObserveService implements T } + @Override + public void delete(String setId, TargetSample bean) { + doDelete(setId, bean.getTopiaId(), new DeleteAction<SetSeine, TargetSample>(SetSeine.class, TargetSample.class) { + @Override + public void onDelete(SetSeine parent, TargetSample toDelete) { + super.onDelete(parent, toDelete); + parent.removeTargetSample(toDelete); + } + }); + + } + + @Override + public String save(String setSeineId, TargetSample toSave, Collection<TargetLength> childrenToSave) { + + String savedId = doSave(setSeineId, toSave, new SaveAction<SetSeine, TargetSample>(SetSeine.class, TargetSample.class) { + @Override + public TargetSample onCreate(SetSeine parent, TargetSample toCreate) { + + TargetSample created = getDao().create(); + getBinderForEdit().copyExcluding(toCreate, created, TargetSample.PROPERTY_TARGET_LENGTH); + parent.addTargetSample(created); + getDao().update(created); + return created; + } + + @Override + public TargetSample onUpdate(SetSeine parentBean, TargetSample toSave, TargetSample beanToSave) { + getBinderForEdit().copyExcluding(toSave, beanToSave, TargetSample.PROPERTY_TARGET_LENGTH); + getDao().update(beanToSave); + return beanToSave; + } + }); + + toSave.setTopiaId(savedId); + + doSaveList(toSave, childrenToSave, new SaveCollectionAction<TargetSample, TargetLength>(TargetSample.class, TargetLength.class) { + + @Override + public void prepareSave(TargetSample parent, Collection<TargetLength> tosaves) { + + for (TargetLength targetLength : tosaves) { + + // on attache a l'echantillon + targetLength.setTargetSample(parent); + } + + } + + @Override + public Collection<TargetLength> getChildren(TargetSample parent) { + return parent.getTargetLength(); + } + + @Override + public void clearChildren(TargetSample parent) { + parent.clearTargetLength(); + } + + @Override + public TargetLength onCreateChild(TargetLength childToSave) { + TargetLength childSaved = getChildDao().create(); + getChildBinderForEdit().copy(childToSave, childSaved); + getChildDao().update(childSaved); + return childSaved; + } + + @Override + public TargetLength onUpdateChild(TargetLength childToSave, TargetLength childSaved) { + getChildBinderForEdit().copy(childToSave, childSaved); + getChildDao().update(childSaved); + return childSaved; + } + + @Override + public void addChild(TargetSample parent, TargetLength child) { + parent.addTargetLength(child); + } + }); + + return savedId; + + } + + @Override + public TopiaEntityBinder<TargetLength> getChildBinderForEdit() { + TopiaEntityBinder<TargetLength> r = loadBinder("-forEdit", TargetLength.class, new CreateBinder<TargetLength>() { + + @Override + public BinderModelBuilder<TargetLength, TargetLength> createBinderBuilder(BinderService binderService, String name) { + + BinderModelBuilder<TargetLength, TargetLength> builder = binderService.newBinderBuilder( + TargetLength.class, + TargetLength.PROPERTY_TARGET_SAMPLE, + TargetLength.PROPERTY_SPECIES, + TargetLength.PROPERTY_LENGTH, + TargetLength.PROPERTY_LENGTH_SOURCE, + TargetLength.PROPERTY_WEIGHT, + TargetLength.PROPERTY_WEIGHT_SOURCE, + TargetLength.PROPERTY_COUNT, + TargetLength.PROPERTY_MEASURE_TYPE, + TargetLength.PROPERTY_ACQUISITION_MODE); + + return builder; + } + + }); + + return r; + } + + @Override + public TopiaEntityBinder<TargetSample> getBinderForEdit() { + TopiaEntityBinder<TargetSample> r = loadBinder("-forEdit", TargetSample.class, new CreateBinder<TargetSample>() { + + @Override + public BinderModelBuilder<TargetSample, TargetSample> createBinderBuilder(BinderService binderService, String name) { + + BinderModelBuilder<TargetSample, TargetSample> builder = binderService.newBinderBuilder( + TargetSample.class, + TargetSample.PROPERTY_TARGET_LENGTH, + TargetSample.PROPERTY_COMMENT); + + return builder; + } + + }); + + return r; + } + } diff --git a/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/TargetSampleUIHandler.java b/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/TargetSampleUIHandler.java index b1cbfb3..098aafe 100644 --- a/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/TargetSampleUIHandler.java +++ b/observe-swing/src/main/java/fr/ird/observe/ui/content/table/impl/seine/TargetSampleUIHandler.java @@ -22,7 +22,6 @@ package fr.ird.observe.ui.content.table.impl.seine; import fr.ird.observe.DataService; -import fr.ird.observe.ObserveDAOHelper; import fr.ird.observe.db.DataContext; import fr.ird.observe.db.DataSource; import fr.ird.observe.db.DataSourceException; @@ -39,8 +38,6 @@ import fr.ird.observe.ui.content.table.ContentTableUI; import fr.ird.observe.ui.content.table.ContentTableUIHandler; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.topia.TopiaContext; -import org.nuiton.topia.TopiaException; import org.nuiton.validator.NuitonValidatorScope; import javax.swing.JComponent; @@ -48,7 +45,6 @@ import javax.swing.JTable; import javax.swing.table.DefaultTableCellRenderer; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; -import java.util.ArrayList; import java.util.List; import static org.nuiton.i18n.I18n.n; @@ -129,7 +125,8 @@ public class TargetSampleUIHandler extends ContentTableUIHandler<TargetSample, T String setId = dataContext.getSelectedSetId(); // on doit récupérer l'unique échantillonThon de la calée - String id = getService(TargetSampleService.class).getTargetSampleId(setId, discarded); + TargetSample targetSample = getService(TargetSampleService.class).getTargetSample(setId, discarded); + String id = targetSample == null ? null : targetSample.getTopiaId(); return id; } @@ -141,37 +138,24 @@ public class TargetSampleUIHandler extends ContentTableUIHandler<TargetSample, T String setId = dataContext.getSelectedSetId(); + TargetSampleService service = getService(TargetSampleService.class); + if (mode == ContentMode.UPDATE) { // on ne charge les speciess uniquement si on est en mode édition - TargetSampleService service = getService(TargetSampleService.class); + List<Species> speciesList = service.getAvailableEspeceForTargetSample(setId, discarded); getUi().getSpecies().setData(speciesList); } - // on doit récupérer l'unique échantillonThon de la calée - String id = getEditBeanIdToLoad(dataContext, dataService, dataSource); + TargetSample beanToLoad = getService(TargetSampleService.class).getTargetSample(setId, discarded); TargetSample editBean = getBean(); - if (log.isInfoEnabled()) { - log.info(prefix + " - set id : " + setId); - log.info(prefix + " - echantillon thon id : " + id); - log.info(prefix + " - edit bean id : " + editBean.getTopiaId()); - } - - if (id == null) { + service.getBinderForEdit().copy(beanToLoad, editBean); - // l'échantillon n'existe pas encore, donc rien a faire - getLoadBinder().load(null, editBean, true); - - getModel().getChildsUpdator().setChilds(editBean, new ArrayList<TargetLength>()); - } else { - - // preparation du bean d'édition - dataService.loadEditEntity(dataSource, id, getLoadExecutor()); - } + getModel().getChildsUpdator().setChilds(editBean, beanToLoad.getTargetLength()); getModel().setMode(mode); @@ -181,80 +165,31 @@ public class TargetSampleUIHandler extends ContentTableUIHandler<TargetSample, T return editBean; } - @Override - protected boolean prepareSave(TargetSample bean, List<TargetLength> objets) throws DataSourceException { - - boolean withLengths = !objets.isEmpty(); - - if (withLengths) { - - if (bean.getTopiaId() == null) { - - String setId = getDataContext().getSelectedSetId(); - - // l'échantillon n'existe pas encore, il faut le créer - - if (log.isDebugEnabled()) { - log.debug("Will create targetSample " + bean + " for " + setId); - } - - getDataService().create(getDataSource(), setId, bean, null, getCreateExecutor()); - - } - - for (TargetLength targetLength : objets) { - - // on attache a l'echantillon - targetLength.setTargetSample(bean); - } - - } - return true; - - } @Override protected void doPersist(TargetSample bean, DataService dataService, DataSource dataSource) throws DataSourceException { + TargetSampleService service = getService(TargetSampleService.class); + + String setId = getDataContext().getSelectedSetId(); + if (bean.getTopiaId() != null && bean.isTargetLengthEmpty()) { // remove orphan target sample - - String setId = getDataContext().getSelectedSetId(); if (log.isInfoEnabled()) { log.info("Remove obsolete targetSample " + bean.getTopiaId() + " from Set: " + setId); } - getDataService().delete(getDataSource(), setId, bean, getDeleteExecutor()); - - } else { - // normal persist - super.doPersist(bean, dataService, dataSource); + service.delete(setId, bean); - } + } else { - } + String savedId = service.save(setId, bean, bean.getTargetLength()); - @Override - protected TargetSample onCreate(TopiaContext tx, - Object parent, - TargetSample editBean) throws TopiaException { - SetSeine parentBean = (SetSeine) parent; - TargetSample beanToSave = - ObserveDAOHelper.getTargetSampleDAO(tx).create(); - beanToSave.setDiscarded(discarded); - editBean.setTopiaId(beanToSave.getTopiaId()); - editBean.setTopiaCreateDate(beanToSave.getTopiaCreateDate()); - editBean.setTopiaVersion(beanToSave.getTopiaVersion()); - parentBean.addTargetSample(beanToSave); - return beanToSave; - } + bean.setTopiaId(savedId); - @Override - protected void onDelete(TopiaContext tx, Object parent, TargetSample beanToDelete) throws TopiaException { - SetSeine parentBean = (SetSeine) parent; - parentBean.removeTargetSample(beanToDelete); + } } @Override -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@list.forge.codelutin.com>.
participants (1)
-
codelutin.com scm