finished view, lack of persistence on changes of camp locations
This commit is contained in:
		| @@ -121,6 +121,7 @@ public class AdminController extends CommonController { | ||||
| 	public String prepareAddLocation(Model model, HttpServletRequest request) { | ||||
| 		super.setupSession(model, request); | ||||
| 		model.addAttribute("bean", new LocationBean()); | ||||
| 		model.addAttribute("documents", service.getLocationDocuments()); | ||||
| 		return "/admin/location_edit"; | ||||
| 	} | ||||
|  | ||||
| @@ -128,6 +129,7 @@ public class AdminController extends CommonController { | ||||
| 	public String prepareAddLocation(@PathVariable Integer id, Model model, HttpServletRequest request) { | ||||
| 		super.setupSession(model, request); | ||||
| 		model.addAttribute("bean", service.getLocation(id)); | ||||
| 		model.addAttribute("documents", service.getLocationDocuments()); | ||||
| 		return "/admin/location_edit"; | ||||
| 	} | ||||
|  | ||||
|   | ||||
| @@ -13,11 +13,13 @@ import java.util.Set; | ||||
|  | ||||
| import org.apache.logging.log4j.LogManager; | ||||
| import org.apache.logging.log4j.Logger; | ||||
| import org.jooq.Condition; | ||||
| import org.jooq.DSLContext; | ||||
| import org.jooq.DeleteConditionStep; | ||||
| import org.jooq.Field; | ||||
| import org.jooq.InsertResultStep; | ||||
| import org.jooq.InsertReturningStep; | ||||
| import org.jooq.Record4; | ||||
| import org.jooq.Record5; | ||||
| import org.jooq.SelectConditionStep; | ||||
| import org.jooq.SelectSeekStep1; | ||||
| @@ -121,6 +123,36 @@ public class AdminRepository { | ||||
| 		return list; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * get all documents from the database that fit to condition | ||||
| 	 * | ||||
| 	 * @param condition the where condition, e.g. to filter for doctype | ||||
| 	 * | ||||
| 	 * @return all documents | ||||
| 	 */ | ||||
| 	public List<DocumentBean> getAllDocumentsWith(Condition condition) { | ||||
| 		SelectConditionStep<Record4<Integer, String, EnumDocument, EnumFiletype>> sql = jooq | ||||
| 		// @formatter:off | ||||
| 			.select(T_DOCUMENT.PK, | ||||
| 					    T_DOCUMENT.NAME, | ||||
| 					    T_DOCUMENT.DOCTYPE, | ||||
| 					    T_DOCUMENT.FILETYPE) | ||||
| 			.from(T_DOCUMENT) | ||||
| 			.where(condition); | ||||
| 		// @formatter:on | ||||
| 		LOGGER.debug(sql.toString()); | ||||
| 		List<DocumentBean> list = new ArrayList<>(); | ||||
| 		for (Record4<Integer, String, EnumDocument, EnumFiletype> r : sql.fetch()) { | ||||
| 			DocumentBean bean = new DocumentBean(); | ||||
| 			bean.setPk(r.get(T_DOCUMENT.PK)); | ||||
| 			bean.setName(r.get(T_DOCUMENT.NAME)); | ||||
| 			bean.setDoctype(r.get(T_DOCUMENT.DOCTYPE)); | ||||
| 			bean.setFiletype(r.get(T_DOCUMENT.FILETYPE)); | ||||
| 			list.add(bean); | ||||
| 		} | ||||
| 		return list; | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * upsert document in t_document | ||||
| 	 * | ||||
|   | ||||
| @@ -1,5 +1,7 @@ | ||||
| package de.jottyfan.camporganizer.module.admin; | ||||
|  | ||||
| import static de.jottyfan.camporganizer.db.jooq.Tables.T_DOCUMENT; | ||||
|  | ||||
| import java.io.IOException; | ||||
| import java.util.List; | ||||
|  | ||||
| @@ -11,6 +13,7 @@ import org.jooq.exception.DataAccessException; | ||||
| import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.stereotype.Service; | ||||
|  | ||||
| import de.jottyfan.camporganizer.db.jooq.enums.EnumDocument; | ||||
| import de.jottyfan.camporganizer.module.mail.MailBean; | ||||
| import de.jottyfan.camporganizer.module.mail.MailRepository; | ||||
|  | ||||
| @@ -103,4 +106,13 @@ public class AdminService { | ||||
| 	public void deleteLocation(Integer id) { | ||||
| 		throw new DataAccessException("not yet implemented"); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * get all documents that fit to the location definitions | ||||
| 	 * | ||||
| 	 * @return the location documents | ||||
| 	 */ | ||||
| 	public List<DocumentBean> getLocationDocuments() { | ||||
| 		return adminRepository.getAllDocumentsWith(T_DOCUMENT.DOCTYPE.eq(EnumDocument.location)); | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -2,6 +2,9 @@ package de.jottyfan.camporganizer.module.admin; | ||||
|  | ||||
| import java.io.Serializable; | ||||
|  | ||||
| import javax.validation.constraints.NotBlank; | ||||
| import javax.validation.constraints.NotNull; | ||||
|  | ||||
| import de.jottyfan.camporganizer.db.jooq.tables.records.TLocationRecord; | ||||
|  | ||||
| /** | ||||
| @@ -13,8 +16,12 @@ public class LocationBean implements Serializable { | ||||
| 	private static final long serialVersionUID = 1L; | ||||
|  | ||||
| 	private Integer pk; | ||||
|  | ||||
| 	@NotBlank | ||||
| 	private String name; | ||||
| 	@NotNull | ||||
| 	private Integer fkDocument; | ||||
| 	@NotBlank | ||||
| 	private String url; | ||||
|  | ||||
| 	public static LocationBean of(TLocationRecord r) { | ||||
|   | ||||
| @@ -28,7 +28,23 @@ | ||||
| 									th:class="${'form-control ' + (#fields.hasErrors('name') ? 'inputerror' : '')}"> | ||||
| 							</div> | ||||
| 						</div> | ||||
| 						<!-- TODO: url and dropdown of documents --> | ||||
| 						<div class="row mb-2"> | ||||
| 							<label for="inputURL" class="col-sm-2 col-form-label">URL</label> | ||||
| 							<div class="col-sm-10"> | ||||
| 								<span class="error" th:each="error : ${#fields.errors('url')}">[[${error}]]<br /></span> <input id="inputURL" type="text" th:field="*{url}" | ||||
| 									th:class="${'form-control ' + (#fields.hasErrors('url') ? 'inputerror' : '')}"> | ||||
| 							</div> | ||||
| 						</div> | ||||
| 						<div class="row mb-2"> | ||||
| 							<label for="inputDoc" class="col-sm-2 col-form-label">Wegbeschreibung</label> | ||||
| 							<div class="col-sm-10"> | ||||
| 								<span class="error" th:each="error : ${#fields.errors('fkDocument')}">[[${error}]]<br /></span> <select id="inputDoc" th:field="*{fkDocument}" | ||||
| 									th:class="${'form-select ' + (#fields.hasErrors('fkDocument') ? 'inputerror' : '')}"> | ||||
| 									<option value="">--- bitte wählen ---</option> | ||||
| 									<option th:each="d : ${documents}" th:value="${d.pk}" th:text="${d.name}"></option> | ||||
| 								</select> | ||||
| 							</div> | ||||
| 						</div> | ||||
| 						<div class="row mb-2"> | ||||
| 							<div class="col-sm-2"></div> | ||||
| 							<div class="col-sm-10"> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user