ItEr40S05ValidacionEProbasFuncionaisItEr39S05 : It adds validations to the criteria assigned to the machines and it sorts satisfaction criteria.

This commit is contained in:
Susana Montes Pedreira 2009-12-21 16:34:41 +01:00 committed by Javier Moran Rua
parent 9e19be2018
commit bb5a1927ea
7 changed files with 86 additions and 37 deletions

View file

@ -124,17 +124,17 @@ public class AssignedMachineCriterionsModel implements IAssignedMachineCriterion
}
@Override
public Set<CriterionSatisfactionDTO> getAllCriterionSatisfactions() {
public List<CriterionSatisfactionDTO> getAllCriterionSatisfactions() {
if (resource == null) {
return new HashSet<CriterionSatisfactionDTO>();
return new ArrayList<CriterionSatisfactionDTO>();
}
return allSatisfactionsDTO();
}
@Override
public Set<CriterionSatisfactionDTO> getFilterCriterionSatisfactions() {
public List<CriterionSatisfactionDTO> getFilterCriterionSatisfactions() {
if (resource == null) {
return new HashSet<CriterionSatisfactionDTO>();
return new ArrayList<CriterionSatisfactionDTO>();
}
return filterSatisfactionsDTO();
}
@ -145,8 +145,8 @@ public class AssignedMachineCriterionsModel implements IAssignedMachineCriterion
this.criterionSatisfactionDTOs.add(criterionSatisfactionDTO);
}
private Set<CriterionSatisfactionDTO> allSatisfactionsDTO() {
Set<CriterionSatisfactionDTO> satisfactions = new HashSet<CriterionSatisfactionDTO>();
private List<CriterionSatisfactionDTO> allSatisfactionsDTO() {
List<CriterionSatisfactionDTO> satisfactions = new ArrayList<CriterionSatisfactionDTO>();
for (CriterionSatisfactionDTO criterionSatisfactionDTO : criterionSatisfactionDTOs) {
if (!criterionSatisfactionDTO.isIsDeleted()) {
satisfactions.add(criterionSatisfactionDTO);
@ -155,8 +155,8 @@ public class AssignedMachineCriterionsModel implements IAssignedMachineCriterion
return satisfactions;
}
private Set<CriterionSatisfactionDTO> filterSatisfactionsDTO() {
Set<CriterionSatisfactionDTO> satisfactions = new HashSet<CriterionSatisfactionDTO>();
private List<CriterionSatisfactionDTO> filterSatisfactionsDTO() {
List<CriterionSatisfactionDTO> satisfactions = new ArrayList<CriterionSatisfactionDTO>();
for (CriterionSatisfactionDTO criterionSatisfactionDTO : criterionSatisfactionDTOs) {
if ((!criterionSatisfactionDTO.isIsDeleted())
&& (criterionSatisfactionDTO.isCurrent())) {

View file

@ -21,7 +21,6 @@
package org.navalplanner.web.resources.machine;
import java.util.List;
import java.util.Set;
import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.resources.entities.CriterionWithItsType;
@ -44,13 +43,13 @@ public interface IAssignedMachineCriterionsModel {
public boolean checkSameCriterionAndSameInterval(
CriterionSatisfactionDTO satisfaction);
Set<CriterionSatisfactionDTO> getAllCriterionSatisfactions();
List<CriterionSatisfactionDTO> getAllCriterionSatisfactions();
List<CriterionWithItsType> getCriterionWithItsType();
List<CriterionWithItsType> getCriterionWorkersWithItsType();
Set<CriterionSatisfactionDTO> getFilterCriterionSatisfactions();
List<CriterionSatisfactionDTO> getFilterCriterionSatisfactions();
void prepareForEdit(Resource resource);

View file

@ -34,6 +34,7 @@ import org.navalplanner.business.common.exceptions.ValidationException;
import org.navalplanner.business.resources.entities.Machine;
import org.navalplanner.web.calendars.BaseCalendarEditionController;
import org.navalplanner.web.calendars.IBaseCalendarModel;
import org.navalplanner.web.common.ConstraintChecker;
import org.navalplanner.web.common.IMessagesForUser;
import org.navalplanner.web.common.Level;
import org.navalplanner.web.common.MessagesForUser;
@ -203,9 +204,12 @@ public class MachineCRUDController extends GenericForwardComposer {
}
public void save() {
validateConstraints();
try {
saveCalendar();
saveCriterions();
if (!confirmCriterions()) {
return;
}
machineModel.confirmSave();
goToList();
messagesForUser.showMessage(Level.INFO, _("Machine saved"));
@ -215,9 +219,12 @@ public class MachineCRUDController extends GenericForwardComposer {
}
public void saveAndContinue() {
validateConstraints();
try {
saveCalendar();
saveCriterions();
if (!confirmCriterions()) {
return;
}
machineModel.confirmSave();
goToEditForm(machineModel.getMachine());
messagesForUser.showMessage(Level.INFO,_("Machine saved"));
@ -227,6 +234,26 @@ public class MachineCRUDController extends GenericForwardComposer {
}
}
private void validateConstraints() {
Tab tab = (Tab) editWindow.getFellowIfAny("tbMachineData");
try {
validateMachineDataTab();
tab = (Tab) editWindow.getFellowIfAny("assignedCriteriaTab");
criterionsController.validateConstraints();
tab = (Tab) editWindow.getFellowIfAny("costCategoryAssignmentTab");
resourcesCostCategoryAssignmentController.validateConstraints();
// TODO: check 'calendar' tab
} catch (WrongValueException e) {
tab.setSelected(true);
throw e;
}
}
private void validateMachineDataTab() {
ConstraintChecker.isValid(editWindow
.getFellowIfAny("machineDataTabpanel"));
}
private String showInvalidValues(ValidationException e) {
String result = "";
for (InvalidValue each : e.getInvalidValues())
@ -243,11 +270,14 @@ public class MachineCRUDController extends GenericForwardComposer {
}
}
private void saveCriterions() throws ValidationException {
private boolean confirmCriterions() throws ValidationException {
if (criterionsController != null) {
criterionsController.validate();
if (!criterionsController.validate()) {
return false;
}
criterionsController.save();
}
return true;
}
private void goToList() {

View file

@ -40,7 +40,7 @@ import org.zkoss.zul.Row;
import org.zkoss.zul.Rows;
/**
*
* Controller for {@link Criterion} worker <br />
* @author Susana Montes Pedreira <smontes@wirelessgalicia.com>
*/
public class CriterionsController extends GenericForwardComposer {
@ -194,8 +194,9 @@ public class CriterionsController extends GenericForwardComposer {
throw new WrongValueException(comp,
_("Start date is not valid, the new start date must be lower than the end date"));
}else if(!criterionSatisfactionDTO.isPreviousStartDate((Date) value)){
throw new WrongValueException(comp,
_("End date is not valid, the new end date must be later the current end date"));
throw new WrongValueException(
comp,
_("Start date is not valid, the new start date must be previous the current start date"));
}
}

View file

@ -10,7 +10,6 @@ import static org.navalplanner.web.common.InvalidInputsChecker.thereAreInvalidIn
import java.util.Date;
import java.util.List;
import java.util.Set;
import org.hibernate.validator.InvalidValue;
import org.navalplanner.business.common.exceptions.ValidationException;
@ -18,6 +17,7 @@ import org.navalplanner.business.resources.entities.CriterionSatisfaction;
import org.navalplanner.business.resources.entities.CriterionWithItsType;
import org.navalplanner.business.resources.entities.Machine;
import org.navalplanner.business.workreports.entities.WorkReportLine;
import org.navalplanner.web.common.ConstraintChecker;
import org.navalplanner.web.common.IMessagesForUser;
import org.navalplanner.web.common.Level;
import org.navalplanner.web.common.MessagesForUser;
@ -27,12 +27,14 @@ import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.WrongValueException;
import org.zkoss.zk.ui.util.GenericForwardComposer;
import org.zkoss.zul.Bandbox;
import org.zkoss.zul.Column;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Constraint;
import org.zkoss.zul.Datebox;
import org.zkoss.zul.Grid;
import org.zkoss.zul.Hbox;
import org.zkoss.zul.ListModelExt;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.Row;
import org.zkoss.zul.Rows;
@ -67,13 +69,14 @@ public class CriterionsMachineController extends GenericForwardComposer {
public void prepareForEdit(Machine machine) {
machine.getConfigurationUnits();
assignedMachineCriterionsModel.prepareForEdit(machine);
reload();
}
public void prepareForCreate(Machine machine) {
assignedMachineCriterionsModel.prepareForCreate(machine);
}
public Set<CriterionSatisfactionDTO> getCriterionSatisfactionDTOs() {
public List<CriterionSatisfactionDTO> getCriterionSatisfactionDTOs() {
Comboitem comboitem = comboboxFilter.getSelectedItem();
if((comboitem != null) && (comboitem.getLabel().equals("in force"))) {
return assignedMachineCriterionsModel
@ -98,6 +101,18 @@ public class CriterionsMachineController extends GenericForwardComposer {
public void reload() {
Util.reloadBindings(listingCriterions);
forceSortGridSatisfaction();
}
public void forceSortGridSatisfaction() {
Column column = (Column) listingCriterions.getColumns().getFirstChild();
ListModelExt model = (ListModelExt) listingCriterions.getModel();
if ("ascending".equals(column.getSortDirection())) {
model.sort(column.getSortAscending(), true);
}
if ("descending".equals(column.getSortDirection())) {
model.sort(column.getSortDescending(), false);
}
}
public void remove(CriterionSatisfactionDTO criterionSatisfactionDTO){
@ -195,7 +210,7 @@ public class CriterionsMachineController extends GenericForwardComposer {
} else if (!criterionSatisfactionDTO.isPreviousStartDate((Date) value)) {
throw new WrongValueException(
comp,
_("End date is not valid, the new end date must be later the current end date"));
_("Start date is not valid, the new start date must be previous the current start date"));
}
}
@ -364,4 +379,8 @@ public class CriterionsMachineController extends GenericForwardComposer {
private Bandbox getBandType(Row row) {
return (Bandbox) ((Hbox) row.getChildren().get(0)).getChildren().get(0);
}
public void validateConstraints() {
ConstraintChecker.isValid(self);
}
}

View file

@ -26,13 +26,13 @@
<tabbox>
<tabs>
<tab id="tbMachineData" label="${i18n:_('Machine data')}"></tab>
<tab label="${i18n:_('Assigned criteria')}"></tab>
<tab id="assignedCriteriaTab" label="${i18n:_('Assigned criteria')}"></tab>
<tab label="${i18n:_('Calendar')}"></tab>
<tab label="${i18n:_('Configuration')}"></tab>
<tab label="${i18n:_('Cost category assignment')}"></tab>
<tab id="costCategoryAssignmentTab" label="${i18n:_('Cost category assignment')}"></tab>
</tabs>
<tabpanels>
<tabpanel>
<tabpanel id="machineDataTabpanel">
<grid fixedLayout="true">
<columns>
<column width="200px" />

View file

@ -15,25 +15,25 @@
</combobox>
<separator bar="false" spacing="20px" orient="vertical"/>
</hbox>
<grid id="listingCriterions"
model="@{assignedCriterionsController.criterionSatisfactionDTOs}"
mold="paging" pageSize="10">
<newdatasortablegrid id="listingCriterions" mold="paging" pageSize="10" fixedLayout="true"
model="@{assignedCriterionsController.criterionSatisfactionDTOs}">
<columns>
<column label="${i18n:_('Criterion name')}" sort="auto(criterionAndType)" sortDirection="ascending" />
<column label="${i18n:_('Starting date')}" width="200px" align="center"/>
<column label="${i18n:_('Ending date')}" width="200px" align="center"/>
<column label="${i18n:_('State')}" width="70px" align="center"/>
<column label="${i18n:_('Operations')}" width="70px" align="center"/>
<newdatasortablecolumn label="${i18n:_('Criterion name')}" sort="auto(criterionAndType)" sortDirection="ascending" />
<newdatasortablecolumn label="${i18n:_('Starting date')}" sort="auto(startDate)" width="200px" align="center"/>
<newdatasortablecolumn label="${i18n:_('Ending date')}" sort="auto(endDate)" width="200px" align="center"/>
<newdatasortablecolumn label="${i18n:_('State')}" sort="auto(state)" width="70px" align="center"/>
<newdatasortablecolumn label="${i18n:_('Operations')}" width="70px" align="center"/>
</columns>
<rows>
<row self="@{each='criterionSatisfactionDTO'}" value="@{criterionSatisfactionDTO}">
<hbox>
<!-- Select criterion -->
<bandbox width="500px"
visible="@{criterionSatisfactionDTO.isNewObject}"
<bandbox width="300px"
constraint="no empty"
visible="@{criterionSatisfactionDTO.newObject}"
value = "@{criterionSatisfactionDTO.criterionAndType}">
<bandpopup>
<listbox id="lbCriterions" width="500px" height="150px" fixedLayout="true"
<listbox width="500px" height="150px" fixedLayout="true"
model="@{assignedCriterionsController.criterionWithItsTypes}"
onSelect="assignedCriterionsController.selectCriterionAndType(self.selectedItem,
self.parent.parent,self.parent.parent.parent.parent.value);">
@ -48,7 +48,7 @@
</listbox>
</bandpopup>
</bandbox>
<label visible="@{criterionSatisfactionDTO.isOldObject}"
<label visible="@{criterionSatisfactionDTO.oldObject}"
value="@{criterionSatisfactionDTO.criterionAndType}"/>
</hbox>
<datebox id="startDate" value="@{criterionSatisfactionDTO.startDate}"
@ -68,7 +68,7 @@
</button>
</row>
</rows>
</grid>
</newdatasortablegrid>
</panelchildren>
</panel>
</vbox>