Skip to content
Snippets Groups Projects
Commit 339f570c authored by Tor-Einar Skog's avatar Tor-Einar Skog
Browse files

Now you can delete SeasonTrapsites

parent b7ef8f4a
No related branches found
No related tags found
No related merge requests found
Showing
with 152 additions and 6 deletions
...@@ -62,6 +62,10 @@ public class HttpErrorServlet extends HttpServlet { ...@@ -62,6 +62,10 @@ public class HttpErrorServlet extends HttpServlet {
{ {
request.getRequestDispatcher("/404.ftl").forward(request, response); request.getRequestDispatcher("/404.ftl").forward(request, response);
} }
else if(statusCode.equals(400))
{
request.getRequestDispatcher("/400.ftl").forward(request, response);
}
else else
{ {
request.getRequestDispatcher("/error_unknown.ftl").forward(request, response); request.getRequestDispatcher("/error_unknown.ftl").forward(request, response);
......
...@@ -228,4 +228,19 @@ public class BarkbeetleBean { ...@@ -228,4 +228,19 @@ public class BarkbeetleBean {
}); });
return kml; return kml;
} }
public Boolean deleteSeasonTrapsite(Integer seasonTrapsiteId)
{
SeasonTrapsite stToDelete = em.find(SeasonTrapsite.class, seasonTrapsiteId);
if(stToDelete == null)
{
return false;
}
// Need to manually delete bivolt model calculations for this trap site
em.createNativeQuery("DELETE FROM barkbeetle.season_trapsite_bivolt WHERE season_trapsite_id = :seasonTrapsiteId")
.setParameter("seasonTrapsiteId", seasonTrapsiteId)
.executeUpdate();
em.remove(stToDelete);
return true;
}
} }
...@@ -32,6 +32,7 @@ import java.util.List; ...@@ -32,6 +32,7 @@ import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.ejb.EJBException;
import javax.servlet.ServletException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
...@@ -82,6 +83,7 @@ public class BarkbeetleController extends HttpServlet { ...@@ -82,6 +83,7 @@ public class BarkbeetleController extends HttpServlet {
Collections.sort(seasonTrapSites); Collections.sort(seasonTrapSites);
request.setAttribute("season", season); request.setAttribute("season", season);
request.setAttribute("seasonTrapsites", seasonTrapSites); request.setAttribute("seasonTrapsites", seasonTrapSites);
request.setAttribute("messageKey", request.getParameter("messageKey"));
request.getRequestDispatcher("/modules/barkbeetle/barkbeetleSeasonTrapsiteList.ftl").forward(request, response); request.getRequestDispatcher("/modules/barkbeetle/barkbeetleSeasonTrapsiteList.ftl").forward(request, response);
} }
else if(action.equals("editSeasonTrapsite")) else if(action.equals("editSeasonTrapsite"))
...@@ -277,6 +279,62 @@ public class BarkbeetleController extends HttpServlet { ...@@ -277,6 +279,62 @@ public class BarkbeetleController extends HttpServlet {
response.sendError(Response.Status.BAD_REQUEST.getStatusCode(),"Kan ikke registrere data, fordi fellelokalitet med id=" + request.getParameter("seasonTrapsiteId") + " ikke ble funnet."); response.sendError(Response.Status.BAD_REQUEST.getStatusCode(),"Kan ikke registrere data, fordi fellelokalitet med id=" + request.getParameter("seasonTrapsiteId") + " ikke ble funnet.");
} }
} }
// Only admins can do this
else if(action.equals("seasonTrapsiteDeleteForm"))
{
if(SessionControllerGetter.getUserBean().authorizeUser(user, VipsLogicRole.BARKBEETLE_ADMIN, VipsLogicRole.SUPERUSER))
{
SeasonTrapsite trapsite = request.getParameter("seasonTrapsiteId") != null ?
BarkbeetleBean.getInstance().getSeasonTrapsite(Integer.valueOf(request.getParameter("seasonTrapsiteId")))
: null;
if(trapsite != null)
{
// Get any registrations
request.setAttribute("seasonTrapsite", trapsite);
// Display them
request.getRequestDispatcher("/modules/barkbeetle/barkbeetleSeasonTrapsiteDeleteForm.ftl").forward(request, response);
}
else
{
response.sendError(404,"Den etterspurte fellelokaliteten finnes ikke i databasen"); // HTTP Forbidden
}
}
else
{
response.sendError(403,"Access not authorized"); // HTTP Forbidden
}
}
// Only admins can do this
else if(action.equals("seasonTrapsiteDelete"))
{
if(SessionControllerGetter.getUserBean().authorizeUser(user, VipsLogicRole.BARKBEETLE_ADMIN, VipsLogicRole.SUPERUSER))
{
try
{
if(BarkbeetleBean.getInstance().deleteSeasonTrapsite(Integer.valueOf(request.getParameter("seasonTrapsiteId"))))
{
response.sendRedirect(Globals.PROTOCOL + "://"
+ ServletUtil.getServerName(request)
+ "/barkbeetle?messageKey=deleteOK"
);
}
else
{
response.sendError(404,"Den etterspurte fellelokaliteten finnes ikke i databasen. <a href='/barkbeetle'>Gå tilbake til listen over fellelokaliteter</a>."); // HTTP Not found
}
}
catch(NumberFormatException ex)
{
response.sendError(400, "Feil med id for fellelokalitet. <a href='/barkbeetle'>Gå tilbake til listen over fellelokaliteter</a>."); // HTTP Bad request
}
}
else
{
response.sendError(403,"Access not authorized"); // HTTP Forbidden
}
}
} }
else else
{ {
......
...@@ -120,7 +120,7 @@ public class SeasonTrapsite implements Serializable, Comparable { ...@@ -120,7 +120,7 @@ public class SeasonTrapsite implements Serializable, Comparable {
private Integer propertyNo; private Integer propertyNo;
@Column(name = "property_section_no") @Column(name = "property_section_no")
private Integer propertySectionNo; private Integer propertySectionNo;
@OneToMany(cascade = CascadeType.MERGE, mappedBy = "seasonTrapsite", fetch = FetchType.EAGER) @OneToMany(cascade = CascadeType.ALL, mappedBy = "seasonTrapsite", fetch = FetchType.EAGER)
private Collection<TrapsiteRegistration> trapsiteRegistrationCollection; private Collection<TrapsiteRegistration> trapsiteRegistrationCollection;
@JoinColumn(name = "trapsite_type", referencedColumnName = "trapsite_type_id") @JoinColumn(name = "trapsite_type", referencedColumnName = "trapsite_type_id")
@ManyToOne @ManyToOne
......
...@@ -42,6 +42,7 @@ public class Globals { ...@@ -42,6 +42,7 @@ public class Globals {
"/css", "/css",
"/403", "/403",
"/404", "/404",
"/400",
"/rest", "/rest",
"/user", "/user",
"/test/testlogin.jsp", "/test/testlogin.jsp",
......
...@@ -123,11 +123,6 @@ ...@@ -123,11 +123,6 @@
<servlet-name>ResourceBundleJSServlet</servlet-name> <servlet-name>ResourceBundleJSServlet</servlet-name>
<url-pattern>/js/resourcebundle.js</url-pattern> <url-pattern>/js/resourcebundle.js</url-pattern>
</servlet-mapping> </servlet-mapping>
<servlet-mapping>
<servlet-name>HttpErrorServlet</servlet-name>
<url-pattern>/error/404</url-pattern>
<url-pattern>/error/403</url-pattern>
</servlet-mapping>
<servlet-mapping> <servlet-mapping>
<servlet-name>ForecastController</servlet-name> <servlet-name>ForecastController</servlet-name>
<url-pattern>/forecastConfiguration</url-pattern> <url-pattern>/forecastConfiguration</url-pattern>
...@@ -177,6 +172,12 @@ ...@@ -177,6 +172,12 @@
<servlet-name>CorsProxyServlet</servlet-name> <servlet-name>CorsProxyServlet</servlet-name>
<url-pattern>/corsproxy/*</url-pattern> <url-pattern>/corsproxy/*</url-pattern>
</servlet-mapping> </servlet-mapping>
<servlet-mapping>
<servlet-name>HttpErrorServlet</servlet-name>
<url-pattern>/error/400</url-pattern>
<url-pattern>/error/404</url-pattern>
<url-pattern>/error/403</url-pattern>
</servlet-mapping>
<welcome-file-list> <welcome-file-list>
<welcome-file>index.html</welcome-file> <welcome-file>index.html</welcome-file>
</welcome-file-list> </welcome-file-list>
......
<#include "master.ftl">
<#macro navbar_collapse>
</#macro>
<#macro page_head>
<title>ERROR 400</title>
</#macro>
<#macro page_contentwrap_start></#macro>
<#macro page_contentwrap_end></#macro>
<#macro page_contents>
<h1>ERROR 400 - bad request</h1>
<p>${message}</p>
<p><a href="/">To front page</a></p>
</#macro>
<@page_html/>
<#--
Copyright (c) 2020 NIBIO <http://www.nibio.no/>.
This file is part of VIPSLogic.
VIPSLogic is free software: you can redistribute it and/or modify
it under the terms of the NIBIO Open Source License as published by
NIBIO, either version 1 of the License, or (at your option) any
later version.
VIPSLogic is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
NIBIO Open Source License for more details.
You should have received a copy of the NIBIO Open Source License
along with VIPSLogic. If not, see <http://www.nibio.no/licenses/>.
--><#include "../../master.ftl">
<#macro page_head>
<title>Barkbilleregistrering: Slett fellelokalitet for ${seasonTrapsite.season}</title>
</#macro>
<#macro custom_js>
</#macro>
<#macro custom_css>
</#macro>
<#macro page_contents>
<h1>Slett fellelokalitet for sesongen ${seasonTrapsite.season}</h1>
<div class="singleBlockContainer">
<div class="row">
<div class="col-md-12">
<h2>${seasonTrapsite.countyName}/${seasonTrapsite.municipalityName}</h2>
<p>Denne lokaliteten har <a href="/barkbeetle?action=registerData&seasonTrapsiteId=${seasonTrapsite.seasonTrapsiteId}" target="new">${seasonTrapsite.trapsiteRegistrationCollection?size} registreringer</a></p>
<#if userIsAdmin && seasonTrapsite.seasonTrapsiteId?has_content>
<button type="button" class="btn btn-danger" onclick="window.location.href='/barkbeetle?action=seasonTrapsiteDelete&seasonTrapsiteId=${seasonTrapsite.seasonTrapsiteId}';">Jeg er ved mine fulle fem. Slett!</button>
<button type="button" class="btn btn-primary" onclick="window.location.href='/barkbeetle?action=editSeasonTrapsite&seasonTrapsiteId=${seasonTrapsite.seasonTrapsiteId}';">Avbryt</button>
</#if>
</div>
</div>
</#macro>
<@page_html/>
\ No newline at end of file
...@@ -275,6 +275,9 @@ ...@@ -275,6 +275,9 @@
<span class="help-block" id="${formId}_installationRemarks_validation"></span> <span class="help-block" id="${formId}_installationRemarks_validation"></span>
</div> </div>
<button type="submit" class="btn btn-default">Lagre</button> <button type="submit" class="btn btn-default">Lagre</button>
<#if userIsAdmin && seasonTrapsite.seasonTrapsiteId?has_content>
<button type="button" class="btn btn-danger" onclick="if(confirm('Ønsker du virkelig å slette?')){window.location.href='/barkbeetle?action=seasonTrapsiteDeleteForm&seasonTrapsiteId=${seasonTrapsite.seasonTrapsiteId}';}">Slett</button>
</#if>
</form> </form>
</div> </div>
<div class="col-md-4"> <div class="col-md-4">
......
...@@ -20,6 +20,9 @@ ...@@ -20,6 +20,9 @@
<title>Barkbilleregistrering: Fellelokaliteter for sesongen ${season}</title> <title>Barkbilleregistrering: Fellelokaliteter for sesongen ${season}</title>
</#macro> </#macro>
<#macro page_contents> <#macro page_contents>
<#if messageKey?has_content && messageKey=="deleteOK">
<div class="alert alert-success">Fellelokaliteten ble slettet</div>
</#if>
<h1>Fellelokaliteter for sesongen ${season}</h1> <h1>Fellelokaliteter for sesongen ${season}</h1>
<div class="row"> <div class="row">
<div class="col-md-7"> <div class="col-md-7">
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment