ItEr10S08AdministracionGruposItEr09S09: Link for editing worker from LocationGroups. It uses matrix parameters for specifying the worker.
This commit is contained in:
parent
6af12a9eba
commit
38f05bfc80
9 changed files with 182 additions and 2 deletions
|
|
@ -0,0 +1,33 @@
|
||||||
|
package org.navalplanner.web.common;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extracts <a href="http://www.w3.org/DesignIssues/MatrixURIs.html">matrix
|
||||||
|
* parameters</a>. <br />
|
||||||
|
* @author Óscar González Fernández <ogonzalez@igalia.com>
|
||||||
|
*/
|
||||||
|
public class MatrixParameters {
|
||||||
|
|
||||||
|
private static Pattern matrixParamPattern = Pattern
|
||||||
|
.compile(";([^/=;]+)=?([^/;]+)?");
|
||||||
|
|
||||||
|
public static Map<String, String> extract(HttpServletRequest request) {
|
||||||
|
return extract(request.getRequestURI());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Map<String, String> extract(String string) {
|
||||||
|
Map<String, String> result = new HashMap<String, String>();
|
||||||
|
Matcher matcher = matrixParamPattern.matcher(string);
|
||||||
|
while (matcher.find()) {
|
||||||
|
result.put(matcher.group(1), matcher.group(2));
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -59,6 +59,12 @@ public class CriterionWorkersController extends GenericForwardComposer {
|
||||||
return criterionsModel.isChangeAssignmentsDisabled();
|
return criterionsModel.isChangeAssignmentsDisabled();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void goToEditPage(Resource resource) {
|
||||||
|
System.out.println("going to edit page for: " + resource);
|
||||||
|
desktop.getExecution().sendRedirect(
|
||||||
|
"/resources/worker/worker.zul;edit=" + resource.getId());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void doAfterCompose(final Component comp) throws Exception {
|
public void doAfterCompose(final Component comp) throws Exception {
|
||||||
super.doAfterCompose(comp);
|
super.doAfterCompose(comp);
|
||||||
|
|
|
||||||
|
|
@ -29,4 +29,6 @@ public interface IWorkerModel {
|
||||||
|
|
||||||
Set<CriterionSatisfaction> getCriterionSatisfactions(Worker worker);
|
Set<CriterionSatisfaction> getCriterionSatisfactions(Worker worker);
|
||||||
|
|
||||||
|
Worker findResource(long workerId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -1,12 +1,16 @@
|
||||||
package org.navalplanner.web.resources.worker;
|
package org.navalplanner.web.resources.worker;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
import org.hibernate.validator.InvalidValue;
|
import org.hibernate.validator.InvalidValue;
|
||||||
import org.navalplanner.business.common.exceptions.ValidationException;
|
import org.navalplanner.business.common.exceptions.ValidationException;
|
||||||
import org.navalplanner.business.resources.entities.Worker;
|
import org.navalplanner.business.resources.entities.Worker;
|
||||||
import org.navalplanner.web.common.IMessagesForUser;
|
import org.navalplanner.web.common.IMessagesForUser;
|
||||||
import org.navalplanner.web.common.Level;
|
import org.navalplanner.web.common.Level;
|
||||||
|
import org.navalplanner.web.common.MatrixParameters;
|
||||||
import org.navalplanner.web.common.MessagesForUser;
|
import org.navalplanner.web.common.MessagesForUser;
|
||||||
import org.navalplanner.web.common.OnlyOneVisible;
|
import org.navalplanner.web.common.OnlyOneVisible;
|
||||||
import org.navalplanner.web.common.Util;
|
import org.navalplanner.web.common.Util;
|
||||||
|
|
@ -119,6 +123,15 @@ public class WorkerCRUDController extends GenericForwardComposer {
|
||||||
if (messagesContainer == null)
|
if (messagesContainer == null)
|
||||||
throw new RuntimeException("messagesContainer is needed");
|
throw new RuntimeException("messagesContainer is needed");
|
||||||
messages = new MessagesForUser(messagesContainer);
|
messages = new MessagesForUser(messagesContainer);
|
||||||
|
Map<String, String> matrixParameters = MatrixParameters
|
||||||
|
.extract((HttpServletRequest) execution.getNativeRequest());
|
||||||
|
if (matrixParameters.containsKey("create")) {
|
||||||
|
goToCreateForm();
|
||||||
|
} else if (matrixParameters.containsKey("edit")) {
|
||||||
|
goToEditForm(workerModel.findResource(Long
|
||||||
|
.parseLong(matrixParameters.get("edit"))));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private LocalizationsController createLocalizationsController(
|
private LocalizationsController createLocalizationsController(
|
||||||
|
|
|
||||||
|
|
@ -284,4 +284,13 @@ public class WorkerModel implements IWorkerModel {
|
||||||
return worker != null && worker.getId() == null;
|
return worker != null && worker.getId() == null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Worker findResource(long workerId) {
|
||||||
|
try {
|
||||||
|
return (Worker) resourceService.findResource(workerId);
|
||||||
|
} catch (InstanceNotFoundException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -2,12 +2,14 @@
|
||||||
<grid model="@{controller.workers.workersForCurrentCriterion}"
|
<grid model="@{controller.workers.workersForCurrentCriterion}"
|
||||||
mold="paging" pageSize="5" apply="${controller.workers}">
|
mold="paging" pageSize="5" apply="${controller.workers}">
|
||||||
<columns>
|
<columns>
|
||||||
<column label="First Name" sort="auto(firstName)" />
|
<column label="Operacións" />
|
||||||
<column label="Surname" sort="auto(surname)" />
|
<column label="Nome" sort="auto(firstName)" />
|
||||||
|
<column label="Apellidos" sort="auto(surname)" />
|
||||||
<column label="nif" sort="auto(nif)" />
|
<column label="nif" sort="auto(nif)" />
|
||||||
</columns>
|
</columns>
|
||||||
<rows>
|
<rows>
|
||||||
<row self="@{each='worker'}" value="@{worker}">
|
<row self="@{each='worker'}" value="@{worker}">
|
||||||
|
<button label="Edición" onClick="controller.workers.goToEditPage(self.getParent().getValue());"></button>
|
||||||
<label value="@{worker.firstName}" />
|
<label value="@{worker.firstName}" />
|
||||||
<label value="@{worker.surname}" />
|
<label value="@{worker.surname}" />
|
||||||
<label value="@{worker.nif}" />
|
<label value="@{worker.nif}" />
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
package org.navalplanner.web.common;
|
||||||
|
|
||||||
|
import static org.hamcrest.CoreMatchers.equalTo;
|
||||||
|
import static org.junit.Assert.assertThat;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.junit.experimental.theories.DataPoint;
|
||||||
|
import org.junit.experimental.theories.Theories;
|
||||||
|
import org.junit.experimental.theories.Theory;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests that {@link MatrixParameters} supports extracting several
|
||||||
|
* matrix parameters <br />
|
||||||
|
* @author Óscar González Fernández <ogonzalez@igalia.com>
|
||||||
|
*/
|
||||||
|
@RunWith(Theories.class)
|
||||||
|
public class MatrixParametersSupportSeveralParameters {
|
||||||
|
|
||||||
|
@DataPoint
|
||||||
|
public static String TWO_PARAMETERS_IN_THE_END = "/prueba/prueba.php;color=red;size=2";
|
||||||
|
|
||||||
|
@DataPoint
|
||||||
|
public static String TWO_PARAMETERS_IN_THE_MIDDLE = "/prueba;color=red;size=2/prueba.php";
|
||||||
|
|
||||||
|
@DataPoint
|
||||||
|
public static String TWO_PARAMETERS_IN_DIFFERENT_LOCATIONS = "/prueba;color=red/prueba.php;size=2";
|
||||||
|
|
||||||
|
@Theory
|
||||||
|
public void oneParameterEqualToRed(String parameter) {
|
||||||
|
Map<String, String> params = MatrixParameters
|
||||||
|
.extract(parameter);
|
||||||
|
assertThat(params.size(), equalTo(2));
|
||||||
|
assertThat(params.get("color"), equalTo("red"));
|
||||||
|
assertThat(params.get("size"), equalTo("2"));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,38 @@
|
||||||
|
package org.navalplanner.web.common;
|
||||||
|
|
||||||
|
import static org.hamcrest.CoreMatchers.equalTo;
|
||||||
|
import static org.junit.Assert.assertThat;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.junit.experimental.theories.DataPoint;
|
||||||
|
import org.junit.experimental.theories.Theories;
|
||||||
|
import org.junit.experimental.theories.Theory;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test that {@link MatrixParameters} support one parameter<br />
|
||||||
|
* @author Óscar González Fernández <ogonzalez@igalia.com>
|
||||||
|
*/
|
||||||
|
@RunWith(Theories.class)
|
||||||
|
public class MatrixParametersSupportsOneParameterTheory {
|
||||||
|
|
||||||
|
@DataPoint
|
||||||
|
public static String ONE_PARAMETER_IN_THE_END = "/prueba/prueba.php;color=red";
|
||||||
|
|
||||||
|
@DataPoint
|
||||||
|
public static String ONE_PARAMETER_IN_THE_MIDDLE = "/prueba;color=red/prueba.php";
|
||||||
|
|
||||||
|
@DataPoint
|
||||||
|
public static String ONE_PARAMETER_IN_THE_MIDDLE_WITH_SEMICOLON_AFTER = "/prueba;color=red;/prueba.php";
|
||||||
|
|
||||||
|
@Theory
|
||||||
|
public void oneParameterEqualToRed(String parameter) {
|
||||||
|
Map<String, String> params = MatrixParameters
|
||||||
|
.extract(parameter);
|
||||||
|
assertThat(params.size(), equalTo(1));
|
||||||
|
assertThat(params.keySet().iterator().next(), equalTo("color"));
|
||||||
|
assertThat(params.get("color"), equalTo("red"));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,37 @@
|
||||||
|
package org.navalplanner.web.common;
|
||||||
|
|
||||||
|
import static org.hamcrest.CoreMatchers.equalTo;
|
||||||
|
import static org.junit.Assert.assertNull;
|
||||||
|
import static org.junit.Assert.assertThat;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.junit.experimental.theories.DataPoint;
|
||||||
|
import org.junit.experimental.theories.Theories;
|
||||||
|
import org.junit.experimental.theories.Theory;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests that {@link MatrixParameters} supports matrix parameters
|
||||||
|
* without value <br />
|
||||||
|
* @author Óscar González Fernández <ogonzalez@igalia.com>
|
||||||
|
*/
|
||||||
|
@RunWith(Theories.class)
|
||||||
|
public class MatrixParametersSupportsParametersWithoutValue {
|
||||||
|
|
||||||
|
@DataPoint
|
||||||
|
public static String ONE_PARAMETER_WITHOUT_VALUE_AT_THE_END = "/blabalba/eo/prueba;create";
|
||||||
|
|
||||||
|
@DataPoint
|
||||||
|
public static String ONE_PARAMETER_WITHOUT_VALUE_IN_THE_MIDDLE = "/blabalba;create/eo/prueba";
|
||||||
|
|
||||||
|
@Theory
|
||||||
|
public void testTheory(String parameter) {
|
||||||
|
Map<String, String> map = MatrixParameters.extract(parameter);
|
||||||
|
assertThat(map.size(), equalTo(1));
|
||||||
|
assertTrue(map.containsKey("create"));
|
||||||
|
assertNull(map.get("create"));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Add table
Reference in a new issue