Author: fdesbois Date: 2010-01-12 16:38:23 +0000 (Tue, 12 Jan 2010) New Revision: 187 Added: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/SampleRowLogImpl.java trunk/suiviobsmer-ui/src/main/webapp/img/suppr-16px.png Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceSamplingImpl.java trunk/suiviobsmer-business/src/main/xmi/suiviobsmer.zargo trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/SampleRowForm.java trunk/suiviobsmer-ui/src/main/webapp/SampleRowForm.tml trunk/suiviobsmer-ui/src/main/webapp/css/common.css Log: - Resolve constraint on null SampleMonth inside a SampleRow period (month can be deleted in SampleRowForm) - Begin SampleRowLog (only for SampleMonth : create, update, delete) Added: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/SampleRowLogImpl.java =================================================================== --- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/SampleRowLogImpl.java (rev 0) +++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/SampleRowLogImpl.java 2010-01-12 16:38:23 UTC (rev 187) @@ -0,0 +1,37 @@ + +package fr.ifremer.suiviobsmer.entity; + +import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * SampleRowLogImpl + * + * Created: 12 janv. 2010 + * + * @author fdesbois + * @version $Revision$ + * + * Mise a jour: $Date$ + * par : $Author$ + */ +public class SampleRowLogImpl extends SampleRowLogAbstract implements SampleRowLog { + + //private static final Logger log = LoggerFactory.getLogger(SampleRowLogImpl.class); + + private static final long serialVersionUID = 1L; + + @Override + public void addChange(String text) { + String log = getLogText(); + if (!StringUtils.isEmpty(log)) { + log += "\n"; + } else { + log = ""; + } + log += text; + setLogText(log); + } + +} Property changes on: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/entity/SampleRowLogImpl.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL" Modified: trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceSamplingImpl.java =================================================================== --- trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceSamplingImpl.java 2010-01-12 14:57:02 UTC (rev 186) +++ trunk/suiviobsmer-business/src/main/java/fr/ifremer/suiviobsmer/impl/ServiceSamplingImpl.java 2010-01-12 16:38:23 UTC (rev 187) @@ -88,8 +88,28 @@ try { transaction = rootContext.beginTransaction(); + SampleRowLogDAO logDAO = SuiviObsmerModelDAOHelper.getSampleRowLogDAO(transaction); + SampleRowLog rowLog = logDAO.create(SampleRowLog.COMMENT, row.getComment()); + boolean newRow = SuiviObsmerContext.prepareTopiaId(SampleRow.class, row); + DateFormat dateFormat = new SimpleDateFormat("MM/yyyy"); + + SampleRow oldRow = null; + Map<String, SampleMonth> oldMonths = new HashMap<String, SampleMonth>(); + if (!newRow) { + // Prepare data for logging or deleting oldMonths + TopiaContext transaction2 = rootContext.beginTransaction(); + SampleRowDAO oldDAO = SuiviObsmerModelDAOHelper.getSampleRowDAO(transaction2); + oldRow = oldDAO.findByTopiaId(row.getTopiaId()); + oldRow.getCompany(); + oldRow.getProfession(); + for (SampleMonth month : oldRow.getSampleMonth()) { + oldMonths.put(month.getTopiaId(), month); + } + transaction2.closeContext(); + } + if (log.isDebugEnabled()) { log.debug("new sampleRow : " + newRow); log.debug("samplRow topiaId : " + row.getTopiaId()); @@ -106,21 +126,33 @@ professionDAO.update(row.getProfession()); } - // Save program : can't be create if row already exist - // TODO check program.topiaId exist for an update -// ProgramDAO programDAO = SuiviObsmerModelDAOHelper.getProgramDAO(transaction); -// boolean newProgram = SuiviObsmerContext.prepareTopiaId(Program.class, row.getProgram()); -// if (log.isDebugEnabled()) { -// log.debug("create or update program : " + row.getProgram()); -// } -// programDAO.update(row.getProgram()); + // Save sampleMonth + SampleMonthDAO monthDAO = SuiviObsmerModelDAOHelper.getSampleMonthDAO(transaction); - // Save sampleMonth : create or update - SampleMonthDAO monthDAO = SuiviObsmerModelDAOHelper.getSampleMonthDAO(transaction); + List<SampleMonth> newMonths = row.getSampleMonth(); + + for (SampleMonth oldMonth : oldMonths.values()) { + if (!newMonths.contains(oldMonth)) { + String date = dateFormat.format(oldMonth.getPeriodDate()); + // Delete old month : add to log + monthDAO.delete(oldMonth); + rowLog.addChange("Le mois " + date + " a été supprimé"); + } + } + for (SampleMonth month : row.getSampleMonth()) { - SuiviObsmerContext.prepareTopiaId(SampleMonth.class, month); - if (log.isDebugEnabled()) { - log.debug("create or update month : " + month); + boolean monthCreated = SuiviObsmerContext.prepareTopiaId(SampleMonth.class, month); + String date = dateFormat.format(month.getPeriodDate()); + if (monthCreated) { + // log create month + rowLog.addChange("Le mois " + date + " a été créé avec un nombre de marées de " + month.getExpectedTidesValue()); + } else { + SampleMonth oldMonth = oldMonths.get(month.getTopiaId()); + if (oldMonth.getExpectedTidesValue() != month.getExpectedTidesValue()) { + // log change month value + rowLog.addChange("Le nombre de marées du mois " + date + " est passé de " + + oldMonth.getExpectedTidesValue() + " à " + month.getExpectedTidesValue()); + } } monthDAO.update(month); } @@ -141,7 +173,6 @@ // Save sampleRow : create or update - // TODO check fishingZones must not have change for an update SampleRowDAO rowDAO = SuiviObsmerModelDAOHelper.getSampleRowDAO(transaction); if (log.isDebugEnabled()) { log.debug("update row : " + row); @@ -164,6 +195,7 @@ } if (log.isDebugEnabled()) { + log.debug("Change log : " + rowLog.getLogText()); log.debug("commit transaction !"); } transaction.commitTransaction(); Modified: trunk/suiviobsmer-business/src/main/xmi/suiviobsmer.zargo =================================================================== (Binary files differ) Modified: trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/SampleRowForm.java =================================================================== --- trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/SampleRowForm.java 2010-01-12 14:57:02 UTC (rev 186) +++ trunk/suiviobsmer-ui/src/main/java/fr/ifremer/suiviobsmer/ui/pages/SampleRowForm.java 2010-01-12 16:38:23 UTC (rev 187) @@ -121,6 +121,8 @@ void setupRender() throws SuiviObsmerException { sampleRow = null; getSampleRow(); + sampleMonths = null; + getSampleMonths(); professionId = null; sampleRowForm.clearErrors(); @@ -294,17 +296,21 @@ @Property private String programId; - @Property - private Date month; +// @Property +// private Date month; private PeriodDates period; +// @Persist +// private List<Date> months; + @Persist - private List<Date> months; - private List<SampleMonth> sampleMonths; @Property + private int monthIndex; + + @Property private SampleMonth sampleMonth; @InjectComponent @@ -316,7 +322,7 @@ @InjectComponent private Field program; - private boolean programChanged; + private boolean periodChanged; public SelectModel getProgramSelectModel() throws SuiviObsmerException { if (programSelectModel == null) { @@ -332,17 +338,17 @@ return programSelectModel; } - public List<Date> getMonths() throws SuiviObsmerException { - if (months == null) { - if (log.isDebugEnabled()) { - log.debug("Reset months list"); - } - months = getPeriod().getMonths(); - sampleMonths = null; - getSampleMonths(); - } - return months; - } +// public List<Date> getMonths() throws SuiviObsmerException { +// if (months == null) { +// if (log.isDebugEnabled()) { +// log.debug("Reset months list"); +// } +// months = getPeriod().getMonths(); +// sampleMonths = null; +// getSampleMonths(); +// } +// return months; +// } // public Program getProgram() throws SuiviObsmerException { // return getSampleRow().getProgram(); @@ -360,12 +366,17 @@ public List<SampleMonth> getSampleMonths() throws SuiviObsmerException { if (sampleMonths == null) { sampleMonths = new ArrayList<SampleMonth>(); - for (Date currMonth : getMonths()) { + for (Date currMonth : getPeriod().getMonths()) { SampleMonth curr = getSampleRow().getSampleMonth(currMonth); - if (curr == null) { - curr = serviceSampling.getNewSampleMonth(currMonth, getSampleRow()); + if (curr != null) { + sampleMonths.add(curr); + // If an other period is set + } else if (periodChanged) { + if (curr != null) { + curr = serviceSampling.getNewSampleMonth(currMonth, getSampleRow()); + } + sampleMonths.add(curr); } - sampleMonths.add(curr); } } return sampleMonths; @@ -382,18 +393,15 @@ */ @Log void onSelectedFromSearchProgram() throws SuiviObsmerException { - //Program sampleRowProgram = new ProgramImpl(); if (!StringUtils.isEmpty(programId)) { - //sampleRowProgram = getProgramSelectModel().findObject(programId); programName = null; - period = null; - months = null; +// period = null; +// months = null; getSampleRow().setProgramName(programId); - //validateProgram(); // No period in this case ?!? } - programChanged = true; + edited = true; } /** @@ -404,20 +412,20 @@ */ @Log void onSelectedFromRefreshMonths() throws SuiviObsmerException { - //Program sampleRowProgram = null; - if (!StringUtils.isEmpty(programName)) { - // New program - //sampleRowProgram = new ProgramImpl(); - //sampleRowProgram.setName(programName); - getSampleRow().setProgramName(programName); - programId = null; - } - - months = null; getSampleRow().setPeriod(period); - programChanged = true; + periodChanged = true; + // Reset sampleMonths for new period + sampleMonths = null; + getSampleMonths(); } + + @Log + void onSelectedFromDeleteMonth(int index) throws SuiviObsmerException { + getSampleMonths().remove(index); + edited = true; + } + /*************************** SAMPLE ROW ***********************************/ private String sampleRowId; @@ -493,7 +501,7 @@ void onValidateFormFromSampleRowForm() throws SuiviObsmerException { sampleRowForm.clearErrors(); try { - // Only for save or programChanged (refreshMonths or searchProgram) + // Only for save or periodChanged (refreshMonth) if (!cancel && !edited) { if (StringUtils.isEmpty(getSampleRow().getProgramName())) { sampleRowForm.recordError(program, @@ -530,8 +538,8 @@ } } - // Save profession, fishingZone and boats (from immatriculations) if no programChanged - if (!programChanged) { + // Validate profession, fishingZone and boats (from immatriculations) if no programChanged + if (!periodChanged) { Profession profession = getSampleRow().getProfession(); if (StringUtils.isEmpty(profession.getCodeDCF5())) { @@ -567,7 +575,12 @@ if (cancel) { return this; } - if (!edited && !programChanged) { + if (!edited && !periodChanged) { + // Save programName + if (!StringUtils.isEmpty(programName)) { + getSampleRow().setProgramName(programName); + programId = null; + } // Save company Company company = getCompanySelectModel().findObject(companyId); Modified: trunk/suiviobsmer-ui/src/main/webapp/SampleRowForm.tml =================================================================== --- trunk/suiviobsmer-ui/src/main/webapp/SampleRowForm.tml 2010-01-12 14:57:02 UTC (rev 186) +++ trunk/suiviobsmer-ui/src/main/webapp/SampleRowForm.tml 2010-01-12 16:38:23 UTC (rev 187) @@ -104,9 +104,14 @@ <div id="so-samplerow-form-months" class="acenter"> <table> <tr class="firstRow"> - <td t:type="loop" t:source="months" t:value="month" volatile="true"> + <td t:type="loop" class="acenter" volatile="true" t:source="sampleMonths" t:value="sampleMonth" t:index="monthIndex"> + <t:output value="sampleMonth.periodDate" format="dateFormat" /> + <input t:type="submitContext" class="ico16px suppr" t:id="deleteMonth" value="Delete" t:context="monthIndex" + title="Supprimer ce mois"/> + </td> +<!-- <td t:type="loop" t:source="months" t:value="month" volatile="true"> <t:output value="month" format="dateFormat" /> - </td> + </td>--> </tr> <tr> <td t:type="loop" class="acenter" volatile="true" t:source="sampleMonths" t:value="sampleMonth"> Modified: trunk/suiviobsmer-ui/src/main/webapp/css/common.css =================================================================== --- trunk/suiviobsmer-ui/src/main/webapp/css/common.css 2010-01-12 14:57:02 UTC (rev 186) +++ trunk/suiviobsmer-ui/src/main/webapp/css/common.css 2010-01-12 16:38:23 UTC (rev 187) @@ -113,6 +113,15 @@ vertical-align: top; } +input.ico16px { + border: 0 none; + font-size: 0; + width: 16px; + height: 16px; + cursor: pointer; + vertical-align: top; +} + input.save { background: url(../img/save.png) no-repeat center center; } @@ -125,6 +134,10 @@ background: url(../img/add-32px.png) no-repeat center center; } +input.suppr { + background: url(../img/suppr-16px.png) no-repeat center center; +} + input.search-32px { background: url(../img/search-32px.png) no-repeat center center; } Added: trunk/suiviobsmer-ui/src/main/webapp/img/suppr-16px.png =================================================================== (Binary files differ) Property changes on: trunk/suiviobsmer-ui/src/main/webapp/img/suppr-16px.png ___________________________________________________________________ Added: svn:mime-type + application/octet-stream