├── system.properties
├── src
├── main
│ ├── resources
│ │ ├── static
│ │ │ ├── index.css
│ │ │ ├── introduction
│ │ │ │ ├── helloworld.js
│ │ │ │ └── helloworld.html
│ │ │ ├── eksamen
│ │ │ │ ├── v19
│ │ │ │ │ └── index.html
│ │ │ │ └── v20
│ │ │ │ │ ├── logginn.html
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── index.html
│ │ │ │ │ └── logginn.js
│ │ │ ├── klientTjener1
│ │ │ │ ├── helloserver.js
│ │ │ │ ├── load.html
│ │ │ │ ├── load.js
│ │ │ │ ├── helloserver.html
│ │ │ │ ├── temperatur.html
│ │ │ │ ├── temperatur.js
│ │ │ │ ├── kalkulator.html
│ │ │ │ ├── index.js
│ │ │ │ ├── index.html
│ │ │ │ └── kalkulator.js
│ │ │ ├── javascript2
│ │ │ │ ├── plenum.html
│ │ │ │ ├── js2.html
│ │ │ │ └── js2.js
│ │ │ ├── jQuery
│ │ │ │ ├── oving.html
│ │ │ │ ├── oving.js
│ │ │ │ └── jquery.html
│ │ │ ├── javascript3
│ │ │ │ ├── oving.html
│ │ │ │ ├── oving.js
│ │ │ │ └── js3.html
│ │ │ ├── apiurl.js
│ │ │ ├── rekursjon
│ │ │ │ ├── towerofhanoi.js
│ │ │ │ └── towerofhanoi.html
│ │ │ ├── inputvalidering
│ │ │ │ ├── index.html
│ │ │ │ ├── index.js
│ │ │ │ ├── registrere.html
│ │ │ │ ├── validering.js
│ │ │ │ ├── registrere.js
│ │ │ │ ├── endre.html
│ │ │ │ └── endre.js
│ │ │ ├── sesjoner
│ │ │ │ ├── index.js
│ │ │ │ ├── liste.html
│ │ │ │ ├── index.html
│ │ │ │ ├── liste.js
│ │ │ │ ├── registrere.html
│ │ │ │ ├── endre.html
│ │ │ │ ├── registrere.js
│ │ │ │ ├── validering.js
│ │ │ │ └── endre.js
│ │ │ ├── sikkerhet
│ │ │ │ ├── liste.html
│ │ │ │ ├── nybruker.js
│ │ │ │ ├── nybruker.html
│ │ │ │ ├── index.js
│ │ │ │ ├── index.html
│ │ │ │ ├── liste.js
│ │ │ │ ├── registrere.html
│ │ │ │ ├── endre.html
│ │ │ │ ├── registrere.js
│ │ │ │ ├── validering.js
│ │ │ │ └── endre.js
│ │ │ ├── relasjonsdatabase2
│ │ │ │ ├── index.html
│ │ │ │ ├── registrere.html
│ │ │ │ ├── endre.html
│ │ │ │ ├── registrere.js
│ │ │ │ ├── index.js
│ │ │ │ └── endre.js
│ │ │ ├── javascript1
│ │ │ │ ├── js1.js
│ │ │ │ └── js1.html
│ │ │ ├── lagringserver
│ │ │ │ ├── index.html
│ │ │ │ └── index.js
│ │ │ ├── index.html
│ │ │ ├── stylingbootstrap
│ │ │ │ ├── index.html
│ │ │ │ └── index.js
│ │ │ ├── relasjonsdatabase1
│ │ │ │ └── index.html
│ │ │ └── nedtrekkslister
│ │ │ │ └── index.html
│ │ ├── application.properties
│ │ ├── templates
│ │ │ └── error.html
│ │ └── schema.sql
│ └── java
│ │ └── eriksommer
│ │ └── webprog
│ │ ├── eksamen
│ │ ├── v19
│ │ │ └── Main.java
│ │ └── v20
│ │ │ ├── Bruker.java
│ │ │ ├── Skiloper.java
│ │ │ └── ControllerV20.java
│ │ ├── generiskedatatyper
│ │ ├── MobelButikken.java
│ │ ├── MobelComparator.java
│ │ ├── MobelImpl.java
│ │ ├── Stol.java
│ │ ├── BordComparator.java
│ │ ├── Bord.java
│ │ ├── MobelRegister.java
│ │ └── Mobel.java
│ │ ├── klientTjener1
│ │ ├── controller
│ │ │ ├── HelloServerController.java
│ │ │ ├── TempController.java
│ │ │ ├── ValutaController.java
│ │ │ └── KalkulatorController.java
│ │ ├── model
│ │ │ ├── Valuta.java
│ │ │ └── Belop.java
│ │ └── service
│ │ │ ├── KalkulatorService.java
│ │ │ ├── TempService.java
│ │ │ └── ValutaService.java
│ │ ├── WebprogApplication.java
│ │ ├── ErrorHandler.java
│ │ ├── nedtrekkslister
│ │ ├── model
│ │ │ ├── Bil.java
│ │ │ └── Motorvogn.java
│ │ ├── repository
│ │ │ ├── MotorvognRepository.java
│ │ │ └── BilRepository.java
│ │ └── controller
│ │ │ ├── BilController.java
│ │ │ └── MotorvognController.java
│ │ ├── sesjoner
│ │ ├── model
│ │ │ ├── Bil.java
│ │ │ └── Motorvogn.java
│ │ └── service
│ │ │ └── Inputvalidering.java
│ │ ├── sikkerhet
│ │ ├── model
│ │ │ ├── Bil.java
│ │ │ ├── Bruker.java
│ │ │ └── Motorvogn.java
│ │ └── service
│ │ │ ├── Kryptering.java
│ │ │ └── Inputvalidering.java
│ │ ├── inputvalidering
│ │ ├── model
│ │ │ ├── Bil.java
│ │ │ └── Motorvogn.java
│ │ ├── service
│ │ │ └── Inputvalidering.java
│ │ └── repository
│ │ │ └── Motorvogn7Repository.java
│ │ ├── relasjonsdatabase1
│ │ ├── model
│ │ │ ├── Bil.java
│ │ │ └── Motorvogn.java
│ │ ├── controller
│ │ │ └── Motorvogn4Controller.java
│ │ └── repository
│ │ │ └── Motorvogn4Repository.java
│ │ ├── lagringserver
│ │ ├── repository
│ │ │ └── AppRepository.java
│ │ ├── controller
│ │ │ └── Controller.java
│ │ └── model
│ │ │ └── Motorvogn.java
│ │ ├── relasjonsdatabase2
│ │ ├── model
│ │ │ ├── Bil.java
│ │ │ └── Motorvogn.java
│ │ ├── controller
│ │ │ └── Motorvogn6Controller.java
│ │ └── repository
│ │ │ └── Motorvogn6Repository.java
│ │ ├── rekursjon
│ │ ├── service
│ │ │ └── TowerOfHanoiService.java
│ │ ├── controller
│ │ │ └── TowerOfHanoiController.java
│ │ ├── model
│ │ │ └── TowerOfHanoi.java
│ │ └── Rekursjon.java
│ │ ├── datastrukturer
│ │ ├── Stakk.java
│ │ ├── SirkelLinketListe.java
│ │ └── LenketListe.java
│ │ └── ovinger
│ │ ├── Sorting.java
│ │ └── Liste.java
└── test
│ └── java
│ └── eriksommer
│ └── webprog
│ ├── WebprogApplicationTests.java
│ ├── datastrukturer
│ ├── StakkTest.java
│ └── SirkelLinketListeTest.java
│ ├── ovinger
│ └── ListeTest.java
│ └── rekursjon
│ └── RekursjonTest.java
├── .mvn
└── wrapper
│ ├── maven-wrapper.jar
│ └── maven-wrapper.properties
├── .gitignore
├── README.md
└── pom.xml
/system.properties:
--------------------------------------------------------------------------------
1 | java.runtime.version=17
--------------------------------------------------------------------------------
/src/main/resources/static/index.css:
--------------------------------------------------------------------------------
1 | ol.number {
2 | list-style-type: lower-number;
3 | }
--------------------------------------------------------------------------------
/.mvn/wrapper/maven-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/erikssommer/web-programming-spring/HEAD/.mvn/wrapper/maven-wrapper.jar
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/eksamen/v19/Main.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.eksamen.v19;
2 |
3 | public class Main {
4 | }
5 |
--------------------------------------------------------------------------------
/src/main/resources/static/introduction/helloworld.js:
--------------------------------------------------------------------------------
1 | function visMelding(navn) {
2 | document.write("Hallo verden for: " + navn);
3 | }
--------------------------------------------------------------------------------
/src/main/resources/static/eksamen/v19/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Title
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/src/main/resources/static/klientTjener1/helloserver.js:
--------------------------------------------------------------------------------
1 | $(() => {
2 | $("#call").click(() => {
3 | const url = "/helloserver?name=" + $("#name").val();
4 |
5 | $.get(url, data => $("#hello").html(data));
6 | });
7 | });
8 |
--------------------------------------------------------------------------------
/.mvn/wrapper/maven-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip
2 | wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar
3 |
--------------------------------------------------------------------------------
/src/main/resources/application.properties:
--------------------------------------------------------------------------------
1 | spring.datasource.url=jdbc:h2:mem:testdb
2 | spring.h2.console.enabled=true
3 | spring.h2.console.path=/hemmelig-h2-console
4 | spring.h2.console.settings.web-allow-others=true
5 | spring.jpa.open-in-view=true
6 | server.error.whitelabel.enabled=false
--------------------------------------------------------------------------------
/src/main/resources/static/introduction/helloworld.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | HelloWorld
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/src/test/java/eriksommer/webprog/WebprogApplicationTests.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog;
2 |
3 | import org.junit.jupiter.api.Test;
4 | import org.springframework.boot.test.context.SpringBootTest;
5 |
6 | @SpringBootTest
7 | class WebprogApplicationTests {
8 |
9 | @Test
10 | void contextLoads() {
11 | }
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/resources/static/javascript2/plenum.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Gjennomgang av ukesoppgaver JavaScript2
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/generiskedatatyper/MobelButikken.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.generiskedatatyper;
2 |
3 | import java.util.List;
4 |
5 | public class MobelButikken {
6 | // oppgave 5
7 | public static void generiskSkrivUtAlle(List mobler) {
8 | for (T mobel : mobler) {
9 | System.out.println(mobel);
10 | }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/generiskedatatyper/MobelComparator.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.generiskedatatyper;
2 |
3 | import java.util.Comparator;
4 |
5 | public class MobelComparator implements Comparator {
6 |
7 | @Override
8 | public int compare(Mobel o1, Mobel o2) {
9 |
10 | return ((Mobel) o1).getNavn().compareTo(((Mobel) o2).getNavn());
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/resources/static/javascript2/js2.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Ukesoppgaver javascript 2
6 |
7 |
8 |
9 |
10 | Foreløpig bare output i console. Bruk chrome og inspiser
11 |
12 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/generiskedatatyper/MobelImpl.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.generiskedatatyper;
2 |
3 | public class MobelImpl extends Mobel {
4 |
5 | public MobelImpl(String navn, String type, int vekt, int pris, int nummer) {
6 | super(navn, type, vekt, pris, nummer);
7 | }
8 |
9 | public String toString() {
10 | return getNummer() + "_" + getNavn();
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/generiskedatatyper/Stol.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.generiskedatatyper;
2 |
3 | public class Stol extends Mobel {
4 |
5 | public Stol(String navn, String type, int vekt, int pris, int nummer) {
6 | super(navn, type, vekt, pris, nummer);
7 | }
8 |
9 | @Override
10 | public String toString() {
11 | return getNummer() + "_" + getNavn();
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/generiskedatatyper/BordComparator.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.generiskedatatyper;
2 |
3 | import java.util.Comparator;
4 |
5 | public class BordComparator implements Comparator {
6 |
7 | @Override
8 | public int compare(Mobel o1, Mobel o2) {
9 | Bord m1 = (Bord) o1;
10 | Bord m2 = (Bord) o2;
11 |
12 | return m1.getBen() - m2.getBen();
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/resources/static/klientTjener1/load.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Load
6 |
7 |
8 |
9 |
10 | Last valutaregister på server
11 |
12 | Tilbake til index
13 |
14 |
--------------------------------------------------------------------------------
/src/main/resources/static/klientTjener1/load.js:
--------------------------------------------------------------------------------
1 | import { apiKlinetTjener1 as api} from "../apiurl.js"
2 |
3 | $(() => {
4 | $("#last").click(() => {
5 | $.post(api + "/load", (data, status) => {
6 | console.log(status)
7 | if (status === "success") {
8 | alert("Valutaene er lastet");
9 | } else {
10 | alert("Noe gikk galt, se consollen")
11 | }
12 | });
13 | });
14 | });
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/klientTjener1/controller/HelloServerController.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.klientTjener1.controller;
2 |
3 | import org.springframework.web.bind.annotation.GetMapping;
4 | import org.springframework.web.bind.annotation.RestController;
5 |
6 | @RestController
7 | public class HelloServerController {
8 |
9 | @GetMapping("/helloserver")
10 | public String hello(String name) {
11 | return "Hallo fra " + name;
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/resources/static/jQuery/oving.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Øving
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/main/resources/static/klientTjener1/helloserver.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Title
6 |
7 |
8 |
9 |
10 | Første webprogram
11 | Skriv inn navnet :
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/main/resources/static/klientTjener1/temperatur.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Finn temperatur
6 |
7 |
8 |
9 |
10 | Finn gjennomsnitts temp i Oslo i gitt måned
11 | Skriv inn måned:
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | HELP.md
2 | target/
3 | !.mvn/wrapper/maven-wrapper.jar
4 | !**/src/main/**/target/
5 | !**/src/test/**/target/
6 |
7 | ### STS ###
8 | .apt_generated
9 | .classpath
10 | .factorypath
11 | .project
12 | .settings
13 | .springBeans
14 | .sts4-cache
15 |
16 | ### IntelliJ IDEA ###
17 | .idea
18 | *.iws
19 | *.iml
20 | *.ipr
21 |
22 | ### NetBeans ###
23 | /nbproject/private/
24 | /nbbuild/
25 | /dist/
26 | /nbdist/
27 | /.nb-gradle/
28 | build/
29 | !**/src/main/**/build/
30 | !**/src/test/**/build/
31 |
32 | ### VS Code ###
33 | .vscode/
34 |
--------------------------------------------------------------------------------
/src/main/resources/static/javascript3/oving.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Øving
6 |
7 |
8 |
9 |
10 | Input:
11 |
12 |
13 |
14 | Navnobjekt:
15 |
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/WebprogApplication.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 | import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;
6 |
7 | @SpringBootApplication(exclude={SecurityAutoConfiguration.class})
8 | public class WebprogApplication {
9 |
10 | public static void main(String[] args) {
11 | SpringApplication.run(WebprogApplication.class, args);
12 | }
13 |
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/resources/static/klientTjener1/temperatur.js:
--------------------------------------------------------------------------------
1 | import { apiKlinetTjener1 as api} from "../apiurl.js"
2 |
3 | $(() => {
4 | $("#beregn").click(() => {
5 | const maned = $("#maned").val();
6 |
7 | $.get(api + "/hentTemp?mnd=" + maned, temp => {
8 | if (temp !== 0) {
9 | $("#melding").html("Det var en gjennomsnittstemperatur " +
10 | " på " + temp + " grader i " + maned);
11 | } else {
12 | $("#melding").html("Du har oppgitt ugyldig månedsnavn");
13 | }
14 | });
15 | });
16 | });
--------------------------------------------------------------------------------
/src/test/java/eriksommer/webprog/datastrukturer/StakkTest.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.datastrukturer;
2 |
3 | import org.junit.jupiter.api.Test;
4 |
5 | import static org.junit.jupiter.api.Assertions.*;
6 |
7 | class StakkTest {
8 |
9 | @Test
10 | void stack() {
11 | Stakk stakk = new Stakk();
12 |
13 | stakk.push(8);
14 | stakk.push(7);
15 | stakk.push(3);
16 |
17 | stakk.skrivUt();
18 |
19 | System.out.println();
20 |
21 | System.out.println(stakk.peek());
22 |
23 | stakk.pop();
24 |
25 | stakk.skrivUt();
26 | }
27 | }
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/ErrorHandler.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog;
2 |
3 | import org.springframework.boot.web.servlet.error.ErrorController;
4 | import org.springframework.stereotype.Controller;
5 | import org.springframework.web.bind.annotation.RequestMapping;
6 |
7 | @Controller
8 | public class ErrorHandler implements ErrorController {
9 |
10 | private static final String PATH = "/error";
11 |
12 | @RequestMapping(value = PATH)
13 | public String error(){
14 | return "error";
15 | }
16 |
17 | public String getErrorPath() {
18 | return PATH;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/resources/static/eksamen/v20/logginn.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Title
6 |
7 |
8 | Logg inn
9 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/src/main/resources/static/apiurl.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Samling av api-konstanter
3 | * @type {string}
4 | */
5 |
6 | export const apiKlinetTjener1 = "/api/klienttjener1";
7 | export const apiLagringServer = "/api/lagringserver";
8 | export const apiNedtrekkslister = "/api/nedtrekkslister";
9 | export const apiRekursjon = "/api/rekursjon";
10 | export const apiRelasjonsdatabase1 = "/api/relasjonsdatabase1";
11 | export const apiRelasjonsdatabase2 = "/api/relasjonsdatabase2";
12 | export const apiInputvalidering = "/api/inputvalidering";
13 | export const apiSesjoner = "/api/sesjoner";
14 | export const apiSikkerhet = "/api/sikkerhet";
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/generiskedatatyper/Bord.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.generiskedatatyper;
2 |
3 | public class Bord extends Mobel {
4 |
5 | private int ben;
6 |
7 | public Bord(String navn, String type, int vekt, int pris, int nummer, int ben) {
8 | super(navn, type, vekt, pris, nummer);
9 | this.ben = ben;
10 | }
11 |
12 | public int getBen() {
13 | return ben;
14 | }
15 |
16 | public void setBen(int ben) {
17 | this.ben = ben;
18 | }
19 |
20 | @Override
21 | public String toString() {
22 | return getNummer() + "_" + getNavn() + "_" + getBen();
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/klientTjener1/model/Valuta.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.klientTjener1.model;
2 |
3 | public class Valuta {
4 | private String sort;
5 | private double kurs;
6 |
7 | public Valuta(String sort, double kurs) {
8 | this.sort = sort;
9 | this.kurs = kurs;
10 | }
11 |
12 | public String getSort() {
13 | return sort;
14 | }
15 |
16 | public void setSort(String sort) {
17 | this.sort = sort;
18 | }
19 |
20 | public double getKurs() {
21 | return kurs;
22 | }
23 |
24 | public void setKurs(double kurs) {
25 | this.kurs = kurs;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/nedtrekkslister/model/Bil.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.nedtrekkslister.model;
2 |
3 | public class Bil {
4 | private String merke;
5 | private String type;
6 |
7 | public Bil(String merke, String type) {
8 | this.merke = merke;
9 | this.type = type;
10 | }
11 |
12 | public String getMerke() {
13 | return merke;
14 | }
15 |
16 | public void setMerke(String merke) {
17 | this.merke = merke;
18 | }
19 |
20 | public String getType() {
21 | return type;
22 | }
23 |
24 | public void setType(String type) {
25 | this.type = type;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/klientTjener1/model/Belop.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.klientTjener1.model;
2 |
3 | public class Belop {
4 | private String sort;
5 | private double verdi;
6 |
7 | public Belop(String sort, double verdi) {
8 | this.sort = sort;
9 | this.verdi = verdi;
10 | }
11 |
12 | public String getSort() {
13 | return sort;
14 | }
15 |
16 | public void setSort(String sort) {
17 | this.sort = sort;
18 | }
19 |
20 | public double getVerdi() {
21 | return verdi;
22 | }
23 |
24 | public void setVerdi(double verdi) {
25 | this.verdi = verdi;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/sesjoner/model/Bil.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.sesjoner.model;
2 |
3 | public class Bil {
4 | private String merke;
5 | private String type;
6 |
7 | public Bil(String merke, String type) {
8 | this.merke = merke;
9 | this.type = type;
10 | }
11 |
12 | public Bil() {
13 | }
14 |
15 | public String getMerke() {
16 | return merke;
17 | }
18 |
19 | public void setMerke(String merke) {
20 | this.merke = merke;
21 | }
22 |
23 | public String getType() {
24 | return type;
25 | }
26 |
27 | public void setType(String type) {
28 | this.type = type;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/sikkerhet/model/Bil.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.sikkerhet.model;
2 |
3 | public class Bil {
4 | private String merke;
5 | private String type;
6 |
7 | public Bil(String merke, String type) {
8 | this.merke = merke;
9 | this.type = type;
10 | }
11 |
12 | public Bil() {
13 | }
14 |
15 | public String getMerke() {
16 | return merke;
17 | }
18 |
19 | public void setMerke(String merke) {
20 | this.merke = merke;
21 | }
22 |
23 | public String getType() {
24 | return type;
25 | }
26 |
27 | public void setType(String type) {
28 | this.type = type;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/resources/static/rekursjon/towerofhanoi.js:
--------------------------------------------------------------------------------
1 | import { apiRekursjon as api} from "../apiurl.js"
2 |
3 | $(() => {
4 | $("#solveTower").click(() => {
5 | const tower = {
6 | rings: $("#rings").val(),
7 | fromRod: $("#fromRod").val(),
8 | toRod: $("#toRod").val(),
9 | tmpRod: $("#tmpRod").val()
10 | };
11 |
12 | $.post(api + "/hanoi", tower, () => $.get(api + "/hanoi", solution => format(solution)));
13 | });
14 | });
15 |
16 | const format = (solution) => {
17 | let msg = "Flytt
";
18 | for (let line of solution) {
19 | msg += line + "
";
20 | }
21 | $("#solution").html(msg);
22 | }
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/inputvalidering/model/Bil.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.inputvalidering.model;
2 |
3 | public class Bil {
4 | private String merke;
5 | private String type;
6 |
7 | public Bil(String merke, String type) {
8 | this.merke = merke;
9 | this.type = type;
10 | }
11 |
12 | public Bil() {
13 | }
14 |
15 | public String getMerke() {
16 | return merke;
17 | }
18 |
19 | public void setMerke(String merke) {
20 | this.merke = merke;
21 | }
22 |
23 | public String getType() {
24 | return type;
25 | }
26 |
27 | public void setType(String type) {
28 | this.type = type;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/relasjonsdatabase1/model/Bil.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.relasjonsdatabase1.model;
2 |
3 | public class Bil {
4 | private String merke;
5 | private String type;
6 |
7 | public Bil(String merke, String type) {
8 | this.merke = merke;
9 | this.type = type;
10 | }
11 |
12 | public Bil() {}
13 |
14 | public String getMerke() {
15 | return merke;
16 | }
17 |
18 | public void setMerke(String merke) {
19 | this.merke = merke;
20 | }
21 |
22 | public String getType() {
23 | return type;
24 | }
25 |
26 | public void setType(String type) {
27 | this.type = type;
28 | }
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/resources/static/klientTjener1/kalkulator.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Title
6 |
7 |
8 |
9 |
10 | Oppgave 3
11 | Tall 1:
12 |
13 | Tall 2:
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/src/main/resources/static/jQuery/oving.js:
--------------------------------------------------------------------------------
1 | const liste = [];
2 |
3 | $(function () {
4 | $("#knapp").click(function () {
5 | $("#melding").html("Hallo " + $("#inn").val() + "
");
6 | });
7 |
8 | $("#inn").change(function () {
9 | $("#navn").text($("#inn").val());
10 | })
11 |
12 | $("#beregn").click(function () {
13 | liste.push(lagObjekt("Erik", 22, "Male"));
14 |
15 | for (let person of liste) {
16 | console.log(person.navn + " " + person.alder + " " + person.kjonn);
17 | }
18 | })
19 | });
20 |
21 | function lagObjekt(navn, alder, kjonn) {
22 | return {
23 | navn,
24 | alder,
25 | kjonn
26 | };
27 | }
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/eksamen/v20/Bruker.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.eksamen.v20;
2 |
3 | public class Bruker {
4 | private String epost;
5 | private String passord;
6 |
7 | public Bruker(String epost, String passord) {
8 | this.epost = epost;
9 | this.passord = passord;
10 | }
11 |
12 | public Bruker(){}
13 |
14 | public String getEpost() {
15 | return epost;
16 | }
17 |
18 | public void setEpost(String epost) {
19 | this.epost = epost;
20 | }
21 |
22 | public String getPassord() {
23 | return passord;
24 | }
25 |
26 | public void setPassord(String passord) {
27 | this.passord = passord;
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/lagringserver/repository/AppRepository.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.lagringserver.repository;
2 |
3 | import eriksommer.webprog.lagringserver.model.Motorvogn;
4 | import org.springframework.stereotype.Repository;
5 |
6 | import java.util.ArrayList;
7 |
8 | @Repository
9 | public class AppRepository {
10 | private final ArrayList motorvognliste = new ArrayList<>();
11 |
12 | public void leggInn(Motorvogn motorvogn) {
13 | motorvognliste.add(motorvogn);
14 | }
15 |
16 | public ArrayList hentAlle() {
17 | return motorvognliste;
18 | }
19 |
20 | public void slettAlle() {
21 | motorvognliste.clear();
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/relasjonsdatabase2/model/Bil.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.relasjonsdatabase2.model;
2 |
3 | public class Bil {
4 | private String merke;
5 | private String type;
6 |
7 | public Bil(String merke, String type) {
8 | this.merke = merke;
9 | this.type = type;
10 | }
11 |
12 | public Bil() {
13 | }
14 |
15 | public String getMerke() {
16 | return merke;
17 | }
18 |
19 | public void setMerke(String merke) {
20 | this.merke = merke;
21 | }
22 |
23 | public String getType() {
24 | return type;
25 | }
26 |
27 | public void setType(String type) {
28 | this.type = type;
29 | }
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/sikkerhet/service/Kryptering.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.sikkerhet.service;
2 |
3 | import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
4 | import org.springframework.stereotype.Service;
5 |
6 | @Service
7 | public class Kryptering {
8 |
9 | private final BCryptPasswordEncoder bCrypt;
10 |
11 | public Kryptering(){
12 | bCrypt = new BCryptPasswordEncoder(15);
13 | }
14 |
15 | public String krypterPassord(String passord) {
16 | return bCrypt.encode(passord);
17 | }
18 |
19 | public boolean sjekkPassord(String passord, String hashPassord) {
20 |
21 | return bCrypt.matches(passord, hashPassord);
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/src/main/resources/static/klientTjener1/index.js:
--------------------------------------------------------------------------------
1 | import { apiKlinetTjener1 as api} from "../apiurl.js"
2 |
3 | $(() => {
4 | $("#hentBelop").click(() => {
5 | const sort = $("#sort").val();
6 | const verdi = $("#verdi").val();
7 |
8 | const belop = {
9 | sort: sort,
10 | verdi: verdi
11 | }
12 |
13 | $.get(api + "/beregnKurs", belop, nok => {
14 | if (nok !== 0.0) {
15 | const melding = verdi + " i " + sort + " blir: " + nok + "kr";
16 | $("#valuta").html(melding);
17 | } else {
18 | $("#valuta").html("Du skrev inn ugyldig valutasort");
19 | }
20 | });
21 | });
22 | });
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/nedtrekkslister/repository/MotorvognRepository.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.nedtrekkslister.repository;
2 |
3 | import eriksommer.webprog.nedtrekkslister.model.Motorvogn;
4 | import org.springframework.stereotype.Repository;
5 |
6 | import java.util.ArrayList;
7 |
8 | @Repository
9 | public class MotorvognRepository {
10 | private final ArrayList motorvognliste = new ArrayList<>();
11 |
12 | public void leggInn(Motorvogn motorvogn) {
13 | motorvognliste.add(motorvogn);
14 | }
15 |
16 | public ArrayList hentAlle() {
17 | return motorvognliste;
18 | }
19 |
20 | public void slettAlle() {
21 | motorvognliste.clear();
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/src/main/resources/static/eksamen/v20/index.js:
--------------------------------------------------------------------------------
1 | $(() => {
2 | $("#registrer").click(() => {
3 | const skiloper = {
4 | fornavn: $("#fornavn").val(),
5 | etternavn: $("#etternavn").val(),
6 | klubb: $("#klubb").val(),
7 | epost: $("#e-post").val(),
8 | passord: $("#passord").val()
9 | }
10 |
11 | $.post("/api/eksamen/v20/langrenn", skiloper, OK => {
12 | if (OK) {
13 | skrivUt();
14 | } else {
15 | $("#feil").html("Feil i insetting i database")
16 | }
17 | })
18 | })
19 | })
20 |
21 | const skrivUt = () => {
22 | // Kalle på databasen for aa få tak i data lagret og formatere det ut.
23 | }
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/klientTjener1/controller/TempController.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.klientTjener1.controller;
2 |
3 | import eriksommer.webprog.klientTjener1.service.TempService;
4 | import org.springframework.beans.factory.annotation.Autowired;
5 | import org.springframework.web.bind.annotation.GetMapping;
6 | import org.springframework.web.bind.annotation.RequestMapping;
7 | import org.springframework.web.bind.annotation.RestController;
8 |
9 | @RestController
10 | @RequestMapping("/api/klienttjener1")
11 | public class TempController {
12 |
13 | @Autowired
14 | TempService service;
15 |
16 | @GetMapping("/hentTemp")
17 | public int calculate(String mnd) {
18 | return service.getTemp(mnd);
19 | }
20 |
21 | }
22 |
--------------------------------------------------------------------------------
/src/test/java/eriksommer/webprog/ovinger/ListeTest.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.ovinger;
2 |
3 | import org.junit.jupiter.api.Test;
4 |
5 | import static org.junit.jupiter.api.Assertions.*;
6 |
7 | class ListeTest {
8 |
9 | @Test
10 | void listetest() {
11 | Liste liste = new Liste();
12 |
13 | liste.settInn(3);
14 | liste.settInn(2);
15 | liste.settInn(10);
16 |
17 | System.out.println(liste.finn(2));
18 |
19 | liste.skrivUt();
20 | System.out.println();
21 | System.out.println("Antall noder er: " + liste.antall());
22 |
23 | liste.slettNode(2);
24 |
25 | liste.skrivUt();
26 | System.out.println();
27 | System.out.println("Antall noder er: " + liste.antall());
28 | }
29 | }
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/klientTjener1/service/KalkulatorService.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.klientTjener1.service;
2 |
3 | import org.springframework.stereotype.Service;
4 |
5 | @Service
6 | public class KalkulatorService {
7 |
8 | public double addere(double tall1, double tall2) throws Exception { // Usikker på hvilket avvik som kastes -> safe
9 | return tall1 + tall2;
10 | }
11 |
12 | public double subtrahere(double tall1, double tall2) throws Exception {
13 | return tall1 - tall2;
14 | }
15 |
16 | public double multiplisere(double tall1, double tall2) throws Exception {
17 | return tall1 * tall2;
18 | }
19 |
20 | public double dividere(double tall1, double tall2) throws Exception {
21 | return tall1 / tall2;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/src/main/resources/static/klientTjener1/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Index
6 |
7 |
8 |
9 |
10 | Beregn norske kroner
11 | Last valutaer
12 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/src/main/resources/static/rekursjon/towerofhanoi.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Tårnet i Hanoi
6 |
7 |
8 |
9 |
10 | Legg inn info om tårnet
11 | Skriv inn antall ringer :
12 | Skriv inn startstav :
13 | Skriv inn sluttstav :
14 | Skriv inn midlertidig stav :
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/src/test/java/eriksommer/webprog/datastrukturer/SirkelLinketListeTest.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.datastrukturer;
2 |
3 | import org.junit.jupiter.api.Test;
4 |
5 | import static org.junit.jupiter.api.Assertions.*;
6 |
7 | class SirkelLinketListeTest {
8 |
9 | @Test
10 | void sirkelLinketListe() {
11 | SirkelLinketListe liste = new SirkelLinketListe();
12 |
13 | liste.leggTilNode(8);
14 | liste.leggTilNode(7);
15 | liste.leggTilNode(4);
16 | liste.leggTilNode(5);
17 | liste.leggTilNode(3);
18 |
19 | liste.skrivUt();
20 |
21 | System.out.println();
22 |
23 | System.out.println(liste.inneholderNode(7));
24 |
25 | liste.slettNode(7);
26 |
27 | System.out.println(liste.inneholderNode(7));
28 |
29 | liste.skrivUt();
30 |
31 | System.out.println();
32 | }
33 | }
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/nedtrekkslister/controller/BilController.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.nedtrekkslister.controller;
2 |
3 | import eriksommer.webprog.nedtrekkslister.model.Bil;
4 | import eriksommer.webprog.nedtrekkslister.repository.BilRepository;
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.web.bind.annotation.*;
7 |
8 | import java.util.ArrayList;
9 |
10 | @RestController
11 | @RequestMapping("/api/nedtrekkslister/")
12 | public class BilController {
13 | @Autowired
14 | BilRepository repo;
15 |
16 | @PostMapping("/bil")
17 | public void lagre(Bil motorvogn) {
18 | repo.leggInn(motorvogn);
19 | }
20 |
21 | @GetMapping("/bil")
22 | public ArrayList hent() {
23 | return repo.hentAlle();
24 | }
25 |
26 | @DeleteMapping("/bil")
27 | public void slett() {
28 | repo.slettAlle();
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/lagringserver/controller/Controller.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.lagringserver.controller;
2 |
3 | import eriksommer.webprog.lagringserver.model.Motorvogn;
4 | import eriksommer.webprog.lagringserver.repository.AppRepository;
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.web.bind.annotation.*;
7 |
8 | import java.util.ArrayList;
9 |
10 | @RestController
11 | @RequestMapping("/api/lagringserver/")
12 | public class Controller {
13 |
14 | @Autowired
15 | AppRepository repo;
16 |
17 | @PostMapping("/motor")
18 | public void lagre(Motorvogn motorvogn) {
19 | repo.leggInn(motorvogn);
20 | }
21 |
22 | @GetMapping("/motor")
23 | public ArrayList hent() {
24 | return repo.hentAlle();
25 | }
26 |
27 | @DeleteMapping("/motor")
28 | public void slett() {
29 | repo.slettAlle();
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/src/main/resources/static/inputvalidering/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Motorvognregister
9 |
10 |
11 |
12 |
13 |
14 |
Alle bilene:
15 |
16 |
Registrere
17 |
18 |
19 |
20 |
21 |
22 | Har innført en ID på Motorvognregisterert som er primærnøkkel isteden for personnr!
23 |
24 |
25 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/nedtrekkslister/controller/MotorvognController.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.nedtrekkslister.controller;
2 |
3 | import eriksommer.webprog.nedtrekkslister.model.Motorvogn;
4 | import eriksommer.webprog.nedtrekkslister.repository.MotorvognRepository;
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.web.bind.annotation.*;
7 |
8 | import java.util.ArrayList;
9 |
10 | @RestController
11 | @RequestMapping("/api/nedtrekkslister/")
12 | public class MotorvognController {
13 |
14 | @Autowired
15 | MotorvognRepository repo;
16 |
17 | @PostMapping("/motor")
18 | public void lagre(Motorvogn motorvogn) {
19 | repo.leggInn(motorvogn);
20 | }
21 |
22 | @GetMapping("/motor")
23 | public ArrayList hent() {
24 | return repo.hentAlle();
25 | }
26 |
27 | @DeleteMapping("/motor")
28 | public void slett() {
29 | repo.slettAlle();
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/rekursjon/service/TowerOfHanoiService.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.rekursjon.service;
2 |
3 | import org.springframework.stereotype.Service;
4 |
5 | import java.util.ArrayList;
6 |
7 | @Service
8 | public class TowerOfHanoiService {
9 |
10 | private final ArrayList solution = new ArrayList<>();
11 |
12 | public ArrayList getSolution() {
13 | return solution;
14 | }
15 |
16 | public void solvTowerOfHanoi(int rings, int fromRod, int toRod, int tmpRod) {
17 | if (rings == 1) {
18 | System.out.println(fromRod + " --> " + toRod);
19 | solution.add(fromRod + " --> " + toRod);
20 | return;
21 | }
22 |
23 | solvTowerOfHanoi(rings - 1, fromRod, tmpRod, toRod);
24 | System.out.println(fromRod + " --> " + toRod);
25 | solution.add(fromRod + " --> " + toRod);
26 | solvTowerOfHanoi(rings - 1, tmpRod, toRod, fromRod);
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/src/main/resources/static/sesjoner/index.js:
--------------------------------------------------------------------------------
1 | import {apiSesjoner as api} from "../apiurl.js"
2 | import validering from "./validering.js"
3 |
4 | $(() => {
5 | $("#loggInn").click(() => {
6 | if (validering.loginn()) {
7 | const url = "/loggInn?brukernavn=" + $("#brukernavn").val() + "&passord=" + $("#passord").val();
8 | $.get(api + url, OK => {
9 | if (OK) {
10 | window.location.href = "/sesjoner/liste.html";
11 | } else {
12 | $("#feil").html("Feil i brukernavn eller passord");
13 | }
14 | })
15 | .fail(jqXHR => {
16 | const json = $.parseJSON(jqXHR.responseText);
17 | $("#feil").html(json.message);
18 | });
19 | }
20 | });
21 |
22 | $("#brukernavn").on("change", () => validering.brukernavn());
23 | $("#passord").on("change", () => validering.passord());
24 | });
25 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/sikkerhet/model/Bruker.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.sikkerhet.model;
2 |
3 | public class Bruker {
4 | private int id;
5 | private String brukernavn;
6 | private String passord;
7 |
8 | public Bruker(int id, String brukernavn, String passord) {
9 | this.id = id;
10 | this.brukernavn = brukernavn;
11 | this.passord = passord;
12 | }
13 |
14 | public Bruker() {
15 | }
16 |
17 | public int getId() {
18 | return id;
19 | }
20 |
21 | public void setId(int id) {
22 | this.id = id;
23 | }
24 |
25 | public String getBrukernavn() {
26 | return brukernavn;
27 | }
28 |
29 | public void setBrukernavn(String brukernavn) {
30 | this.brukernavn = brukernavn;
31 | }
32 |
33 | public String getPassord() {
34 | return passord;
35 | }
36 |
37 | public void setPassord(String passord) {
38 | this.passord = passord;
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/src/main/resources/static/sesjoner/liste.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Motorvognregister
9 |
10 |
11 |
12 |
13 |
14 |
Alle bilene:
15 |
16 |
Registrere
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/main/resources/static/sikkerhet/liste.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Motorvognregister
9 |
10 |
11 |
12 |
13 |
14 |
Alle bilene:
15 |
16 |
Registrere
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/klientTjener1/controller/ValutaController.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.klientTjener1.controller;
2 |
3 | import eriksommer.webprog.klientTjener1.model.Belop;
4 | import eriksommer.webprog.klientTjener1.service.ValutaService;
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.web.bind.annotation.GetMapping;
7 | import org.springframework.web.bind.annotation.PostMapping;
8 | import org.springframework.web.bind.annotation.RequestMapping;
9 | import org.springframework.web.bind.annotation.RestController;
10 |
11 | @RestController
12 | @RequestMapping("/api/klienttjener1/")
13 | public class ValutaController {
14 |
15 | @Autowired
16 | ValutaService valutaService;
17 |
18 | @PostMapping("/load")
19 | public void load(){
20 | valutaService.loadData();
21 | }
22 |
23 | @GetMapping("/beregnKurs")
24 | public double calculate(Belop belop){
25 | return valutaService.beregn(belop);
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/klientTjener1/service/TempService.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.klientTjener1.service;
2 |
3 | import org.springframework.stereotype.Service;
4 |
5 | @Service
6 | public class TempService {
7 |
8 | private final Integer[] tempArray = new Integer[]{-3,-2,2,7,12,16,18,17,12,7,3,-2};
9 |
10 | public int getTemp(String mnd){
11 | return switch (mnd) {
12 | case "Januar" -> tempArray[0];
13 | case "Februar" -> tempArray[1];
14 | case "Mars" -> tempArray[2];
15 | case "April" -> tempArray[3];
16 | case "Mai" -> tempArray[4];
17 | case "Juni" -> tempArray[5];
18 | case "Juli" -> tempArray[6];
19 | case "August" -> tempArray[7];
20 | case "September" -> tempArray[8];
21 | case "Oktober" -> tempArray[9];
22 | case "November" -> tempArray[10];
23 | case "Desember" -> tempArray[11];
24 | default -> 0;
25 | };
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/src/main/resources/static/relasjonsdatabase2/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Motorvognregister
9 |
10 |
11 |
12 |
13 |
14 |
Alle bilene:
15 |
16 |
Registrere
17 |
18 |
19 |
20 |
21 |
22 | Har innført en ID på Motorvognregisterert som er primærnøkkel isteden for personnr!
23 |
24 |
25 |
--------------------------------------------------------------------------------
/src/test/java/eriksommer/webprog/rekursjon/RekursjonTest.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.rekursjon;
2 |
3 | import org.junit.jupiter.api.Test;
4 |
5 | import static org.junit.jupiter.api.Assertions.*;
6 |
7 | class RekursjonTest {
8 |
9 | @Test
10 | void fac() {
11 | assertEquals(Rekursjon.fac(5), 120);
12 | }
13 |
14 | @Test
15 | void sum() {
16 | assertEquals(Rekursjon.sum(10), 55);
17 | }
18 |
19 | @Test
20 | void iterativSum() {
21 | assertEquals(Rekursjon.iterativSum(10), 55);
22 | }
23 |
24 | @Test
25 | void binsok() {
26 | int [] liste = {2,5,6,8,9,23,45,56,64,67,89};
27 | int nokkel = 56;
28 | int svar = Rekursjon.binsok(liste, nokkel, 0, liste.length-1);
29 | int riktigSvar = 7;
30 |
31 | assertEquals(svar, riktigSvar);
32 |
33 | nokkel = 3;
34 |
35 | svar = Rekursjon.binsok(liste, nokkel, 0, liste.length-1);
36 | riktigSvar = -1;
37 |
38 | assertEquals(svar, riktigSvar);
39 | }
40 | }
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/klientTjener1/service/ValutaService.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.klientTjener1.service;
2 |
3 | import eriksommer.webprog.klientTjener1.model.Belop;
4 | import eriksommer.webprog.klientTjener1.model.Valuta;
5 | import org.springframework.stereotype.Service;
6 |
7 | import java.util.ArrayList;
8 |
9 | @Service
10 | public class ValutaService {
11 |
12 | private final ArrayList valutaRegister = new ArrayList<>();
13 |
14 | public void loadData(){
15 | Valuta sek = new Valuta("SEK", 0.85);
16 | Valuta usd = new Valuta("USD", 8.85);
17 | Valuta eur = new Valuta("EUR", 9.56);
18 |
19 | valutaRegister.add(sek);
20 | valutaRegister.add(usd);
21 | valutaRegister.add(eur);
22 | }
23 |
24 | public double beregn(Belop belop){
25 | for (Valuta valuta : valutaRegister){
26 | if (valuta.getSort().equals(belop.getSort())){
27 | return valuta.getKurs() * belop.getVerdi();
28 | }
29 | }
30 | return 0.0;
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/src/main/resources/static/eksamen/v20/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Title
6 |
10 |
11 |
12 |
13 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/src/main/resources/static/javascript3/oving.js:
--------------------------------------------------------------------------------
1 | const liste = [];
2 | const objekter = [];
3 |
4 | function beregn() {
5 | document.getElementById("melding").innerHTML = "";
6 |
7 | let input = document.getElementById("valg").value;
8 | document.getElementById("valg").value = "";
9 |
10 | liste.push(input);
11 |
12 | for (let i = 0; i < liste.length; i++) {
13 | document.getElementById("melding").innerHTML += liste[i] + "
";
14 | }
15 |
16 | for (let tekst of liste) {
17 | document.getElementById("melding").innerHTML += tekst + "
";
18 | }
19 | }
20 |
21 | function objekt() {
22 | document.getElementById("melding").innerHTML = "";
23 |
24 | const objekt1 = {
25 | navn: document.getElementById("objekt").value
26 | }
27 |
28 | objekter.push(objekt1);
29 |
30 | for (let i = 0; i < objekter.length; i++) {
31 | document.getElementById("melding").innerHTML += objekter[i].navn + "
";
32 | }
33 |
34 | for (let objekt of objekter) {
35 | document.getElementById("melding").innerHTML += objekt.navn + "
";
36 | }
37 | }
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/rekursjon/controller/TowerOfHanoiController.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.rekursjon.controller;
2 |
3 | import eriksommer.webprog.rekursjon.model.TowerOfHanoi;
4 | import eriksommer.webprog.rekursjon.service.TowerOfHanoiService;
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.web.bind.annotation.GetMapping;
7 | import org.springframework.web.bind.annotation.PostMapping;
8 | import org.springframework.web.bind.annotation.RequestMapping;
9 | import org.springframework.web.bind.annotation.RestController;
10 |
11 | import java.util.ArrayList;
12 |
13 | @RestController
14 | @RequestMapping("/api/rekursjon/")
15 | public class TowerOfHanoiController {
16 | @Autowired
17 | TowerOfHanoiService service;
18 |
19 | @PostMapping("/hanoi")
20 | public void solve(TowerOfHanoi toh){
21 | service.solvTowerOfHanoi(toh.getRings(), toh.getFromRod(), toh.getToRod(), toh.getTmpRod());
22 | }
23 |
24 | @GetMapping("/hanoi")
25 | public ArrayList getSolution(){
26 | return service.getSolution();
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/rekursjon/model/TowerOfHanoi.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.rekursjon.model;
2 |
3 | public class TowerOfHanoi {
4 | private int rings;
5 | private int fromRod;
6 | private int toRod;
7 | private int tmpRod;
8 |
9 | public TowerOfHanoi(int rings, int fromRod, int toRod, int tmpRod) {
10 | this.rings = rings;
11 | this.fromRod = fromRod;
12 | this.toRod = toRod;
13 | this.tmpRod = tmpRod;
14 | }
15 |
16 | public int getRings() {
17 | return rings;
18 | }
19 |
20 | public void setRings(int rings) {
21 | this.rings = rings;
22 | }
23 |
24 | public int getFromRod() {
25 | return fromRod;
26 | }
27 |
28 | public void setFromRod(int fromRod) {
29 | this.fromRod = fromRod;
30 | }
31 |
32 | public int getToRod() {
33 | return toRod;
34 | }
35 |
36 | public void setToRod(int toRod) {
37 | this.toRod = toRod;
38 | }
39 |
40 | public int getTmpRod() {
41 | return tmpRod;
42 | }
43 |
44 | public void setTmpRod(int tmpRod) {
45 | this.tmpRod = tmpRod;
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/src/main/resources/static/javascript1/js1.js:
--------------------------------------------------------------------------------
1 | //Oppgave 1
2 | function heiVerden() {
3 | document.write("Hei verden");
4 | }
5 |
6 | //Oppgave 2
7 | function heiVerdenAlert() {
8 | alert("Hei verden");
9 | }
10 |
11 | //Oppgave 3
12 | function skrivMelding(input) {
13 | document.write(input);
14 | }
15 |
16 | //Oppgave 4
17 | function writeAlert(data) {
18 | alert(data);
19 | }
20 |
21 | //Oppgave 5
22 | function writeConsole(data) {
23 | console.log(data);
24 | }
25 |
26 | //Oppgave 6
27 | function skrivMeldingFarget(input) {
28 | document.write(input.fontcolor("red"));
29 | }
30 |
31 | //Oppgave 7
32 | function tilStorBokstav(input) {
33 | document.write(input.toUpperCase());
34 | }
35 |
36 | //Oppgave 8
37 | function skrivUtEn() {
38 | const ut = 1;
39 | console.log(ut);
40 | }
41 |
42 | //Oppgave 9
43 | let ut = 0;
44 |
45 | function tellOpp() {
46 | ut += 1;
47 | console.log(ut);
48 | }
49 |
50 | //Oppgave 10
51 | let out = 0;
52 |
53 | function tellOppMelding() {
54 | out += 1;
55 | let meldingP1 = "Du har trykket på knappen ";
56 | let meldingP2 = " ganger.";
57 | console.log(meldingP1 + out + meldingP2);
58 | }
59 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/rekursjon/Rekursjon.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.rekursjon;
2 |
3 | public class Rekursjon {
4 | public static int fac(int tall) {
5 | if (tall < 0) {
6 | return -1;
7 | }
8 | if (tall == 0) {
9 | return 1;
10 | }
11 | return tall * fac(tall - 1);
12 | }
13 |
14 | public static int sum(int tall) {
15 | if (tall == 1) {
16 | return 1;
17 | }
18 | return tall + sum(tall - 1);
19 | }
20 |
21 | public static int iterativSum(int tall) {
22 | int sum = 0;
23 |
24 | for (int i = 0; i <= tall; i++) {
25 | sum += i;
26 | }
27 | return sum;
28 | }
29 |
30 | public static int binsok(int[] listen, int nokkel, int venstre, int hoyre) {
31 | if (venstre <= hoyre) {
32 | int split = (venstre + hoyre) / 2;
33 | if (listen[split] > nokkel) {
34 | return binsok(listen, nokkel, venstre, split - 1);
35 | } else if (listen[split] < nokkel) {
36 | return binsok(listen, nokkel, split + 1, hoyre);
37 | } else return split; // Funnet!!
38 | } else return -1;
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/src/main/resources/static/eksamen/v20/logginn.js:
--------------------------------------------------------------------------------
1 | $(() => {
2 | $("#loggInn").click(() => {
3 | const info = {
4 | epost: $("#e-post").val(),
5 | passord: $("#passord").val()
6 | }
7 |
8 | if (validerBrukernavn(info.epost) && validerPassord(info.passord)) {
9 | $.post("/api/eksamen/v20/logginn", info, OK => {
10 | $("#loggetInn").html("Verifisering gikk fint")
11 | })
12 | }
13 | })
14 | })
15 |
16 | const validerBrukernavn = brukernavn => {
17 | const regexp = /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}/;
18 | const ok = regexp.test(brukernavn);
19 | if (!ok) {
20 | $("#loggetInn").html("Navnet må bestå av 2 til 20 bokstaver");
21 | return false;
22 | } else {
23 | $("#loggetInn").html("");
24 | return true;
25 | }
26 | }
27 |
28 | const validerPassord = passord => {
29 | const regexp = /(?=.*[A-ZÆØÅa-zæøå])(?=.*\d)[A-ZÆØÅa-zæøå\d]{6,}/;
30 | const ok = regexp.test(passord);
31 | if (!ok) {
32 | $("#loggetInn").html("Passordet må være minimum 8 tegn, minst en bokstav og et tall");
33 | return false;
34 | } else {
35 | $("#loggetInn").html("");
36 | return true;
37 | }
38 | }
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/generiskedatatyper/MobelRegister.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.generiskedatatyper;
2 |
3 | import java.util.ArrayList;
4 | import java.util.Collections;
5 | import java.util.List;
6 |
7 | public class MobelRegister {
8 | private final List mobler;
9 |
10 | public MobelRegister() {
11 | mobler = new ArrayList<>();
12 | }
13 |
14 | public void addMobel(T mobel) {
15 | mobler.add(mobel);
16 | }
17 |
18 | public T getMobel(int nummer) {
19 | for (T mobel : mobler) {
20 | if (mobel.getNummer() == nummer)
21 | return mobel;
22 | }
23 | return null;
24 | }
25 |
26 | public void slettMobel(int nummer) {
27 | mobler.removeIf(mobel -> mobel.getNummer() == nummer);
28 | }
29 |
30 | public void skrivUtAlle() {
31 | for (Mobel mobel : mobler) {
32 | System.out.println(mobel);
33 | }
34 | }
35 |
36 | public void sorter() {
37 | Collections.sort(mobler);
38 | }
39 |
40 | public void sorterMedComparator() {
41 | mobler.sort(new MobelComparator());
42 | }
43 |
44 | public void sorterBordMedComparator() {
45 | mobler.sort(new BordComparator());
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/src/main/resources/static/sikkerhet/nybruker.js:
--------------------------------------------------------------------------------
1 | import validering from "./validering.js"
2 | import {apiSikkerhet as api} from "../apiurl.js"
3 |
4 | $(() => {
5 | $("#registrer").click(() => {
6 | const brukernavn = $("#brukernavn").val();
7 | const passord = $("#passord").val();
8 |
9 | const kunde = {
10 | brukernavn: brukernavn,
11 | passord: passord
12 | }
13 |
14 | if (validering.loginn()) {
15 | $.post(api + "/nybruker", kunde, () => {
16 | const url = "/loggInn?brukernavn=" + $("#brukernavn").val() + "&passord=" + $("#passord").val();
17 | $.get(api + url, OK => {
18 | if (OK) {
19 | window.location.href = "/sikkerhet/liste.html";
20 | } else {
21 | $("#feil").html("Feil i brukernavn eller passord");
22 | }
23 | }).fail(jqXHR => {
24 | const json = $.parseJSON(jqXHR.responseText);
25 | $("#feil").html(json.message);
26 | });
27 | }).fail(jqXHR => {
28 | const json = $.parseJSON(jqXHR.responseText);
29 | $("#feil").html(json.message);
30 | });
31 | }
32 | });
33 | });
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/nedtrekkslister/repository/BilRepository.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.nedtrekkslister.repository;
2 |
3 | import eriksommer.webprog.nedtrekkslister.model.Bil;
4 | import org.springframework.stereotype.Repository;
5 |
6 | import java.util.ArrayList;
7 |
8 | @Repository
9 | public class BilRepository {
10 | private final ArrayList billiste = new ArrayList<>();
11 |
12 | public BilRepository() {
13 | this.billiste.add(new Bil("Audi", "R8 V10+"));
14 | this.billiste.add(new Bil("Audi", "RS4"));
15 | this.billiste.add(new Bil("Audi", "A3"));
16 | this.billiste.add(new Bil("Porche", "Tycan Turbo s"));
17 | this.billiste.add(new Bil("Porche", "911"));
18 | this.billiste.add(new Bil("Volvo", "XC90"));
19 | this.billiste.add(new Bil("Volvo", "XC60"));
20 | this.billiste.add(new Bil("Volvo", "XC40"));
21 | this.billiste.add(new Bil("Tesla", "Cyber Truck"));
22 | this.billiste.add(new Bil("Tesla", "Model 3"));
23 | this.billiste.add(new Bil("Tesla", "Model S"));
24 | }
25 |
26 | public void leggInn(Bil motorvogn) {
27 | billiste.add(motorvogn);
28 | }
29 |
30 | public ArrayList hentAlle() {
31 | return billiste;
32 | }
33 |
34 | public void slettAlle() {
35 | billiste.clear();
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/src/main/resources/static/lagringserver/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Motorvognregister 1
6 |
7 |
8 |
9 |
10 | Motorvognregister
11 |
33 |
34 |
35 | Alle bilene:
36 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/sikkerhet/service/Inputvalidering.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.sikkerhet.service;
2 |
3 | import eriksommer.webprog.sikkerhet.model.Motorvogn;
4 | import org.slf4j.Logger;
5 |
6 | public class Inputvalidering {
7 | public static boolean validerMotorvognOK(Motorvogn motorvogn, Logger logger) {
8 | String regexPersonnr = "[0-9]{11}";
9 | String regexNavn = "[a-zA-ZæøåÆØÅ .\\-]{2,20}";
10 | String regexAdresse = "[0-9a-zA-ZæøåÆØÅ ,.\\-]{2,30}";
11 | String regexKjennetegn = "[A-Z][A-Z][0-9]{5}";
12 | String regexMerke = "[a-zA-ZæøåÆØÅ.\\-]{2,10}";
13 | String regexType = "[0-9a-zA-ZæøåÆØÅ.\\-]{2,10}";
14 |
15 | boolean personnrOK = motorvogn.getPersonnr().matches(regexPersonnr);
16 | boolean navnOK = motorvogn.getNavn().matches(regexNavn);
17 | boolean adresseOK = motorvogn.getAdresse().matches(regexAdresse);
18 | boolean kjennetegnOK = motorvogn.getKjennetegn().matches(regexKjennetegn);
19 | boolean merkeOK = motorvogn.getMerke().matches(regexMerke);
20 | boolean typeOK = motorvogn.getType().matches(regexType);
21 |
22 | if (personnrOK && navnOK && adresseOK && kjennetegnOK && merkeOK && typeOK) {
23 | return true;
24 | } else {
25 | logger.error("Valideringsfeil");
26 | return false;
27 | }
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/inputvalidering/service/Inputvalidering.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.inputvalidering.service;
2 |
3 | import eriksommer.webprog.inputvalidering.model.Motorvogn;
4 | import org.slf4j.Logger;
5 |
6 | public class Inputvalidering {
7 | public static boolean validerMotorvognOK(Motorvogn motorvogn, Logger logger) {
8 | String regexPersonnr = "[0-9]{11}";
9 | String regexNavn = "[a-zA-ZæøåÆØÅ .\\-]{2,20}";
10 | String regexAdresse = "[0-9a-zA-ZæøåÆØÅ ,.\\-]{2,30}";
11 | String regexKjennetegn = "[A-Z][A-Z][0-9]{5}";
12 | String regexMerke = "[a-zA-ZæøåÆØÅ.\\-]{2,10}";
13 | String regexType = "[0-9a-zA-ZæøåÆØÅ.\\-]{2,10}";
14 |
15 | boolean personnrOK = motorvogn.getPersonnr().matches(regexPersonnr);
16 | boolean navnOK = motorvogn.getNavn().matches(regexNavn);
17 | boolean adresseOK = motorvogn.getAdresse().matches(regexAdresse);
18 | boolean kjennetegnOK = motorvogn.getKjennetegn().matches(regexKjennetegn);
19 | boolean merkeOK = motorvogn.getMerke().matches(regexMerke);
20 | boolean typeOK = motorvogn.getType().matches(regexType);
21 |
22 | if (personnrOK && navnOK && adresseOK && kjennetegnOK && merkeOK && typeOK) {
23 | return true;
24 | }else {
25 | logger.error("Valideringsfeil");
26 | return false;
27 | }
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/relasjonsdatabase1/controller/Motorvogn4Controller.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.relasjonsdatabase1.controller;
2 |
3 | import eriksommer.webprog.relasjonsdatabase1.repository.Motorvogn4Repository;
4 | import eriksommer.webprog.relasjonsdatabase1.model.Bil;
5 | import eriksommer.webprog.relasjonsdatabase1.model.Motorvogn;
6 | import org.springframework.beans.factory.annotation.Autowired;
7 | import org.springframework.web.bind.annotation.*;
8 |
9 | import java.util.List;
10 |
11 | @RestController
12 | @RequestMapping("/api/relasjonsdatabase1/")
13 | public class Motorvogn4Controller {
14 |
15 | @Autowired
16 | private Motorvogn4Repository rep;
17 |
18 | @GetMapping("/hentBiler")
19 | public List hentBiler() {
20 | return rep.hentAlleBiler();
21 | }
22 |
23 | @PostMapping("/lagre")
24 | public void lagreKunde(Motorvogn motorvogn){
25 | rep.lagreMotorvogn(motorvogn);
26 | }
27 |
28 | @GetMapping("/hentAlle")
29 | public List hentAlleMotorvogner(){
30 | return rep.hentAlleMotorvogner();
31 | }
32 |
33 | @DeleteMapping("/slettEnMotorvogn")
34 | public void slettEnMotorvogn(String personnr){
35 | rep.slettEnMotorvogn(personnr);
36 | }
37 |
38 | @DeleteMapping("/slettAlle")
39 | public void slettAlleMotorvogner(){
40 | rep.slettAlleMotorvogner();
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/src/main/resources/static/sesjoner/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Motorvognregister
9 |
10 |
11 |
12 |
13 |
14 |
Logg inn
15 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/sesjoner/service/Inputvalidering.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.sesjoner.service;
2 |
3 | import eriksommer.webprog.sesjoner.model.Motorvogn;
4 | import org.slf4j.Logger;
5 | import org.springframework.stereotype.Service;
6 |
7 | @Service
8 | public class Inputvalidering {
9 | public static boolean validerMotorvognOK(Motorvogn motorvogn, Logger logger) {
10 | String regexPersonnr = "[0-9]{11}";
11 | String regexNavn = "[a-zA-ZæøåÆØÅ .\\-]{2,20}";
12 | String regexAdresse = "[0-9a-zA-ZæøåÆØÅ ,.\\-]{2,30}";
13 | String regexKjennetegn = "[A-Z][A-Z][0-9]{5}";
14 | String regexMerke = "[a-zA-ZæøåÆØÅ.\\-]{2,10}";
15 | String regexType = "[0-9a-zA-ZæøåÆØÅ.\\-]{2,10}";
16 |
17 | boolean personnrOK = motorvogn.getPersonnr().matches(regexPersonnr);
18 | boolean navnOK = motorvogn.getNavn().matches(regexNavn);
19 | boolean adresseOK = motorvogn.getAdresse().matches(regexAdresse);
20 | boolean kjennetegnOK = motorvogn.getKjennetegn().matches(regexKjennetegn);
21 | boolean merkeOK = motorvogn.getMerke().matches(regexMerke);
22 | boolean typeOK = motorvogn.getType().matches(regexType);
23 |
24 | if (personnrOK && navnOK && adresseOK && kjennetegnOK && merkeOK && typeOK) {
25 | return true;
26 | }else {
27 | logger.error("Valideringsfeil");
28 | return false;
29 | }
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/src/main/resources/static/sikkerhet/nybruker.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Motorvognregister
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
Registrer bruker
15 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/datastrukturer/Stakk.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.datastrukturer;
2 |
3 | public class Stakk {
4 | private static class Node {
5 | private final int verdi;
6 | private Node neste;
7 |
8 | public Node(int verdi) {
9 | this.verdi = verdi;
10 | }
11 | }
12 |
13 | private Node topp;
14 |
15 | public Stakk() {
16 | this.topp = null;
17 | }
18 |
19 | public void push(int verdi) {
20 | Node node = new Node(verdi);
21 |
22 | node.neste = topp;
23 | topp = node;
24 | }
25 |
26 | public boolean tom() {
27 | return topp == null;
28 | }
29 |
30 | public int peek() {
31 | if (!tom()) {
32 | return topp.verdi;
33 | } else {
34 | System.out.println("Stacken er tom!");
35 | return -1;
36 | }
37 | }
38 |
39 | public void pop() {
40 | if (topp == null) {
41 | System.out.println("Stack underflow");
42 | return;
43 | }
44 |
45 | topp = topp.neste;
46 | }
47 |
48 | public void skrivUt() {
49 | if (topp == null) {
50 | System.out.println("Stack underflow");
51 | System.exit(1);
52 | } else {
53 | Node node = topp;
54 | while (node != null) {
55 | System.out.print(node.verdi + " ");
56 | node = node.neste;
57 | }
58 | }
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/src/main/resources/static/javascript1/js1.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Javascript 1 - Ukesoppgaver
6 |
7 |
8 |
9 | Ukesoppgaver javascript 1
10 |
11 | Oppgave 1
12 |
13 |
14 | Oppgave 2
15 |
16 |
17 | Oppgave 3
18 | Skriv melding:
19 |
22 |
23 |
24 | Oppgave 4
25 |
30 | Oppgave 5
31 |
36 |
37 | Oppgave 6
38 | Melding blir farget rød:
39 |
42 |
43 |
44 | Oppgave 7
45 | Gir store bokstaver:
46 |
49 |
50 |
51 | Oppgave 8
52 |
53 |
54 | Oppgave 9
55 |
56 |
57 | Oppgave 10
58 |
59 |
60 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/generiskedatatyper/Mobel.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.generiskedatatyper;
2 |
3 | public abstract class Mobel implements Comparable {
4 | private String navn;
5 | private String type;
6 | private int vekt;
7 | private int pris;
8 | private int nummer;
9 |
10 | public Mobel(String navn, String type, int vekt, int pris, int nummer) {
11 | this.navn = navn;
12 | this.type = type;
13 | this.vekt = vekt;
14 | this.pris = pris;
15 | this.nummer = nummer;
16 | }
17 |
18 | public String getNavn() {
19 | return navn;
20 | }
21 |
22 | public void setNavn(String navn) {
23 | this.navn = navn;
24 | }
25 |
26 | public String getType() {
27 | return type;
28 | }
29 |
30 | public void setType(String type) {
31 | this.type = type;
32 | }
33 |
34 | public int getVekt() {
35 | return vekt;
36 | }
37 |
38 | public void setVekt(int vekt) {
39 | this.vekt = vekt;
40 | }
41 |
42 | public int getPris() {
43 | return pris;
44 | }
45 |
46 | public void setPris(int pris) {
47 | this.pris = pris;
48 | }
49 |
50 | public int getNummer() {
51 | return nummer;
52 | }
53 |
54 | public void setNummer(int nummer) {
55 | this.nummer = nummer;
56 | }
57 |
58 | public abstract String toString();
59 |
60 | // oppgave 3
61 | public int compareTo(Mobel o) {
62 | return this.getNummer() - ((Mobel) o).getNummer();
63 | }
64 | }
65 |
--------------------------------------------------------------------------------
/src/main/resources/static/sikkerhet/index.js:
--------------------------------------------------------------------------------
1 | import validering from "./validering.js"
2 | import {apiSikkerhet as api} from "../apiurl.js"
3 |
4 | $(() => {
5 | $("#loggInn").click(() => {
6 | if (validering.loginn()) {
7 | const url = "/loggInn?brukernavn=" + $("#brukernavn").val() + "&passord=" + $("#passord").val();
8 | $.get(api + url, OK => {
9 | if (OK) {
10 | window.location.href = "/sikkerhet/liste.html";
11 | } else {
12 | $("#feil").html("Feil i brukernavn eller passord");
13 | }
14 | })
15 | .fail(jqXHR => {
16 | const json = $.parseJSON(jqXHR.responseText);
17 | $("#feil").html(json.message);
18 | });
19 | }
20 | });
21 |
22 | $("#registrer").click(() => {
23 | window.location.href = "/sikkerhet/nybruker.html";
24 | });
25 |
26 | $("#krypterAllePassord").click(() => {
27 | $.get(api + "/krypterAllePassord", OK => {
28 | if (OK) {
29 | $("#feil").html("Kryptering utført!");
30 | } else {
31 | $("#feil").html("Feil i kryptering!");
32 | }
33 | })
34 | .fail(jqXHR => {
35 | const json = $.parseJSON(jqXHR.responseText);
36 | $("#feil").html(json.message);
37 | });
38 | });
39 |
40 | $("#brukernavn").on("change", () => validering.brukernavn());
41 | $("#passord").on("change", () => validering.passord());
42 | });
--------------------------------------------------------------------------------
/src/main/resources/static/sikkerhet/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Motorvognregister
9 |
10 |
11 |
12 |
13 |
14 |
Logg inn
15 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/eksamen/v20/Skiloper.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.eksamen.v20;
2 |
3 | public class Skiloper {
4 | private int id;
5 | private String fornavn;
6 | private String etternavn;
7 | private String klubb;
8 | private String epost;
9 | private String passord;
10 |
11 | public Skiloper(int id, String fornavn, String etternavn, String klubb, String epost, String passord) {
12 | this.id = id;
13 | this.fornavn = fornavn;
14 | this.etternavn = etternavn;
15 | this.klubb = klubb;
16 | this.epost = epost;
17 | this.passord = passord;
18 | }
19 |
20 | public Skiloper(){}
21 |
22 | public int getId() {
23 | return id;
24 | }
25 |
26 | public void setId(int id) {
27 | this.id = id;
28 | }
29 |
30 | public String getFornavn() {
31 | return fornavn;
32 | }
33 |
34 | public void setFornavn(String fornavn) {
35 | this.fornavn = fornavn;
36 | }
37 |
38 | public String getEtternavn() {
39 | return etternavn;
40 | }
41 |
42 | public void setEtternavn(String etternavn) {
43 | this.etternavn = etternavn;
44 | }
45 |
46 | public String getKlubb() {
47 | return klubb;
48 | }
49 |
50 | public void setKlubb(String klubb) {
51 | this.klubb = klubb;
52 | }
53 |
54 | public String getEpost() {
55 | return epost;
56 | }
57 |
58 | public void setEpost(String epost) {
59 | this.epost = epost;
60 | }
61 |
62 | public String getPassord() {
63 | return passord;
64 | }
65 |
66 | public void setPassord(String passord) {
67 | this.passord = passord;
68 | }
69 | }
70 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/ovinger/Sorting.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.ovinger;
2 |
3 | import java.util.*;
4 |
5 | class Person implements Comparable {
6 | private String navn;
7 | private int alder;
8 |
9 | public Person(String navn, int alder) {
10 | this.navn = navn;
11 | this.alder = alder;
12 | }
13 |
14 | public String getNavn() {
15 | return navn;
16 | }
17 |
18 | public void setNavn(String navn) {
19 | this.navn = navn;
20 | }
21 |
22 | public int getAlder() {
23 | return alder;
24 | }
25 |
26 | public void setAlder(int alder) {
27 | this.alder = alder;
28 | }
29 |
30 | @Override
31 | public String toString() {
32 | return "Person{" +
33 | "navn='" + navn + '\'' +
34 | ", alder=" + alder +
35 | '}';
36 | }
37 |
38 | @Override
39 | public int compareTo(Person o) {
40 | return this.getNavn().compareTo(o.getNavn());
41 | }
42 | }
43 |
44 | public class Sorting {
45 | public static void main(String[] args) {
46 | List liste = new ArrayList<>(Arrays.asList(new Person("Petter", 34), new Person("Ana", 21)));
47 | System.out.println("Usortert!");
48 | for (Person person : liste) {
49 | System.out.println(person);
50 | }
51 | //Sortering med comparator
52 | liste.sort((person1, person2) -> person1.getNavn().compareTo(person2.getNavn()));
53 | //Sortering med comparable
54 | Collections.sort(liste);
55 | System.out.println("Sortert!");
56 | for (Person person : liste) {
57 | System.out.println(person);
58 | }
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/nedtrekkslister/model/Motorvogn.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.nedtrekkslister.model;
2 |
3 | public class Motorvogn {
4 | private String personnr;
5 | private String navn;
6 | private String adresse;
7 | private String kjennetegn;
8 | private String merke;
9 | private String type;
10 |
11 | public Motorvogn(String personnr, String navn, String adresse, String kjennetegn, String merke, String type) {
12 | this.personnr = personnr;
13 | this.navn = navn;
14 | this.adresse = adresse;
15 | this.kjennetegn = kjennetegn;
16 | this.merke = merke;
17 | this.type = type;
18 | }
19 |
20 | public String getPersonnr() {
21 | return personnr;
22 | }
23 |
24 | public void setPersonnr(String personnr) {
25 | this.personnr = personnr;
26 | }
27 |
28 | public String getNavn() {
29 | return navn;
30 | }
31 |
32 | public void setNavn(String navn) {
33 | this.navn = navn;
34 | }
35 |
36 | public String getAdresse() {
37 | return adresse;
38 | }
39 |
40 | public void setAdresse(String adresse) {
41 | this.adresse = adresse;
42 | }
43 |
44 | public String getKjennetegn() {
45 | return kjennetegn;
46 | }
47 |
48 | public void setKjennetegn(String kjennetegn) {
49 | this.kjennetegn = kjennetegn;
50 | }
51 |
52 | public String getMerke() {
53 | return merke;
54 | }
55 |
56 | public void setMerke(String merke) {
57 | this.merke = merke;
58 | }
59 |
60 | public String getType() {
61 | return type;
62 | }
63 |
64 | public void setType(String type) {
65 | this.type = type;
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/relasjonsdatabase1/model/Motorvogn.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.relasjonsdatabase1.model;
2 |
3 | public class Motorvogn {
4 | private int personnr; // Primær nøkkel - må være int
5 | private String navn;
6 | private String adresse;
7 | private String kjennetegn;
8 | private String merke;
9 | private String type;
10 |
11 | public Motorvogn(int personnr, String navn, String adresse, String kjennetegn, String merke, String type) {
12 | this.personnr = personnr;
13 | this.navn = navn;
14 | this.adresse = adresse;
15 | this.kjennetegn = kjennetegn;
16 | this.merke = merke;
17 | this.type = type;
18 | }
19 |
20 | public Motorvogn() {}
21 |
22 | public int getPersonnr() {
23 | return personnr;
24 | }
25 |
26 | public void setPersonnr(int personnr) {
27 | this.personnr = personnr;
28 | }
29 |
30 | public String getNavn() {
31 | return navn;
32 | }
33 |
34 | public void setNavn(String navn) {
35 | this.navn = navn;
36 | }
37 |
38 | public String getAdresse() {
39 | return adresse;
40 | }
41 |
42 | public void setAdresse(String adresse) {
43 | this.adresse = adresse;
44 | }
45 |
46 | public String getKjennetegn() {
47 | return kjennetegn;
48 | }
49 |
50 | public void setKjennetegn(String kjennetegn) {
51 | this.kjennetegn = kjennetegn;
52 | }
53 |
54 | public String getMerke() {
55 | return merke;
56 | }
57 |
58 | public void setMerke(String merke) {
59 | this.merke = merke;
60 | }
61 |
62 | public String getType() {
63 | return type;
64 | }
65 |
66 | public void setType(String type) {
67 | this.type = type;
68 | }
69 | }
--------------------------------------------------------------------------------
/src/main/resources/static/inputvalidering/index.js:
--------------------------------------------------------------------------------
1 | import {apiInputvalidering as api} from "../apiurl.js"
2 |
3 | $(() => { // kjøres når dokumentet er ferdig lastet
4 | hentAlle();
5 |
6 | $("#slettAlle").click(() => $.get(api + "/slettAlle", () => hentAlle()));
7 | });
8 |
9 | const hentAlle = () => {
10 | $.get(api + "/hentAlle", biler => formaterData(biler))
11 | .fail(jqXHR => {
12 | const json = $.parseJSON(jqXHR.responseText);
13 | $("#feil").html(json.message);
14 | });
15 | }
16 |
17 | const formaterData = biler => {
18 | let ut = "| Personnr | Navn | Adresse | " +
19 | "Kjennetegn | Merke | Type | | |
";
20 | for (const bil of biler) {
21 | ut += "| " + bil.personnr + " | " + bil.navn + " | " + bil.adresse + " | " +
22 | "" + bil.kjennetegn + " | " + bil.merke + " | " + bil.type + " | " +
23 | " | " +
24 | " | " +
25 | "
";
26 | }
27 | ut += "
";
28 | $("#bilene").html(ut);
29 |
30 | addEventListeners(biler);
31 | }
32 |
33 | const addEventListeners = biler => {
34 | for (const {personnr, id} of biler) {
35 | $("#" + personnr).on("click", () => slettEnMotorvogn(personnr));
36 | $("#" + id).on("click", () => idTilEndring(id));
37 | }
38 | }
39 |
40 | const idTilEndring = id => window.location.href = "/inputvalidering/endre.html?" + id;
41 |
42 | const slettEnMotorvogn = personnr => {
43 | const url = "/slettEnMotorvogn?personnr=" + personnr;
44 | $.get(api + url, () => window.location.href = "/inputvalidering/index.html");
45 | }
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/sesjoner/model/Motorvogn.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.sesjoner.model;
2 |
3 | public class Motorvogn {
4 | private int id;
5 | private String personnr;
6 | private String navn;
7 | private String adresse;
8 | private String kjennetegn;
9 | private String merke;
10 | private String type;
11 |
12 | public Motorvogn(String personnr, String navn, String adresse, String kjennetegn, String merke, String type) {
13 | this.personnr = personnr;
14 | this.navn = navn;
15 | this.adresse = adresse;
16 | this.kjennetegn = kjennetegn;
17 | this.merke = merke;
18 | this.type = type;
19 | }
20 |
21 | public Motorvogn() {
22 | }
23 |
24 | public int getId() {
25 | return id;
26 | }
27 |
28 | public void setId(int id) {
29 | this.id = id;
30 | }
31 |
32 | public String getPersonnr() {
33 | return personnr;
34 | }
35 |
36 | public void setPersonnr(String personnr) {
37 | this.personnr = personnr;
38 | }
39 |
40 | public String getNavn() {
41 | return navn;
42 | }
43 |
44 | public void setNavn(String navn) {
45 | this.navn = navn;
46 | }
47 |
48 | public String getAdresse() {
49 | return adresse;
50 | }
51 |
52 | public void setAdresse(String adresse) {
53 | this.adresse = adresse;
54 | }
55 |
56 | public String getKjennetegn() {
57 | return kjennetegn;
58 | }
59 |
60 | public void setKjennetegn(String kjennetegn) {
61 | this.kjennetegn = kjennetegn;
62 | }
63 |
64 | public String getMerke() {
65 | return merke;
66 | }
67 |
68 | public void setMerke(String merke) {
69 | this.merke = merke;
70 | }
71 |
72 | public String getType() {
73 | return type;
74 | }
75 |
76 | public void setType(String type) {
77 | this.type = type;
78 | }
79 | }
80 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/sikkerhet/model/Motorvogn.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.sikkerhet.model;
2 |
3 | public class Motorvogn {
4 | private int id;
5 | private String personnr;
6 | private String navn;
7 | private String adresse;
8 | private String kjennetegn;
9 | private String merke;
10 | private String type;
11 |
12 | public Motorvogn(String personnr, String navn, String adresse, String kjennetegn, String merke, String type) {
13 | this.personnr = personnr;
14 | this.navn = navn;
15 | this.adresse = adresse;
16 | this.kjennetegn = kjennetegn;
17 | this.merke = merke;
18 | this.type = type;
19 | }
20 |
21 | public Motorvogn() {
22 | }
23 |
24 | public int getId() {
25 | return id;
26 | }
27 |
28 | public void setId(int id) {
29 | this.id = id;
30 | }
31 |
32 | public String getPersonnr() {
33 | return personnr;
34 | }
35 |
36 | public void setPersonnr(String personnr) {
37 | this.personnr = personnr;
38 | }
39 |
40 | public String getNavn() {
41 | return navn;
42 | }
43 |
44 | public void setNavn(String navn) {
45 | this.navn = navn;
46 | }
47 |
48 | public String getAdresse() {
49 | return adresse;
50 | }
51 |
52 | public void setAdresse(String adresse) {
53 | this.adresse = adresse;
54 | }
55 |
56 | public String getKjennetegn() {
57 | return kjennetegn;
58 | }
59 |
60 | public void setKjennetegn(String kjennetegn) {
61 | this.kjennetegn = kjennetegn;
62 | }
63 |
64 | public String getMerke() {
65 | return merke;
66 | }
67 |
68 | public void setMerke(String merke) {
69 | this.merke = merke;
70 | }
71 |
72 | public String getType() {
73 | return type;
74 | }
75 |
76 | public void setType(String type) {
77 | this.type = type;
78 | }
79 | }
80 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/inputvalidering/model/Motorvogn.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.inputvalidering.model;
2 |
3 | public class Motorvogn {
4 | private int id;
5 | private String personnr;
6 | private String navn;
7 | private String adresse;
8 | private String kjennetegn;
9 | private String merke;
10 | private String type;
11 |
12 | public Motorvogn(int id, String personnr, String navn, String adresse, String kjennetegn, String merke, String type) {
13 | this.id = id;
14 | this.personnr = personnr;
15 | this.navn = navn;
16 | this.adresse = adresse;
17 | this.kjennetegn = kjennetegn;
18 | this.merke = merke;
19 | this.type = type;
20 | }
21 |
22 | public Motorvogn() {
23 | }
24 |
25 | public int getId() {
26 | return id;
27 | }
28 |
29 | public void setId(int id) {
30 | this.id = id;
31 | }
32 |
33 | public String getPersonnr() {
34 | return personnr;
35 | }
36 |
37 | public void setPersonnr(String personnr) {
38 | this.personnr = personnr;
39 | }
40 |
41 | public String getNavn() {
42 | return navn;
43 | }
44 |
45 | public void setNavn(String navn) {
46 | this.navn = navn;
47 | }
48 |
49 | public String getAdresse() {
50 | return adresse;
51 | }
52 |
53 | public void setAdresse(String adresse) {
54 | this.adresse = adresse;
55 | }
56 |
57 | public String getKjennetegn() {
58 | return kjennetegn;
59 | }
60 |
61 | public void setKjennetegn(String kjennetegn) {
62 | this.kjennetegn = kjennetegn;
63 | }
64 |
65 | public String getMerke() {
66 | return merke;
67 | }
68 |
69 | public void setMerke(String merke) {
70 | this.merke = merke;
71 | }
72 |
73 | public String getType() {
74 | return type;
75 | }
76 |
77 | public void setType(String type) {
78 | this.type = type;
79 | }
80 | }
81 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/lagringserver/model/Motorvogn.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.lagringserver.model;
2 |
3 | /**
4 | * An empty constructor is needed to create a new instance via reflection by
5 | * your persistence framework. If you don't provide any additional constructors
6 | * with arguments for the class, you don't need to provide an empty constructor
7 | * because you get one per default.
8 | */
9 | public class Motorvogn {
10 | private String personnr;
11 | private String navn;
12 | private String adresse;
13 | private String kjennetegn;
14 | private String merke;
15 | private String type;
16 |
17 | public Motorvogn(String personnr, String navn, String adresse, String kjennetegn, String merke, String type) {
18 | this.personnr = personnr;
19 | this.navn = navn;
20 | this.adresse = adresse;
21 | this.kjennetegn = kjennetegn;
22 | this.merke = merke;
23 | this.type = type;
24 | }
25 |
26 | public String getPersonnr() {
27 | return personnr;
28 | }
29 |
30 | public void setPersonnr(String personnr) {
31 | this.personnr = personnr;
32 | }
33 |
34 | public String getNavn() {
35 | return navn;
36 | }
37 |
38 | public void setNavn(String navn) {
39 | this.navn = navn;
40 | }
41 |
42 | public String getAdresse() {
43 | return adresse;
44 | }
45 |
46 | public void setAdresse(String adresse) {
47 | this.adresse = adresse;
48 | }
49 |
50 | public String getKjennetegn() {
51 | return kjennetegn;
52 | }
53 |
54 | public void setKjennetegn(String kjennetegn) {
55 | this.kjennetegn = kjennetegn;
56 | }
57 |
58 | public String getMerke() {
59 | return merke;
60 | }
61 |
62 | public void setMerke(String merke) {
63 | this.merke = merke;
64 | }
65 |
66 | public String getType() {
67 | return type;
68 | }
69 |
70 | public void setType(String type) {
71 | this.type = type;
72 | }
73 | }
74 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/klientTjener1/controller/KalkulatorController.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.klientTjener1.controller;
2 |
3 | import eriksommer.webprog.klientTjener1.service.KalkulatorService;
4 | import org.slf4j.Logger;
5 | import org.slf4j.LoggerFactory;
6 | import org.springframework.beans.factory.annotation.Autowired;
7 | import org.springframework.web.bind.annotation.GetMapping;
8 | import org.springframework.web.bind.annotation.RequestMapping;
9 | import org.springframework.web.bind.annotation.RestController;
10 |
11 | @RestController
12 | @RequestMapping("/api/klienttjener1")
13 | public class KalkulatorController {
14 |
15 | @Autowired
16 | KalkulatorService service;
17 |
18 | private final Logger logger = LoggerFactory.getLogger(KalkulatorController.class);
19 |
20 | @GetMapping("/pluss")
21 | public double pluss(double tall1, double tall2) {
22 | try {
23 | return service.addere(tall1, tall2);
24 | } catch (Exception e) {
25 | logger.error("Feil i adderingen : " + e);
26 | return 0.0;
27 | }
28 | }
29 |
30 | @GetMapping("/minus")
31 | public double minus(double tall1, double tall2) {
32 | try {
33 | return service.subtrahere(tall1, tall2);
34 | } catch (Exception e) {
35 | logger.error("Feil i subtraksjonen : " + e);
36 | return 0.0;
37 | }
38 |
39 | }
40 |
41 | @GetMapping("/gange")
42 | public double gange(double tall1, double tall2) {
43 | try {
44 | return service.multiplisere(tall1, tall2);
45 | } catch (Exception e) {
46 | logger.error("Feil i multipliseringen : " + e);
47 | return 0.0;
48 | }
49 | }
50 |
51 | @GetMapping("/dele")
52 | public double dele(double tall1, double tall2) {
53 | try {
54 | return service.dividere(tall1, tall2);
55 | } catch (Exception e) {
56 | logger.error("Feil i divideringen : " + e);
57 | return 0.0;
58 | }
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/relasjonsdatabase1/repository/Motorvogn4Repository.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.relasjonsdatabase1.repository;
2 |
3 | import eriksommer.webprog.relasjonsdatabase1.model.Bil;
4 | import eriksommer.webprog.relasjonsdatabase1.model.Motorvogn;
5 | import org.slf4j.Logger;
6 | import org.slf4j.LoggerFactory;
7 | import org.springframework.beans.factory.annotation.Autowired;
8 | import org.springframework.jdbc.core.BeanPropertyRowMapper;
9 | import org.springframework.jdbc.core.JdbcTemplate;
10 | import org.springframework.stereotype.Repository;
11 |
12 | import java.util.Comparator;
13 | import java.util.List;
14 |
15 | @Repository
16 | public class Motorvogn4Repository {
17 |
18 | @Autowired
19 | private JdbcTemplate db;
20 |
21 | private final Logger logger = LoggerFactory.getLogger(Motorvogn4Repository.class);
22 |
23 | public void lagreMotorvogn(Motorvogn motorvogn) {
24 | String sql = "INSERT INTO Motorvogn (personnr,navn,adresse,kjennetegn,merke,type) VALUES(?,?,?,?,?,?)";
25 | db.update(sql, motorvogn.getPersonnr(), motorvogn.getNavn(), motorvogn.getAdresse(), motorvogn.getKjennetegn(),
26 | motorvogn.getMerke(), motorvogn.getType());
27 | }
28 |
29 | public List hentAlleMotorvogner() {
30 | String sql = "SELECT * FROM Motorvogn";
31 | List list = db.query(sql, new BeanPropertyRowMapper(Motorvogn.class));
32 | list.sort((o1, o2) -> o1.getNavn().compareTo(o2.getNavn()));
33 | list.sort(Comparator.comparing(Motorvogn::getMerke));
34 | return list;
35 | }
36 |
37 | public void slettEnMotorvogn(String personnr) {
38 | String sql = "DELETE FROM Motorvogn WHERE personnr=?";
39 | db.update(sql, personnr);
40 | }
41 |
42 | public void slettAlleMotorvogner() {
43 | String sql = "DELETE FROM Motorvogn";
44 | db.update(sql);
45 | }
46 |
47 | public List hentAlleBiler() {
48 | String sql = "SELECT * FROM Bil";
49 | return db.query(sql, new BeanPropertyRowMapper(Bil.class));
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/relasjonsdatabase2/model/Motorvogn.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.relasjonsdatabase2.model;
2 |
3 | import javax.persistence.Entity;
4 | import javax.persistence.Id;
5 |
6 | @Entity
7 | public class Motorvogn {
8 | private int id;
9 | private int personnr;
10 | private String navn;
11 | private String adresse;
12 | private String kjennetegn;
13 | private String merke;
14 | private String type;
15 |
16 | public Motorvogn(int id, int personnr, String navn, String adresse, String kjennetegn, String merke, String type) {
17 | this.id = id;
18 | this.personnr = personnr;
19 | this.navn = navn;
20 | this.adresse = adresse;
21 | this.kjennetegn = kjennetegn;
22 | this.merke = merke;
23 | this.type = type;
24 | }
25 |
26 | public Motorvogn() {
27 | }
28 |
29 | @Id
30 | public int getId() {
31 | return id;
32 | }
33 |
34 | public void setId(int id) {
35 | this.id = id;
36 | }
37 |
38 | public int getPersonnr() {
39 | return personnr;
40 | }
41 |
42 | public void setPersonnr(int personnr) {
43 | this.personnr = personnr;
44 | }
45 |
46 | public String getNavn() {
47 | return navn;
48 | }
49 |
50 | public void setNavn(String navn) {
51 | this.navn = navn;
52 | }
53 |
54 | public String getAdresse() {
55 | return adresse;
56 | }
57 |
58 | public void setAdresse(String adresse) {
59 | this.adresse = adresse;
60 | }
61 |
62 | public String getKjennetegn() {
63 | return kjennetegn;
64 | }
65 |
66 | public void setKjennetegn(String kjennetegn) {
67 | this.kjennetegn = kjennetegn;
68 | }
69 |
70 | public String getMerke() {
71 | return merke;
72 | }
73 |
74 | public void setMerke(String merke) {
75 | this.merke = merke;
76 | }
77 |
78 | public String getType() {
79 | return type;
80 | }
81 |
82 | public void setType(String type) {
83 | this.type = type;
84 | }
85 | }
86 |
--------------------------------------------------------------------------------
/src/main/resources/static/klientTjener1/kalkulator.js:
--------------------------------------------------------------------------------
1 | import { apiKlinetTjener1 as api} from "../apiurl.js"
2 |
3 | $(() => {
4 | const tall1 = $("#tall1");
5 | const tall2 = $("#tall2");
6 |
7 | $("#pluss").click(() => {
8 | if (inputvalidering(tall1.val(), tall2.val())) {
9 | $.get(api + "/pluss?tall1=" + tall1.val() + "&tall2=" + tall2.val(), sum => {
10 | $("#output").html(tall1.val() + " + " + $("#tall2").val() + " = " + sum);
11 | });
12 | } else {
13 | $("#output").html("Du har ikke oppgitt to tall");
14 | }
15 | });
16 |
17 | $("#minus").click(() => {
18 | if (inputvalidering(tall1.val(), tall2.val())) {
19 | $.get(api + "/minus?tall1=" + tall1.val() + "&tall2=" + tall2.val(), sum => {
20 | $("#output").html(tall1.val() + " - " + $("#tall2").val() + " = " + sum);
21 | });
22 | } else {
23 | $("#output").html("Du har ikke oppgitt to tall");
24 | }
25 | });
26 |
27 | $("#gange").click(() => {
28 | if (inputvalidering(tall1.val(), tall2.val())) {
29 | $.get(api + "/gange?tall1=" + tall1.val() + "&tall2=" + tall2.val(), sum => {
30 | $("#output").html(tall1.val() + " * " + $("#tall2").val() + " = " + sum);
31 | });
32 | } else {
33 | $("#output").html("Du har ikke oppgitt to tall");
34 | }
35 | });
36 |
37 | $("#dele").click(() => {
38 | if (tall2.val() === "0") {
39 | $("#output").html("Du kan ikke dele på 0");
40 | } else if (inputvalidering(tall1.val(), tall2.val())) {
41 | $.get(api + "/dele?tall1=" + tall1.val() + "&tall2=" + tall2.val(), sum => {
42 | $("#output").html(tall1.val() + " / " + $("#tall2").val() + " = " + sum);
43 | });
44 | } else {
45 | $("#output").html("Du har ikke oppgitt to tall");
46 | }
47 | });
48 |
49 | const inputvalidering = (tall1, tall2) => {
50 | return !(isNaN(tall1) || isNaN(tall2) || tall1 === "" || tall2 === "");
51 | }
52 | });
--------------------------------------------------------------------------------
/src/main/resources/static/relasjonsdatabase2/registrere.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Motorvognregister
9 |
10 |
11 |
12 |
13 |
14 |
Motorvognregister
15 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
--------------------------------------------------------------------------------
/src/main/resources/static/inputvalidering/registrere.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Motorvognregister
9 |
10 |
11 |
12 |
13 |
14 |
Motorvognregister
15 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
--------------------------------------------------------------------------------
/src/main/resources/static/sesjoner/liste.js:
--------------------------------------------------------------------------------
1 | import {apiSesjoner as api} from "../apiurl.js"
2 |
3 | $(() => { // kjøres når dokumentet er ferdig lastet
4 | hentAlle();
5 |
6 | $("#slettAlle").click(() => {
7 | $.get(api + "/slettAlle", () => {
8 | hentAlle();
9 | });
10 | });
11 |
12 | $("#loggUt").click(() => {
13 | $.get(api + "/loggUt", () => {
14 | window.location.href = "/sesjoner/index.html";
15 | });
16 | });
17 | });
18 |
19 | const hentAlle = () => {
20 | $.get(api + "/hentAlle", biler => {
21 | formaterData(biler);
22 | })
23 | .fail(jqXHR => {
24 | const json = $.parseJSON(jqXHR.responseText);
25 | $("#feil").html(json.message);
26 | });
27 | }
28 |
29 | const formaterData = biler => {
30 | let ut = "| Personnr | Navn | Adresse | " +
31 | "Kjennetegn | Merke | Type | | |
";
32 | for (const bil of biler) {
33 | ut += "| " + bil.personnr + " | " + bil.navn + " | " + bil.adresse + " | " +
34 | "" + bil.kjennetegn + " | " + bil.merke + " | " + bil.type + " | " +
35 | " | " +
36 | " | " +
37 | "
";
38 | }
39 | ut += "
";
40 | $("#bilene").html(ut);
41 |
42 | addEventListeners(biler);
43 | }
44 |
45 | const addEventListeners = biler => {
46 | for (const {personnr, id} of biler) {
47 | $("#" + personnr).on("click", () => slettEnMotorvogn(personnr));
48 | $("#" + id).on("click", () => idTilEndring(id));
49 | }
50 | }
51 |
52 | const idTilEndring = id => {
53 | window.location.href = "/sesjoner/endre.html?" + id;
54 | }
55 |
56 | const slettEnMotorvogn = personnr => {
57 | const url = "/slettEnMotorvogn?personnr=" + personnr;
58 | $.get(api + url, () => {
59 | window.location.href = "/sesjoner/liste.html";
60 | });
61 | }
62 |
--------------------------------------------------------------------------------
/src/main/resources/static/sikkerhet/liste.js:
--------------------------------------------------------------------------------
1 | import {apiSikkerhet as api} from "../apiurl.js"
2 |
3 | $(() => { // kjøres når dokumentet er ferdig lastet
4 | hentAlle();
5 |
6 | $("#slettAlle").click(() => {
7 | $.get(api + "/slettAlle", () => {
8 | hentAlle();
9 | });
10 | });
11 |
12 | $("#loggUt").click(() => {
13 | $.get(api + "/loggUt", () => {
14 | window.location.href = "/sikkerhet/index.html";
15 | });
16 | });
17 | });
18 |
19 | const hentAlle = () => {
20 | $.get(api + "/hentAlle", biler => {
21 | formaterData(biler);
22 | })
23 | .fail(jqXHR => {
24 | const json = $.parseJSON(jqXHR.responseText);
25 | $("#feil").html(json.message);
26 | });
27 | }
28 |
29 | const formaterData = biler => {
30 | let ut = "| Personnr | Navn | Adresse | " +
31 | "Kjennetegn | Merke | Type | | |
";
32 | for (const bil of biler) {
33 | ut += "| " + bil.personnr + " | " + bil.navn + " | " + bil.adresse + " | " +
34 | "" + bil.kjennetegn + " | " + bil.merke + " | " + bil.type + " | " +
35 | " | " +
36 | " | " +
37 | "
";
38 | }
39 | ut += "
";
40 | $("#bilene").html(ut);
41 |
42 | addEventListeners(biler);
43 | }
44 |
45 | const addEventListeners = biler => {
46 | for (const {personnr, id} of biler) {
47 | $("#" + personnr).on("click", () => slettEnMotorvogn(personnr));
48 | $("#" + id).on("click", () => idTilEndring(id));
49 | }
50 | }
51 |
52 | const idTilEndring = id => {
53 | window.location.href = "/sikkerhet/endre.html?" + id;
54 | }
55 |
56 | const slettEnMotorvogn = personnr => {
57 | const url = "/slettEnMotorvogn?personnr=" + personnr;
58 | $.get(api + url, () => {
59 | window.location.href = "/sikkerhet/liste.html";
60 | });
61 | }
62 |
63 |
--------------------------------------------------------------------------------
/src/main/resources/static/relasjonsdatabase2/endre.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Motorvognregister
9 |
10 |
11 |
12 |
13 |
14 |
Motorvognregister
15 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/src/main/resources/static/relasjonsdatabase2/registrere.js:
--------------------------------------------------------------------------------
1 | import {apiRelasjonsdatabase2 as api} from "../apiurl.js"
2 |
3 | $(() => { // kjøres når dokumentet er ferdig lastet
4 | hentAlleBiler();
5 |
6 | $("#regMotorvogn").click(() => {
7 | const motorvogn = {
8 | personnr: $("#personnr").val(),
9 | navn: $("#navn").val(),
10 | adresse: $("#adresse").val(),
11 | kjennetegn: $("#kjennetegn").val(),
12 | merke: $("#valgtMerke").val(),
13 | type: $("#valgtType").val(),
14 | };
15 |
16 | $.post(api + "/lagre", motorvogn, () => hentAlleBiler());
17 |
18 | window.location.href = "/relasjonsdatabase2/index.html";
19 | });
20 | });
21 |
22 | const hentAlleBiler = () => {
23 | $.get(api + "/hentBiler", biler => formaterBiler(biler))
24 | .fail(jqXHR => {
25 | const json = $.parseJSON(jqXHR.responseText);
26 | $("#feil").html(json.message);
27 | });
28 | }
29 |
30 | const formaterBiler = biler => {
31 | $("#valgtMerke").off();
32 |
33 | let ut = "";
43 | $("#merke").html(ut);
44 |
45 | addEventListeners(biler);
46 | }
47 |
48 | const addEventListeners = biler => {
49 | for (const bil of biler) $("#valgtMerke").on("change", () => finnTyper());
50 | }
51 |
52 | const finnTyper = () => {
53 | const valgtMerke = $("#valgtMerke").val();
54 | $.get(api + "/hentBiler", biler => formaterTyper(biler, valgtMerke))
55 | .fail(jqXHR => {
56 | const json = $.parseJSON(jqXHR.responseText);
57 | $("#feil").html(json.message);
58 | });
59 | }
60 |
61 | const formaterTyper = (biler, valgtMerke) => {
62 | let ut = "";
69 | $("#type").html(ut);
70 | }
--------------------------------------------------------------------------------
/src/main/resources/static/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Web programming spring
6 |
7 |
8 |
9 | Web programming spring - Hovedmeny
10 | Moduler
11 |
12 |
13 | - Introduksjon
14 |
15 |
16 | - JavaScript1
17 |
18 |
19 | - JavaScript2
20 |
21 |
22 | - JavaScript3
23 |
24 |
25 | - jQuery
26 |
27 | - Introduksjon til klient/tjener (Spring)
28 |
39 |
40 | - Lagring av data på server i ArrayList
41 |
42 |
43 | - Styling med bootstrap
44 |
45 |
46 | - Bruk av nedtrekkslister, radioknapper og avhukingsbokser mot tjener/server
47 |
48 |
49 | - Rekursjon --> Tower of Hanoi
50 |
51 | - Datastrkturer
52 | - Generiske datatyper
53 |
54 | - Relasjonsdatabase 1
55 |
56 |
57 | - Relasjonsdatabase 2
58 |
59 |
60 | - Inputvalidering på klient og server
61 |
62 |
63 | - Sesjoner (Brukernavn: Admin, Passord: Admin1234)
64 |
65 |
66 | - Sikkerhet (Brukernavn: Admin, Passord: Admin1234)
67 |
68 |
69 |
70 |
--------------------------------------------------------------------------------
/src/main/resources/static/relasjonsdatabase2/index.js:
--------------------------------------------------------------------------------
1 | import {apiRelasjonsdatabase2 as api} from "../apiurl.js"
2 |
3 | $(() => { // kjøres når dokumentet er ferdig lastet
4 | hentAlle();
5 |
6 | $("#slettAlle").click(() => {
7 | $.ajax(api + "/slettAlle", {
8 | type: 'DELETE',
9 | success: () => hentAlle(),
10 | error: (jqXhr, textStatus, errorMessage) => console.log(errorMessage)
11 | });
12 | });
13 | });
14 |
15 | const hentAlle = () => {
16 | $.get(api + "/hentAlle", biler => formaterData(biler))
17 | .fail(jqXHR => {
18 | const json = $.parseJSON(jqXHR.responseText);
19 | $("#feil").html(json.message);
20 | });
21 | }
22 |
23 | const formaterData = biler => {
24 |
25 | $(".car").off() //Fjerner eventlisteners på alle car objekter
26 |
27 | let ut = "| Personnr | Navn | Adresse | " +
28 | "Kjennetegn | Merke | Type | | |
";
29 | for (const bil of biler) {
30 | ut += "| " + bil.personnr + " | " + bil.navn + " | " + bil.adresse + " | " +
31 | "" + bil.kjennetegn + " | " + bil.merke + " | " + bil.type + " | " +
32 | " | " +
33 | " | " +
34 | "
";
35 | }
36 |
37 | ut += "
";
38 | $("#bilene").html(ut);
39 |
40 | addEventListeners(biler);
41 | }
42 |
43 | const addEventListeners = biler => {
44 | for (const {personnr, id} of biler) {
45 | $("#" + personnr).on("click", () => slettEnMotorvogn(personnr));
46 | $("#" + id).on("click", () => idTilEndring(id));
47 | }
48 | }
49 |
50 | const idTilEndring = id => window.location.href = "/relasjonsdatabase2/endre.html?" + id;
51 |
52 | const slettEnMotorvogn = personnr => {
53 | const url = "/slettEnMotorvogn?personnr=" + personnr;
54 | $.ajax(api + url, {
55 | type: 'DELETE',
56 | success: () => window.location.href = "/relasjonsdatabase2/index.html",
57 | error: (jqXhr, textStatus, errorMessage) => console.log(errorMessage)
58 | });
59 | }
--------------------------------------------------------------------------------
/src/main/resources/static/inputvalidering/validering.js:
--------------------------------------------------------------------------------
1 | const validerPersonnr = () => {
2 | const personnr = $("#personnr").val();
3 | const regexp = /^[0-9]{11}$/;
4 | const ok = regexp.test(personnr);
5 | if (!ok) {
6 | $("#feilPersonnummer").html("Personnummeret må bestå av 11 siffer");
7 | return false;
8 | } else {
9 | $("#feilPersonnummer").html("");
10 | return true;
11 | }
12 | }
13 |
14 | const validerNavn = () => {
15 | const navn = $("#navn").val();
16 | const regexp = /^[a-zA-ZæøåÆØÅ. \-]{2,20}$/;
17 | const ok = regexp.test(navn);
18 | if (!ok) {
19 | $("#feilNavn").html("Navnet må bestå av 2 til 20 bokstaver");
20 | return false;
21 | } else {
22 | $("#feilNavn").html("");
23 | return true;
24 | }
25 | }
26 |
27 | const validerAdresse = () => {
28 | const adresse = $("#adresse").val();
29 | const regexp = /[0-9a-zA-ZæøåÆØÅ. \-]{2,30}$/;
30 | const ok = regexp.test(adresse);
31 | if (!ok) {
32 | $("#feilAdresse").html("Adressen må bestå av 2 til 40 bokstaver og tall");
33 | return false;
34 | } else {
35 | $("#feilAdresse").html("");
36 | return true;
37 | }
38 | }
39 |
40 | const validerKjennetegn = () => {
41 | const kjennetegn = $("#kjennetegn").val();
42 | const regexp = /^[A-Z][A-Z][0-9]{5}$/;
43 | const ok = regexp.test(kjennetegn);
44 | if (!ok) {
45 | $("#feilKjennetegn").html("Kjennetegnet må ha to store bokstaver og 5 tall");
46 | return false;
47 | } else {
48 | $("#feilKjennetegn").html("");
49 | return true;
50 | }
51 | }
52 |
53 | const validerMerke = () => {
54 | const merke = $("#valgtMerke").val();
55 | if (merke === "Velg merke") {
56 | $("#feilMerke").html("Velg et merke!");
57 | return false;
58 | } else {
59 | $("#feilMerke").html("");
60 | return true;
61 | }
62 | }
63 |
64 | const ingenValideringsFeil = () => {
65 | return (validerPersonnr() && validerNavn() && validerAdresse() && validerKjennetegn() && validerMerke());
66 | }
67 |
68 | export default {
69 | personnr: validerPersonnr,
70 | navn: validerNavn,
71 | adresse: validerAdresse,
72 | kjennetegn: validerKjennetegn,
73 | feil: ingenValideringsFeil
74 | }
75 |
--------------------------------------------------------------------------------
/src/main/resources/static/stylingbootstrap/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Motorvognregister 1
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
Motorvognregister
15 |
41 |
42 |
43 |
44 |
45 |
Alle bilene:
46 |
47 |
48 |
49 |
50 |
51 |
52 |
--------------------------------------------------------------------------------
/src/main/resources/static/relasjonsdatabase1/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Motorvognregister
9 |
10 |
11 |
12 |
13 |
14 |
Motorvognregister
15 |
45 |
46 |
47 |
48 |
49 |
Alle bilene:
50 |
51 |
52 |
53 |
54 |
55 |
56 |
--------------------------------------------------------------------------------
/src/main/resources/templates/error.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
7 |
8 | OppgLfWebProgV21
9 |
10 |
11 |
12 | OppgLfWebProgV21 - Hovedmeny
13 | Moduler
14 |
15 |
16 | - Introduksjon
17 |
18 |
19 | - JavaScript1
20 |
21 |
22 | - JavaScript2
23 |
24 |
25 | - JavaScript3
26 |
27 |
28 | - jQuery
29 |
30 | - Introduksjon til klient/tjener (Spring)
31 |
42 |
43 | - Lagring av data på server i ArrayList
44 |
45 |
46 | - Styling med bootstrap
47 |
48 |
49 | - Bruk av nedtrekkslister, radioknapper og avhukingsbokser mot tjener/server
50 |
51 |
52 | - Rekursjon --> Tower of Hanoi
53 |
54 | - Datastrkturer
55 | - Generiske datatyper
56 |
57 | - Relasjonsdatabase 1
58 |
59 |
60 | - Relasjonsdatabase 2
61 |
62 |
63 | - Inputvalidering på klient og server
64 |
65 |
66 | - Sesjoner (Brukernavn: Admin, Passord: Admin1234)
67 |
68 |
69 | - Sikkerhet (Brukernavn: Admin, Passord: Admin1234)
70 |
71 |
72 |
73 |
--------------------------------------------------------------------------------
/src/main/resources/static/nedtrekkslister/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Motorvognregister 1
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
Motorvognregister
15 |
45 |
46 |
47 |
48 |
49 |
Alle bilene:
50 |
51 |
52 |
53 |
54 |
55 |
56 |
--------------------------------------------------------------------------------
/src/main/resources/static/jQuery/jquery.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | jQuery
6 |
7 |
8 |
9 |
10 | Oppgave 1
11 | Navn:
12 | Alder:
13 |
14 |
15 |
16 | Oppgave 2
17 | Fahrenheit:
19 | Celsius:
21 |
22 | Oppgave 3
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 | Oppgave 4
32 |
51 |
52 |
53 | Ekstraoppgaver
54 | Oppgave 5
55 |
56 |
57 | Gjøremål
58 |
59 |
60 | Oppgave 6
61 |
62 |
63 |
64 | Gjøremål
65 |
66 |
67 |
68 | Oppgave 7
69 |
70 |
71 |
72 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/ovinger/Liste.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.ovinger;
2 |
3 | /**
4 | * Denne koden er ikke perfekt og har sine mangler og feil.
5 | * Koden ble skrevet for å forklare prinsippet med noder fremfor indekser i et array.
6 | * Mer komplette datastrukturer ligger i pakken/mappen 'datastrukturer'
7 | */
8 |
9 | public class Liste {
10 | private static class Node {
11 | int verdi;
12 | Node neste;
13 |
14 | public Node(int verdi) {
15 | this.verdi = verdi;
16 | }
17 | }
18 |
19 | private Node hode = null;
20 | private Node hale = null;
21 |
22 | public void settInn(int tall) {
23 | Node node = new Node(tall);
24 |
25 | if (hode == null) {
26 | hode = node;
27 | hale = hode;
28 | } else {
29 | hale.neste = node;
30 | hale = hale.neste;
31 | }
32 | }
33 |
34 | public void slettNode(int tall) {
35 | if (!finn(tall)) return;
36 |
37 | Node start = hode;
38 | Node forrige = null;
39 |
40 | if (start == null) return;
41 |
42 | do {
43 | if (start.verdi == tall) {
44 | assert forrige != null;
45 | forrige.neste = start.neste;
46 | start.neste = null;
47 | break;
48 | }
49 | forrige = start;
50 | start = start.neste;
51 | } while (start != null);
52 | }
53 |
54 | public boolean finn(int verdi) {
55 | Node start = hode;
56 |
57 | do {
58 | if (start.verdi == verdi) {
59 | return true;
60 | }
61 | start = start.neste;
62 | } while (start != null);
63 |
64 | return false;
65 | }
66 |
67 | public int antall() {
68 | int teller = 0;
69 | Node node = hode;
70 |
71 | if (node == null) {
72 | return teller;
73 | }
74 | do {
75 | teller++;
76 | node = node.neste;
77 | } while (node != null);
78 |
79 | return teller;
80 | }
81 |
82 |
83 | public void skrivUt() {
84 | Node start = hode;
85 | if (hode == null) {
86 | return;
87 | }
88 | do {
89 | System.out.print(start.verdi + " ");
90 | start = start.neste;
91 | } while (start != null);
92 | }
93 | }
94 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/datastrukturer/SirkelLinketListe.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.datastrukturer;
2 |
3 | public class SirkelLinketListe {
4 | private static class Node {
5 | private final int verdi;
6 | private Node neste;
7 |
8 | public Node(int verdi) {
9 | this.verdi = verdi;
10 | }
11 | }
12 |
13 | private Node hode;
14 | private Node hale;
15 |
16 | public SirkelLinketListe() {
17 | this.hode = null;
18 | this.hale = null;
19 | }
20 |
21 | public void leggTilNode(int verdi){
22 | Node node = new Node(verdi);
23 |
24 | if (hode == null){
25 | hode = node;
26 | }else {
27 | hale.neste = node;
28 | }
29 |
30 | hale = node;
31 | hale.neste = hode;
32 | }
33 |
34 | public boolean inneholderNode(int verdi){
35 | Node start = hode;
36 |
37 | if (hode != null){
38 | do {
39 | if (start.verdi == verdi){
40 | return true;
41 | }
42 | start = start.neste;
43 | }while (start != hode);
44 | }
45 | return false;
46 | }
47 |
48 | public void slettNode(int verdi){
49 | Node currentNode = hode;
50 |
51 | if (hode != null){
52 | do {
53 | Node nextNode = currentNode.neste;
54 | if (nextNode.verdi == verdi){
55 | if (hode == hale){
56 | hode = null;
57 | hale = null;
58 | }else {
59 | currentNode.neste = nextNode.neste;
60 | if (hode == nextNode){
61 | hode = hode.neste;
62 | }
63 | if (hale == nextNode){
64 | hale = currentNode;
65 | }
66 | }
67 | break;
68 | }
69 | currentNode = nextNode;
70 | }while (currentNode != hode);
71 | }
72 | }
73 |
74 | public void skrivUt(){
75 | Node current = hode;
76 |
77 | if (hode != null){
78 | do {
79 | System.out.print(current.verdi + " ");
80 | current = current.neste;
81 | }while (current != hode);
82 | }
83 | }
84 | }
85 |
--------------------------------------------------------------------------------
/src/main/resources/static/sesjoner/registrere.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Motorvognregister
9 |
10 |
11 |
12 |
13 |
14 |
Motorvognregister
15 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
--------------------------------------------------------------------------------
/src/main/resources/static/sikkerhet/registrere.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Motorvognregister
9 |
10 |
11 |
12 |
13 |
14 |
Motorvognregister
15 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
--------------------------------------------------------------------------------
/src/main/resources/static/javascript3/js3.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Title
6 |
7 |
8 | Oppgave 1
9 | Navn:
10 | Alder:
11 |
12 |
13 |
14 | Oppgave 2
15 | Fahrenheit:
17 | Celsius:
19 |
20 | Oppgave 3
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 | Oppgave 4
30 |
49 |
50 |
51 | Ekstraoppgaver
52 | Oppgave 5
53 |
54 |
55 | Gjøremål
56 |
57 |
58 | Oppgave 6
59 |
60 |
61 |
62 | Gjøremål
63 |
64 |
65 |
66 | Oppgave 7
67 |
68 |
69 |
70 |
71 |
72 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/datastrukturer/LenketListe.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.datastrukturer;
2 |
3 | import java.util.LinkedList;
4 |
5 | public class LenketListe {
6 |
7 | public Node hode;
8 | public Node hale;
9 |
10 | public LenketListe() {
11 | hode = hale = null;
12 | }
13 |
14 | static final class Node {
15 | String navn;
16 | Node forrige;
17 | Node neste;
18 |
19 | public Node(String navn) {
20 | this.navn = navn;
21 | }
22 |
23 | public Node(Node forrige, Node neste) {
24 | this.forrige = forrige;
25 | this.neste = neste;
26 | }
27 | }
28 |
29 | //Veldig forenklet metode
30 | public void add(String navn) {
31 | Node node = new Node(navn);
32 | if (hale == null) {
33 | hale = hode = node;
34 | }
35 | hale.neste = node;
36 | node.forrige = hale;
37 | hale = node;
38 | }
39 |
40 | public void slett(String navn) {
41 | Node node = hode;
42 | while (node != null) {
43 | if (node.navn.equals(navn)) {
44 | if (node == hode) {
45 | node.neste.forrige = null;
46 | hode = node.neste;
47 | } else if (node == hale) {
48 | node.forrige.neste = null;
49 | hale = node.forrige;
50 | } else {
51 | node.neste.forrige = node.forrige;
52 | node.forrige.neste = node.neste;
53 | }
54 | }
55 | node = node.neste;
56 | }
57 | }
58 |
59 | @Override
60 | public String toString() {
61 | StringBuilder msg = new StringBuilder();
62 |
63 | Node node = hode;
64 |
65 | while (node != null) {
66 | msg.append(node.navn).append(" ");
67 | node = node.neste;
68 | }
69 |
70 | return msg.toString();
71 | }
72 | }
73 |
74 | class Main {
75 | public static void main(String[] args) {
76 | LinkedList linkedList = new LinkedList<>();
77 | linkedList.add("Petter");
78 | linkedList.add("Nina");
79 | System.out.println(linkedList);
80 |
81 | LenketListe liste = new LenketListe();
82 | liste.add("Erik");
83 | liste.add("Lisa");
84 | liste.add("Ali");
85 |
86 | System.out.println(liste);
87 |
88 | liste.slett("Ali");
89 |
90 | System.out.println(liste);
91 | }
92 | }
93 |
--------------------------------------------------------------------------------
/src/main/resources/static/sesjoner/endre.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Motorvognregister
9 |
10 |
11 |
12 |
13 |
14 |
Motorvognregister
15 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/src/main/resources/static/sikkerhet/endre.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Motorvognregister
9 |
10 |
11 |
12 |
13 |
14 |
Motorvognregister
15 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/src/main/resources/static/lagringserver/index.js:
--------------------------------------------------------------------------------
1 | import { apiLagringServer as api} from "../apiurl.js"
2 |
3 | $(() => {
4 | $("#regMotorvogn").click(() => {
5 | const personnr = $("#personnr");
6 | const navn = $("#navn");
7 | const adresse = $("#adresse");
8 | const kjennetegn = $("#kjennetegn");
9 | const merke = $("#merke");
10 | const type = $("#type");
11 |
12 | const motorvogn = {
13 | personnr: personnr.val(),
14 | navn: navn.val(),
15 | adresse: adresse.val(),
16 | kjennetegn: kjennetegn.val(),
17 | merke: merke.val(),
18 | type: type.val()
19 | };
20 |
21 | if (inputval(motorvogn)) {
22 | $.post(api + "/motor", motorvogn, () => hent());
23 | /*
24 | $.post("/lagre", motorvogn, function (){
25 | $.get("/hentAlle", function (biler) {
26 | formater(biler);
27 | });
28 | });
29 | */
30 | personnr.val("");
31 | navn.val("");
32 | adresse.val("");
33 | kjennetegn.val("");
34 | merke.val("");
35 | type.val("");
36 | } else {
37 | console.log("Mangler input");
38 | }
39 | });
40 |
41 | $("#slettAlle").click(() => {
42 | $.ajax(api + "/motor", {
43 | type: 'DELETE',
44 | success: () => hent(),
45 | error: (jqXhr, textStatus, errorMessage) => console.log(errorMessage)
46 | });
47 | });
48 | });
49 |
50 | const hent = () => $.get(api + "/motor", biler => formater(biler));
51 |
52 | const inputval = motorvogn => {
53 | if (motorvogn.personnr === "") return false
54 | else if (motorvogn.navn === "") return false
55 | else if (motorvogn.adresse === "") return false
56 | else if (motorvogn.kjennetegn === "") return false
57 | else if (motorvogn.merke === "") return false
58 | else return motorvogn.type !== "";
59 | }
60 |
61 | const formater = biler => {
62 | let ut = "| Personnr | Navn | Adresse | " +
63 | "Kjennetegn | Merke | Type |
";
64 |
65 | for (let bil of biler) {
66 | ut += "| " + bil.personnr + " | " + bil.navn + " | " + bil.adresse + " | " +
67 | "" + bil.kjennetegn + " | " + bil.merke + " | " + bil.type + " |
";
68 | }
69 |
70 | ut += "
";
71 |
72 | $("#bilene").html(ut);
73 | }
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
--------------------------------------------------------------------------------
/src/main/resources/static/inputvalidering/registrere.js:
--------------------------------------------------------------------------------
1 | import { apiInputvalidering as api} from "../apiurl.js"
2 | import validering from "./validering.js";
3 |
4 | $(() => { // kjøres når dokumentet er ferdig lastet
5 | hentAlleBiler();
6 |
7 | $("#regMotorvogn").click(() => {
8 | const motorvogn = {
9 | personnr: $("#personnr").val(),
10 | navn: $("#navn").val(),
11 | adresse: $("#adresse").val(),
12 | kjennetegn: $("#kjennetegn").val(),
13 | merke: $("#valgtMerke").val(),
14 | type: $("#valgtType").val(),
15 | };
16 |
17 | if (validering.feil()) {
18 | $.post(api + "/lagre", motorvogn, () => hentAlleBiler());
19 |
20 | window.location.href = "/inputvalidering/index.html";
21 | }
22 | });
23 |
24 | $("#personnr").on("change", () => validering.personnr());
25 | $("#navn").on("change", () => validering.navn());
26 | $("#adresse").on("change", () => validering.adresse());
27 | $("#kjennetegn").on("change", () => validering.kjennetegn());
28 |
29 | });
30 |
31 | const hentAlleBiler = () => {
32 | $.get(api + "/hentBiler", biler => formaterBiler(biler))
33 | .fail(jqXHR => {
34 | const json = $.parseJSON(jqXHR.responseText);
35 | $("#feil").html(json.message);
36 | });
37 | }
38 |
39 | const formaterBiler = biler => {
40 | $("#valgtMerke").off();
41 | let ut = "";
51 | $("#merke").html(ut);
52 |
53 | addEventListeners(biler)
54 | }
55 |
56 | const addEventListeners = biler => {
57 | for (const bil of biler) $("#valgtMerke").on("change", () => finnTyper());
58 | }
59 |
60 | const finnTyper = () => {
61 | const valgtMerke = $("#valgtMerke").val();
62 | $("#feilMerke").html("");
63 | $.get(api + "/hentBiler", biler => formaterTyper(biler, valgtMerke))
64 | .fail(jqXHR => {
65 | const json = $.parseJSON(jqXHR.responseText);
66 | $("#feil").html(json.message);
67 | });
68 | }
69 |
70 | const formaterTyper = (biler, valgtMerke) => {
71 | let ut = "";
78 | $("#type").html(ut);
79 | }
--------------------------------------------------------------------------------
/src/main/resources/static/inputvalidering/endre.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | Motorvognregister
9 |
10 |
11 |
12 |
13 |
14 |
Motorvognregister
15 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
--------------------------------------------------------------------------------
/src/main/resources/static/sesjoner/registrere.js:
--------------------------------------------------------------------------------
1 | import {apiSesjoner as api} from "../apiurl.js"
2 | import validering from "./validering.js"
3 |
4 | $(() => { // kjøres når dokumentet er ferdig lastet
5 | hentAlleBiler();
6 |
7 | $("#regMotorvogn").click(() => {
8 | const motorvogn = {
9 | personnr: $("#personnr").val(),
10 | navn: $("#navn").val(),
11 | adresse: $("#adresse").val(),
12 | kjennetegn: $("#kjennetegn").val(),
13 | merke: $("#valgtMerke").val(),
14 | type: $("#valgtType").val(),
15 | };
16 |
17 | if (validering.ingenfeil()) {
18 | $.post(api + "/lagre", motorvogn, () => {
19 | window.location.href = "/sesjoner/liste.html";
20 | });
21 | }
22 | })
23 |
24 | $("#personnr").on("change", () => validering.personnr());
25 | $("#navn").on("change", () => validering.navn());
26 | $("#adresse").on("change", () => validering.adresse());
27 | $("#kjennetegn").on("change", () => validering.kjennetegn());
28 | });
29 |
30 | const hentAlleBiler = () => {
31 | $.get(api + "/hentBiler", biler => {
32 | formaterBiler(biler);
33 | })
34 | .fail(jqXHR => {
35 | const json = $.parseJSON(jqXHR.responseText);
36 | $("#feil").html(json.message);
37 | });
38 | }
39 |
40 | const formaterBiler = biler => {
41 | $("#valgtMerke").off();
42 | let ut = "";
52 | $("#merke").html(ut);
53 |
54 | addEventListeners(biler)
55 | }
56 |
57 | const addEventListeners = biler => {
58 | for (const bil of biler) $("#valgtMerke").on("change", () => finnTyper());
59 | }
60 |
61 | const finnTyper = () => {
62 | const valgtMerke = $("#valgtMerke").val();
63 | $("#feilMerke").html("");
64 | $.get(api + "/hentBiler", biler => {
65 | formaterTyper(biler, valgtMerke);
66 | })
67 | .fail(jqXHR => {
68 | const json = $.parseJSON(jqXHR.responseText);
69 | $("#feil").html(json.message);
70 | });
71 | }
72 |
73 | const formaterTyper = (biler, valgtMerke) => {
74 | let ut = "";
81 | $("#type").html(ut);
82 | }
--------------------------------------------------------------------------------
/src/main/resources/static/sikkerhet/registrere.js:
--------------------------------------------------------------------------------
1 | import validering from "./validering.js"
2 | import {apiSikkerhet as api} from "../apiurl.js"
3 |
4 | $(() => { // kjøres når dokumentet er ferdig lastet
5 | hentAlleBiler();
6 |
7 | $("#regMotorvogn").click(() => {
8 | const motorvogn = {
9 | personnr: $("#personnr").val(),
10 | navn: $("#navn").val(),
11 | adresse: $("#adresse").val(),
12 | kjennetegn: $("#kjennetegn").val(),
13 | merke: $("#valgtMerke").val(),
14 | type: $("#valgtType").val(),
15 | };
16 |
17 | if (validering.ingenfeil()) {
18 | $.post(api + "/lagre", motorvogn, () => {
19 | window.location.href = "/sikkerhet/liste.html";
20 | });
21 | }
22 | })
23 |
24 | $("#personnr").on("change", () => validering.personnr());
25 | $("#navn").on("change", () => validering.navn());
26 | $("#adresse").on("change", () => validering.adresse());
27 | $("#kjennetegn").on("change", () => validering.kjennetegn());
28 | });
29 |
30 | const hentAlleBiler = () => {
31 | $.get(api + "/hentBiler", biler => {
32 | formaterBiler(biler);
33 | })
34 | .fail(jqXHR => {
35 | const json = $.parseJSON(jqXHR.responseText);
36 | $("#feil").html(json.message);
37 | });
38 | }
39 |
40 | const formaterBiler = biler => {
41 | $("#valgtMerke").off();
42 | let ut = "";
52 | $("#merke").html(ut);
53 |
54 | addEventListeners(biler)
55 | }
56 |
57 | const addEventListeners = biler => {
58 | for (const bil of biler) $("#valgtMerke").on("change", () => finnTyper());
59 | }
60 |
61 | const finnTyper = () => {
62 | const valgtMerke = $("#valgtMerke").val();
63 | $("#feilMerke").html("");
64 | $.get(api + "/hentBiler", biler => {
65 | formaterTyper(biler, valgtMerke);
66 | })
67 | .fail(jqXHR => {
68 | const json = $.parseJSON(jqXHR.responseText);
69 | $("#feil").html(json.message);
70 | });
71 | }
72 |
73 | const formaterTyper = (biler, valgtMerke) => {
74 | let ut = "";
81 | $("#type").html(ut);
82 | }
83 |
84 |
85 |
--------------------------------------------------------------------------------
/src/main/resources/static/stylingbootstrap/index.js:
--------------------------------------------------------------------------------
1 | import { apiLagringServer as api} from "../apiurl.js"
2 |
3 | $(() => {
4 | $("#regMotorvogn").click(() => {
5 | const personnr = $("#personnr");
6 | const navn = $("#navn");
7 | const adresse = $("#adresse");
8 | const kjennetegn = $("#kjennetegn");
9 | const merke = $("#merke");
10 | const type = $("#type");
11 |
12 | const motorvogn = {
13 | personnr: personnr.val(),
14 | navn: navn.val(),
15 | adresse: adresse.val(),
16 | kjennetegn: kjennetegn.val(),
17 | merke: merke.val(),
18 | type: type.val()
19 | };
20 |
21 | if (inputval(motorvogn)) {
22 | $.post(api + "/motor", motorvogn, () => hent());
23 | /*
24 | $.post("/lagre", motorvogn, function (){
25 | $.get("/hentAlle", function (biler) {
26 | formater(biler);
27 | });
28 | });
29 | */
30 | personnr.val("");
31 | navn.val("");
32 | adresse.val("");
33 | kjennetegn.val("");
34 | merke.val("");
35 | type.val("");
36 | } else {
37 | console.log("Mangler input");
38 | }
39 | });
40 |
41 | $("#slettAlle").click(() => {
42 | $.ajax(api + "/motor", {
43 | type: 'DELETE',
44 | success: () => hent(),
45 | error: (jqXhr, textStatus, errorMessage) => console.log(errorMessage)
46 | });
47 | });
48 | });
49 |
50 | const hent = () => $.get(api + "/motor", biler => formater(biler));
51 |
52 | const inputval = motorvogn => {
53 | if (motorvogn.personnr === "") return false
54 | else if (motorvogn.navn === "") return false
55 | else if (motorvogn.adresse === "") return false
56 | else if (motorvogn.kjennetegn === "") return false
57 | else if (motorvogn.merke === "") return false
58 | else return motorvogn.type !== "";
59 | }
60 |
61 | const formater = biler => {
62 | let ut = `
63 |
64 |
65 | | Personnr |
66 | Navn |
67 | Adresse |
68 | Kjennetegn |
69 | Merke |
70 | Type |
71 |
72 | ${biler.map(bil => {
73 | return `
74 |
75 | | ${bil.personnr} |
76 | ${bil.navn} |
77 | ${bil.adresse} |
78 | ${bil.kjennetegn} |
79 | ${bil.merke} |
80 | ${bil.type} |
81 |
`
82 | })}
83 |
84 | `
85 | $("#bilene").html(ut);
86 | }
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/eksamen/v20/ControllerV20.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.eksamen.v20;
2 |
3 | import org.slf4j.Logger;
4 | import org.slf4j.LoggerFactory;
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.jdbc.core.JdbcTemplate;
7 | import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
8 | import org.springframework.web.bind.annotation.*;
9 |
10 | import javax.servlet.http.HttpSession;
11 | import java.util.List;
12 |
13 | @RestController
14 | @SuppressWarnings("all")
15 | @RequestMapping("/api/eksamen/v20/")
16 | public class ControllerV20 {
17 |
18 | @Autowired
19 | HttpSession session;
20 |
21 | @Autowired
22 | private JdbcTemplate db;
23 |
24 | private final Logger logger = LoggerFactory.getLogger(ControllerV20.class);
25 |
26 | @PostMapping("/langrenn")
27 | public boolean lagre(Skiloper skiloper) {
28 | try {
29 | String kryptert = krypterPassord(skiloper.getPassord());
30 |
31 | String SQL = "INSERT INTO utover(fornavn,etternavn,klubb,epost,passord) VALUES(?,?,?,?,?)";
32 | db.update(SQL, skiloper.getFornavn(),
33 | skiloper.getEtternavn(),
34 | skiloper.getKlubb(),
35 | skiloper.getEpost(),
36 | kryptert);
37 |
38 | return true;
39 | } catch (Exception e) {
40 | System.err.println("Feil i insetting i database");
41 | return false;
42 | }
43 | }
44 |
45 | @GetMapping("/langrenn")
46 | public List hent() {
47 | return null;
48 | }
49 |
50 | @DeleteMapping("/langrenn")
51 | public void slett() {
52 |
53 | }
54 |
55 | @PostMapping("/logginn")
56 | public boolean logginn(Bruker bruker) {
57 | if (validerBruker(bruker.getEpost(), bruker.getPassord())) {
58 | session.setAttribute("loggetinn", true);
59 | return true;
60 | } else {
61 | logger.error("Feil i validering av brukernavn eller passord");
62 | return false;
63 | }
64 | }
65 |
66 | @GetMapping("/logginn")
67 | public boolean logginnfrafor() {
68 | return (boolean) session.getAttribute("loggetinn");
69 | }
70 |
71 | private String krypterPassord(String passord) {
72 | BCryptPasswordEncoder bCrypt = new BCryptPasswordEncoder(15);
73 | return bCrypt.encode(passord);
74 | }
75 |
76 | private boolean validerBruker(String epost, String passord) {
77 | String regExEpost = "a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}";
78 | String regExPassord = "(?=.*[A-ZÆØÅa-zæøå])(?=.*\\d)[A-ZÆØÅa-zæøå\\d]{6,} ";
79 |
80 | if (epost.matches(regExEpost) && passord.matches(regExPassord)) {
81 | return true;
82 | } else {
83 | return false;
84 | }
85 | }
86 | }
87 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Web programming spring
2 |
3 | Løsningsforsalg/hjelp til oppgaver
4 | i [DATA1700-1 21V Webprogrammering](https://student.oslomet.no/studier/-/studieinfo/emne/DATA1700/2020/HØST) ved OsloMet
5 |
6 | Deployering av repo: https://oppglfwebprogv21.herokuapp.com
7 |
8 | Klient (frontend) kode ligger i
9 | mappen [/src/main/resources/static/](https://github.com/erikssommer/OppgLfWebProgV21/tree/master/src/main/resources/static)
10 |
11 | Tjener/server (backend) kode ligger i
12 | mappen [/src/main/java/](https://github.com/erikssommer/OppgLfWebProgV21/tree/master/src/main/java)
13 |
14 | ## Emnesammendrag 📝
15 |
16 | 1. Introduksjon 🕹
17 | - Bli kjent med IDE, laste ned jdk
18 | - Opprette nytt Spring Initializr prosjekt
19 | - HalloVerden program i javascript
20 |
21 | 2. JavaScript 1 📠
22 | - Funkjsoner og variabler
23 | - Hendelser
24 | - Utskriftsmetoder
25 |
26 | 3. JavaScript 2 🛠
27 | - Løkker
28 | - Arrays
29 | - Objekter
30 |
31 | 4. JavaScript 3 👩👧👦
32 | - Input
33 | - HTML-kontrollere
34 | - Nedtrekkslister
35 | - Radioknapper
36 | - Avkrysningsbokser
37 |
38 | 5. Introduksjon til jQuery 💰
39 | - Startfunksjonen
40 | - Elementer og hendelser
41 |
42 | 6. Introduksjon til klient/tjener-modellen (Spring) 🛎
43 | - Første tjener program: HelloServer
44 | - Kall/forespørsel fra klient til server og tilbake
45 | - Overføring av objekter
46 |
47 | 7. Mer om HTTP og lagring av data på server 📚
48 | - Post, get, delete (Ajax)
49 | - Objektorientert programmering på server
50 | - Lagring av data i Arraylist i Repository
51 |
52 | 8. Styling med Bootstrap 🎨
53 | - Responsiv grid
54 | - Classes
55 |
56 | 9. Nedtrekkslister, radioknapper og avhuksbokser mot server ☑️
57 | - Dynamisk bygging av html-elementer med data fra server
58 |
59 | 10. Datastrukturer og rekursjon 🔗
60 | - Enkelt lenket linket liste (LinkedList)
61 | - Sirkulær liste
62 | - Stakk
63 | - Binærsøk
64 | - Basistilfelle for rekursive metoder
65 | - Tårnet i hanoi
66 |
67 | 11. Lagre data på server i en relasjonsdatabase 1 🏟
68 | - H2-database (in memory)
69 | - SQL setninger for insetting, sortering og uttak
70 |
71 | 12. Lagre data på server i en relasjonsdatabase 2 💽
72 | - Feilhåndtering og logging av feilmeldinger
73 | - Flere nyttige SQL-setninger
74 |
75 | 13. Inputvalidering på klinet og tjener/server ✅
76 | - Bruk og implementering av regex på klinet
77 | - Bruk og implementering av regex på tjener
78 | - Flytte varidering på server ut i service
79 |
80 | 14. Sesjoner 🍪
81 | - "stateless" protokoll
82 | - Http sessions på server
83 | - Generere sessions-ID-er overførte til kilent
84 | - Cookies (informasjonskapsler)
85 | - Timeout
86 | - Innlogging
87 |
88 | 15. Sikkerhet 🔐
89 | - Kryptering av passord
90 | - Dekryptering av passord
91 | - Bruk av spring framework security
92 | - BCrypt
93 |
--------------------------------------------------------------------------------
/src/main/resources/static/javascript2/js2.js:
--------------------------------------------------------------------------------
1 | function visPersonRegister() {
2 | const personregister = [];
3 |
4 | const person1 = {
5 | navn: "Åge Pedersen",
6 | adresse: "Å 22",
7 | telefonnr: "29439232"
8 | }
9 |
10 | const person2 = {
11 | navn: "Ole Olsen",
12 | adresse: "Trondheimsvegen 22",
13 | telefonnr: "56789357"
14 | }
15 |
16 | const person3 = {
17 | navn: "Erik Sommer",
18 | adresse: "Lillehammer 22",
19 | telefonnr: "6582384"
20 | }
21 |
22 | const person4 = {
23 | navn: "Amalie Bakken",
24 | adresse: "Bærum 23",
25 | telefonnr: "56789357"
26 | }
27 |
28 | const person5 = {
29 | navn: "Line Nilsen",
30 | adresse: "Osloveien 22",
31 | telefonnr: "43565872"
32 | }
33 |
34 | personregister.push(person1, person2, person3, person4, person5);
35 |
36 | for (let person of personregister) {
37 | console.log(person.navn + " " + person.adresse + " " + person.telefonnr);
38 | }
39 |
40 | console.log("");
41 |
42 | function compare(a, b) {
43 | if (a.navn < b.navn) {
44 | return -1;
45 | }
46 |
47 | if (a.navn > b.navn) {
48 | return 1;
49 | }
50 | return 0;
51 | }
52 |
53 | const sortertListe = personregister.sort(compare);
54 |
55 | for (let person of sortertListe) {
56 | console.log(person.navn + " " + person.adresse + " " + person.telefonnr);
57 | }
58 |
59 | console.log("");
60 |
61 | /*
62 | // Egen algoritme for sortering basert på navn. O(n^2) -> lite effektiv når listen med navn blir større.
63 | // Vokser eksponensielt
64 |
65 | for (let i = 0; i < personregister.length; i++) {
66 | for (let j = i + 1; j < personregister.length; j++) {
67 | if (personregister[i].navn > personregister[j].navn) {
68 | let tmp = personregister[i].navn;
69 | personregister[i].navn = personregister[j].navn;
70 | personregister[j].navn = tmp;
71 | }
72 | }
73 | }
74 | */
75 |
76 | for (let person of personregister) {
77 | console.log(person.navn + " " + person.adresse + " " + person.telefonnr);
78 | }
79 |
80 | console.log("");
81 |
82 | const regpersonnr = [];
83 |
84 | const personnr1 = {
85 | navn: "Line Nilsen",
86 | adresse: "Osloveien 22",
87 | telefonnr: "43565872",
88 | personnr: "23049858435"
89 | }
90 |
91 | const personnr2 = {
92 | navn: "Ole Olsen",
93 | adresse: "Trondheimsvegen 22",
94 | telefonnr: "56789357",
95 | personnr: "12096654762"
96 | }
97 |
98 | regpersonnr.push(personnr1, personnr2);
99 |
100 | for (let person of regpersonnr) {
101 | if (person.personnr[8] % 2 === 0) {
102 | console.log("Jente: " + person.navn + " " + person.adresse + " " + person.telefonnr);
103 | }
104 | }
105 |
106 | }
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | 4.0.0
5 |
6 | org.springframework.boot
7 | spring-boot-starter-parent
8 | 2.6.3
9 |
10 |
11 | eriksommer
12 | webprog
13 | 0.0.1-SNAPSHOT
14 | webprog
15 | Project for the class webprogramming at OsloMet
16 |
17 |
18 | 17
19 |
20 |
21 |
22 |
23 | org.springframework.boot
24 | spring-boot-starter-data-rest
25 |
26 |
27 | org.springframework.boot
28 | spring-boot-starter-jdbc
29 |
30 |
31 | org.springframework.boot
32 | spring-boot-starter-web
33 |
34 |
35 |
36 | org.springframework.boot
37 | spring-boot-devtools
38 | runtime
39 | true
40 |
41 |
42 | com.h2database
43 | h2
44 | runtime
45 |
46 |
47 | org.springframework.boot
48 | spring-boot-starter-test
49 | test
50 |
51 |
52 | junit
53 | junit
54 | test
55 |
56 |
57 | org.springframework.boot
58 | spring-boot-starter-data-jpa
59 |
60 |
61 | org.springframework.boot
62 | spring-boot-starter-security
63 |
64 |
65 | org.springframework.boot
66 | spring-boot-starter-thymeleaf
67 |
68 |
69 |
70 |
71 |
72 |
73 | org.springframework.boot
74 | spring-boot-maven-plugin
75 |
76 |
77 |
78 |
79 |
80 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/relasjonsdatabase2/controller/Motorvogn6Controller.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.relasjonsdatabase2.controller;
2 |
3 | import eriksommer.webprog.relasjonsdatabase2.repository.Motorvogn6Repository;
4 | import eriksommer.webprog.relasjonsdatabase2.model.Bil;
5 | import eriksommer.webprog.relasjonsdatabase2.model.Motorvogn;
6 | import org.springframework.beans.factory.annotation.Autowired;
7 | import org.springframework.http.HttpStatus;
8 | import org.springframework.web.bind.annotation.*;
9 |
10 | import javax.servlet.http.HttpServletResponse;
11 | import java.io.IOException;
12 | import java.util.List;
13 |
14 | @RestController
15 | @RequestMapping("/api/relasjonsdatabase2/")
16 | public class Motorvogn6Controller {
17 |
18 | @Autowired
19 | private Motorvogn6Repository rep;
20 |
21 | @GetMapping("/hentBiler")
22 | public List hentBiler(HttpServletResponse response) throws IOException {
23 | List alleBiler = rep.hentAlleBiler();
24 | if (alleBiler == null) {
25 | response.sendError(HttpStatus.INTERNAL_SERVER_ERROR.value(), "Feil i DB -prøv igjen senere");
26 | }
27 | return alleBiler;
28 | }
29 |
30 | @PostMapping("/lagre")
31 | public void lagreKunde(Motorvogn motorvogn, HttpServletResponse response) throws IOException {
32 | if (!rep.lagreMotorvogn(motorvogn)) {
33 | response.sendError(HttpStatus.INTERNAL_SERVER_ERROR.value(), "Feil i DB -prøv igjen senere");
34 | }
35 | }
36 |
37 | @GetMapping("/hentAlle")
38 | public List hentAlleMotorvogner(HttpServletResponse response) throws IOException {
39 | List alleMotorvogner = rep.hentAlleMotorvogner();
40 | if (alleMotorvogner == null) {
41 | response.sendError(HttpStatus.INTERNAL_SERVER_ERROR.value(), "Feil i DB -prøv igjen senere");
42 | }
43 | return alleMotorvogner;
44 | }
45 |
46 | @GetMapping("/henteEnMotorvogn")
47 | public Motorvogn henteEnMotorvogn(int id, HttpServletResponse response) throws IOException {
48 | Motorvogn enMotorvogn = rep.henteEnMotorvogn(id);
49 | if (enMotorvogn == null) {
50 | response.sendError(HttpStatus.INTERNAL_SERVER_ERROR.value(), "Feil i DB -prøv igjen senere");
51 | }
52 | return enMotorvogn;
53 | }
54 |
55 | @PostMapping("/endre")
56 | public void endre(Motorvogn motorvogn, HttpServletResponse response) throws IOException {
57 | if (!rep.endreMotorvogn(motorvogn)) {
58 | response.sendError(HttpStatus.INTERNAL_SERVER_ERROR.value(), "Feil i DB -prøv igjen senere");
59 | }
60 | }
61 |
62 | @DeleteMapping("/slettEnMotorvogn")
63 | public void slettEnMotorvogn(int personnr, HttpServletResponse response) throws IOException {
64 | if (!rep.slettEnMotorvogn(personnr)) {
65 | response.sendError(HttpStatus.INTERNAL_SERVER_ERROR.value(), "Feil i DB -prøv igjen senere");
66 | }
67 | }
68 |
69 | @DeleteMapping("/slettAlle")
70 | public void slettAlleMotorvogner(HttpServletResponse response) throws IOException {
71 | if (!rep.slettAlleMotorvogner()) {
72 | response.sendError(HttpStatus.INTERNAL_SERVER_ERROR.value(), "Feil i DB -prøv igjen senere");
73 | }
74 | }
75 | }
--------------------------------------------------------------------------------
/src/main/resources/static/relasjonsdatabase2/endre.js:
--------------------------------------------------------------------------------
1 | import {apiRelasjonsdatabase2 as api} from "../apiurl.js"
2 |
3 | $(() => { // kjøres når dokumentet er ferdig lastet
4 | hentAlleBiler();
5 | henteEnMotorvogn();
6 |
7 | $("#endreMotorvogn").click(() => {
8 | const motorvogn = {
9 | id: $("#id").val(),
10 | personnr: $("#personnr").val(),
11 | navn: $("#navn").val(),
12 | adresse: $("#adresse").val(),
13 | kjennetegn: $("#kjennetegn").val(),
14 | merke: $("#valgtMerke").val(),
15 | type: $("#valgtType").val(),
16 | };
17 |
18 | $.post(api + "/endre", motorvogn, () => hentAlleBiler())
19 | .fail(jqXHR => {
20 | const json = $.parseJSON(jqXHR.responseText);
21 | $("#feil").html(json.message);
22 | });
23 |
24 | window.location.href = "/relasjonsdatabase2/index.html";
25 | });
26 | });
27 |
28 | const hentAlleBiler = () => {
29 | $.get(api + "/hentBiler", biler => formaterBiler(biler))
30 | .fail(jqXHR => {
31 | const json = $.parseJSON(jqXHR.responseText);
32 | $("#feil").html(json.message);
33 | });
34 | }
35 |
36 | const formaterBiler = biler => {
37 | $("#valgtMerke").off();
38 |
39 | let ut = "";
49 | $("#merke").html(ut);
50 |
51 | addEventListeners(biler);
52 | }
53 |
54 | const addEventListeners = biler => {
55 | for (const bil of biler) $("#valgtMerke").on("change", () => finnTyper());
56 | }
57 |
58 | const finnTyper = () => {
59 | const valgtMerke = $("#valgtMerke").val();
60 | $.get(api + "/hentBiler", biler => formaterTyper(biler, valgtMerke))
61 | .fail(jqXHR => {
62 | const json = $.parseJSON(jqXHR.responseText);
63 | $("#feil").html(json.message);
64 | });
65 | }
66 |
67 | const formaterTyper = (biler, valgtMerke) => {
68 | let ut = "";
75 | $("#type").html(ut);
76 | }
77 |
78 | const henteEnMotorvogn = () => {
79 | const id = window.location.search.substring(1); // kommer fra kallet i index.js
80 | const url = "/henteEnMotorvogn?id=" + id;
81 | $.get(api + url, enMotorVogn => {
82 | // overfør til input-feltene i skjemaet
83 | $("#id").val(enMotorVogn.id); // må ha med denne for å vite hvilken id
84 | $("#personnr").val(enMotorVogn.personnr);
85 | $("#navn").val(enMotorVogn.navn);
86 | $("#adresse").val(enMotorVogn.adresse);
87 | $("#kjennetegn").val(enMotorVogn.kjennetegn);
88 | $("#merke").val(enMotorVogn.merke);
89 | $("#type").val(enMotorVogn.type);
90 | })
91 | .fail(jqXHR => {
92 | const json = $.parseJSON(jqXHR.responseText);
93 | $("#feil").html(json.message);
94 | });
95 | }
--------------------------------------------------------------------------------
/src/main/resources/static/sesjoner/validering.js:
--------------------------------------------------------------------------------
1 | const validerPersonnr = () => {
2 | const personnr = $("#personnr").val();
3 | const regexp = /^[0-9]{11}$/;
4 | const ok = regexp.test(personnr);
5 | if (!ok) {
6 | $("#feilPersonnummer").html("Personnummeret må bestå av 11 siffer");
7 | return false;
8 | } else {
9 | $("#feilPersonnummer").html("");
10 | return true;
11 | }
12 | }
13 |
14 | const validerNavn = () => {
15 | const navn = $("#navn").val();
16 | const regexp = /^[a-zA-ZæøåÆØÅ. \-]{2,20}$/;
17 | const ok = regexp.test(navn);
18 | if (!ok) {
19 | $("#feilNavn").html("Navnet må bestå av 2 til 20 bokstaver");
20 | return false;
21 | } else {
22 | $("#feilNavn").html("");
23 | return true;
24 | }
25 | }
26 |
27 | const validerAdresse = () => {
28 | const adresse = $("#adresse").val();
29 | const regexp = /^[0-9a-zA-ZæøåÆØÅ. \-]{2,30}$/;
30 | const ok = regexp.test(adresse);
31 | if (!ok) {
32 | $("#feilAdresse").html("Adressen må bestå av 2 til 40 bokstaver og tall");
33 | return false;
34 | } else {
35 | $("#feilAdresse").html("");
36 | return true;
37 | }
38 | }
39 |
40 | const validerKjennetegn = () => {
41 | const kjennetegn = $("#kjennetegn").val();
42 | const regexp = /^[A-Z][A-Z][0-9]{5}$/;
43 | const ok = regexp.test(kjennetegn);
44 | if (!ok) {
45 | $("#feilKjennetegn").html("Kjennetegnet må ha to store bokstaver og 5 tall");
46 | return false;
47 | } else {
48 | $("#feilKjennetegn").html("");
49 | return true;
50 | }
51 | }
52 |
53 | const validerMerke = () => {
54 | const merke = $("#valgtMerke").val();
55 | if (merke === "Velg merke") {
56 | $("#feilMerke").html("Velg et merke!");
57 | return false;
58 | } else {
59 | $("#feilMerke").html("");
60 | return true;
61 | }
62 | }
63 |
64 | const ingenValideringsFeil = () => {
65 | return (validerPersonnr() && validerNavn() && validerAdresse() && validerKjennetegn() && validerMerke());
66 | }
67 |
68 | const validerBrukernavn = () => {
69 | const brukernavn = $("#brukernavn").val();
70 | const regexp = /^[a-zA-ZæøåÆØÅ. \-]{2,20}$/;
71 | const ok = regexp.test(brukernavn);
72 | if (!ok) {
73 | $("#feilBrukernavn").html("Navnet må bestå av 2 til 20 bokstaver");
74 | return false;
75 | } else {
76 | $("#feilBrukernavn").html("");
77 | return true;
78 | }
79 | }
80 |
81 | const validerPassord = () => {
82 | const passord = $("#passord").val();
83 | const regexp = /^(?=.*[A-ZÆØÅa-zøæå])(?=.*\d)[A-ZØÆÅa-zøæå\d]{8,}$/;
84 | const ok = regexp.test(passord);
85 | if (!ok) {
86 | $("#feilPassord").html("Passordet må være minimum 8 tegn, minst en bokstav og et tall");
87 | return false;
88 | } else {
89 | $("#feilPassord").html("");
90 | return true;
91 | }
92 | }
93 |
94 | const loggInnValideringOK = () => {
95 | return (validerBrukernavn && validerPassord());
96 | }
97 |
98 | export default {
99 | personnr: validerPersonnr,
100 | navn: validerNavn,
101 | adresse: validerAdresse,
102 | kjennetegn: validerKjennetegn,
103 | merke: validerMerke,
104 | ingenfeil: ingenValideringsFeil,
105 | brukernavn: validerBrukernavn,
106 | passord: validerPassord,
107 | loginn: loggInnValideringOK
108 | }
--------------------------------------------------------------------------------
/src/main/resources/static/sikkerhet/validering.js:
--------------------------------------------------------------------------------
1 | const validerPersonnr = () => {
2 | const personnr = $("#personnr").val();
3 | const regexp = /^[0-9]{11}$/;
4 | const ok = regexp.test(personnr);
5 | if (!ok) {
6 | $("#feilPersonnummer").html("Personnummeret må bestå av 11 siffer");
7 | return false;
8 | } else {
9 | $("#feilPersonnummer").html("");
10 | return true;
11 | }
12 | }
13 |
14 | const validerNavn = () => {
15 | const navn = $("#navn").val();
16 | const regexp = /^[a-zA-ZæøåÆØÅ. \-]{2,20}$/;
17 | const ok = regexp.test(navn);
18 | if (!ok) {
19 | $("#feilNavn").html("Navnet må bestå av 2 til 20 bokstaver");
20 | return false;
21 | } else {
22 | $("#feilNavn").html("");
23 | return true;
24 | }
25 | }
26 |
27 | const validerAdresse = () => {
28 | const adresse = $("#adresse").val();
29 | const regexp = /^[0-9a-zA-ZæøåÆØÅ. \-]{2,30}$/;
30 | const ok = regexp.test(adresse);
31 | if (!ok) {
32 | $("#feilAdresse").html("Adressen må bestå av 2 til 40 bokstaver og tall");
33 | return false;
34 | } else {
35 | $("#feilAdresse").html("");
36 | return true;
37 | }
38 | }
39 |
40 | const validerKjennetegn = () => {
41 | const kjennetegn = $("#kjennetegn").val();
42 | const regexp = /^[A-Z][A-Z][0-9]{5}$/;
43 | const ok = regexp.test(kjennetegn);
44 | if (!ok) {
45 | $("#feilKjennetegn").html("Kjennetegnet må ha to store bokstaver og 5 tall");
46 | return false;
47 | } else {
48 | $("#feilKjennetegn").html("");
49 | return true;
50 | }
51 | }
52 |
53 | const validerMerke = () => {
54 | const merke = $("#valgtMerke").val();
55 | if (merke === "Velg merke") {
56 | $("#feilMerke").html("Velg et merke!");
57 | return false;
58 | } else {
59 | $("#feilMerke").html("");
60 | return true;
61 | }
62 | }
63 |
64 | const ingenValideringsFeil = () => {
65 | return (validerPersonnr() && validerNavn() && validerAdresse() && validerKjennetegn() && validerMerke());
66 | }
67 |
68 | const validerBrukernavn = () => {
69 | const brukernavn = $("#brukernavn").val();
70 | const regexp = /^[a-zA-ZæøåÆØÅ. \-]{2,20}$/;
71 | const ok = regexp.test(brukernavn);
72 | if (!ok) {
73 | $("#feilBrukernavn").html("Navnet må bestå av 2 til 20 bokstaver");
74 | return false;
75 | } else {
76 | $("#feilBrukernavn").html("");
77 | return true;
78 | }
79 | }
80 |
81 | const validerPassord = () => {
82 | const passord = $("#passord").val();
83 | const regexp = /^(?=.*[A-ZÆØÅa-zøæå])(?=.*\d)[A-ZØÆÅa-zøæå\d]{8,}$/;
84 | const ok = regexp.test(passord);
85 | if (!ok) {
86 | $("#feilPassord").html("Passordet må være minimum 8 tegn, minst en bokstav og et tall");
87 | return false;
88 | } else {
89 | $("#feilPassord").html("");
90 | return true;
91 | }
92 | }
93 |
94 | const loggInnValideringOK = () => {
95 | return (validerBrukernavn && validerPassord());
96 | }
97 |
98 | export default {
99 | personnr: validerPersonnr,
100 | navn: validerNavn,
101 | adresse: validerAdresse,
102 | kjennetegn: validerKjennetegn,
103 | merke: validerMerke,
104 | ingenfeil: ingenValideringsFeil,
105 | brukernavn: validerBrukernavn,
106 | passord: validerPassord,
107 | loginn: loggInnValideringOK
108 | }
--------------------------------------------------------------------------------
/src/main/resources/schema.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE Motorvogn
2 | (
3 | personnr INTEGER NOT NULL,
4 | navn VARCHAR(255) NOT NULL,
5 | adresse VARCHAR(255) NOT NULL,
6 | kjennetegn VARCHAR(255) NOT NULL,
7 | merke VARCHAR(255) NOT NULL,
8 | type VARCHAR(255) NOT NULL,
9 | PRIMARY KEY (personnr)
10 | );
11 |
12 | CREATE TABLE Bil
13 | (
14 | id INTEGER AUTO_INCREMENT NOT NULL,
15 | merke VARCHAR(255) NOT NULL,
16 | type VARCHAR(255) NOT NULL,
17 | PRIMARY KEY (id)
18 | );
19 |
20 | -- Motorvogn6 tabeller (her har Motorvogn-tabellen en egen id som autogenereres)
21 |
22 | CREATE TABLE Motorvogn6
23 | (
24 | id INTEGER AUTO_INCREMENT NOT NULL,
25 | personnr INTEGER NOT NULL,
26 | navn VARCHAR(255) NOT NULL,
27 | adresse VARCHAR(255) NOT NULL,
28 | kjennetegn VARCHAR(255) NOT NULL,
29 | merke VARCHAR(255) NOT NULL,
30 | type VARCHAR(255) NOT NULL,
31 | PRIMARY KEY (id)
32 | );
33 |
34 | CREATE TABLE Bil6
35 | (
36 | id INTEGER AUTO_INCREMENT NOT NULL,
37 | merke VARCHAR(255) NOT NULL,
38 | type VARCHAR(255) NOT NULL,
39 | PRIMARY KEY (id)
40 | );
41 |
42 | -- Motorvogn7 tabeller (her har Motorvogn-tabellen en egen id som autogenereres)
43 |
44 | CREATE TABLE Motorvogn7
45 | (
46 | id INTEGER AUTO_INCREMENT NOT NULL,
47 | personnr VARCHAR(255) NOT NULL,
48 | navn VARCHAR(255) NOT NULL,
49 | adresse VARCHAR(255) NOT NULL,
50 | kjennetegn VARCHAR(255) NOT NULL,
51 | merke VARCHAR(255) NOT NULL,
52 | type VARCHAR(255) NOT NULL,
53 | PRIMARY KEY (id)
54 | );
55 |
56 | CREATE TABLE Bil7
57 | (
58 | id INTEGER AUTO_INCREMENT NOT NULL,
59 | merke VARCHAR(255) NOT NULL,
60 | type VARCHAR(255) NOT NULL,
61 | PRIMARY KEY (id)
62 | );
63 |
64 | -- Motorvogn8 tabeller (Sesjoner: bruker er ny)
65 |
66 | CREATE TABLE Motorvogn8
67 | (
68 | id INTEGER AUTO_INCREMENT NOT NULL,
69 | personnr VARCHAR(255) NOT NULL,
70 | navn VARCHAR(255) NOT NULL,
71 | adresse VARCHAR(255) NOT NULL,
72 | kjennetegn VARCHAR(255) NOT NULL,
73 | merke VARCHAR(255) NOT NULL,
74 | type VARCHAR(255) NOT NULL,
75 | PRIMARY KEY (id)
76 | );
77 |
78 | CREATE TABLE Bil8
79 | (
80 | id INTEGER AUTO_INCREMENT NOT NULL,
81 | merke VARCHAR(255) NOT NULL,
82 | type VARCHAR(255) NOT NULL,
83 | PRIMARY KEY (id)
84 | );
85 |
86 | CREATE TABLE Bruker8
87 | (
88 | id INTEGER AUTO_INCREMENT NOT NULL,
89 | brukernavn VARCHAR(255) NOT NULL,
90 | passord VARCHAR(255) NOT NULL,
91 | PRIMARY KEY (id)
92 | );
93 |
94 | -- Motorvogn9 tabeller
95 |
96 | CREATE TABLE Motorvogn9
97 | (
98 | id INTEGER AUTO_INCREMENT NOT NULL,
99 | personnr VARCHAR(255) NOT NULL,
100 | navn VARCHAR(255) NOT NULL,
101 | adresse VARCHAR(255) NOT NULL,
102 | kjennetegn VARCHAR(255) NOT NULL,
103 | merke VARCHAR(255) NOT NULL,
104 | type VARCHAR(255) NOT NULL,
105 | PRIMARY KEY (id)
106 | );
107 |
108 | CREATE TABLE Bil9
109 | (
110 | id INTEGER AUTO_INCREMENT NOT NULL,
111 | merke VARCHAR(255) NOT NULL,
112 | type VARCHAR(255) NOT NULL,
113 | PRIMARY KEY (id)
114 | );
115 |
116 | CREATE TABLE Bruker9
117 | (
118 | id INTEGER AUTO_INCREMENT NOT NULL,
119 | brukernavn VARCHAR(255) NOT NULL,
120 | passord VARCHAR(255) NOT NULL,
121 | PRIMARY KEY (id)
122 | );
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/inputvalidering/repository/Motorvogn7Repository.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.inputvalidering.repository;
2 |
3 | import eriksommer.webprog.inputvalidering.model.Bil;
4 | import eriksommer.webprog.inputvalidering.model.Motorvogn;
5 | import org.slf4j.Logger;
6 | import org.slf4j.LoggerFactory;
7 | import org.springframework.beans.factory.annotation.Autowired;
8 | import org.springframework.jdbc.core.BeanPropertyRowMapper;
9 | import org.springframework.jdbc.core.JdbcTemplate;
10 | import org.springframework.stereotype.Repository;
11 |
12 | import java.util.List;
13 |
14 | @Repository
15 | @SuppressWarnings("all")
16 | public class Motorvogn7Repository {
17 |
18 | @Autowired
19 | private JdbcTemplate db;
20 |
21 | private final Logger logger = LoggerFactory.getLogger(Motorvogn7Repository.class);
22 |
23 | public boolean lagreMotorvogn(Motorvogn m) {
24 | String sql = "INSERT INTO Motorvogn7 (personnr,navn,adresse,kjennetegn,merke,type) VALUES(?,?,?,?,?,?)";
25 | try {
26 | db.update(sql, m.getPersonnr(), m.getNavn(), m.getAdresse(), m.getKjennetegn(), m.getMerke(), m.getType());
27 | return true;
28 | } catch (Exception e) {
29 | logger.error("Feil i lagre motorvogn " + e);
30 | return false;
31 | }
32 | }
33 |
34 | public List hentAlleMotorvogner() {
35 | String sql = "SELECT * FROM Motorvogn7";
36 | try {
37 | return db.query(sql, new BeanPropertyRowMapper(Motorvogn.class));
38 | } catch (Exception e) {
39 | logger.error("Feil i hent alle motorvogner " + e);
40 | return null;
41 | }
42 | }
43 |
44 | public Motorvogn henteEnMotorvogn(int id) {
45 | String sql = "SELECT * FROM Motorvogn7 WHERE id=?";
46 | try {
47 | List enMotorvogn = db.query(sql, new BeanPropertyRowMapper(Motorvogn.class), id);
48 | return enMotorvogn.get(0);
49 | } catch (Exception e) {
50 | logger.error("Feil i hent en motorvogn " + e);
51 | return null;
52 | }
53 | }
54 |
55 | public boolean endreMotorvogn(Motorvogn m) {
56 | String sql = "UPDATE Motorvogn7 SET personnr=?, navn=?,adresse=?,kjennetegn=?,merke=?,type=? where id=?";
57 | try {
58 | db.update(sql, m.getPersonnr(), m.getNavn(), m.getAdresse(), m.getKjennetegn(), m.getMerke(), m.getType(), m.getId());
59 | return true;
60 | } catch (Exception e) {
61 | logger.error("Feil i endre en motorvogn " + e);
62 | return false;
63 | }
64 | }
65 |
66 | public boolean slettEnMotorvogn(String personnr) {
67 | String sql = "DELETE FROM Motorvogn7 WHERE personnr=?";
68 | try {
69 | db.update(sql, personnr);
70 | return true;
71 | } catch (Exception e) {
72 | logger.error("Feil i slett en motorvogn" + e);
73 | return false;
74 | }
75 | }
76 |
77 | public boolean slettAlleMotorvogner() {
78 | String sql = "DELETE FROM Motorvogn7";
79 | try {
80 | db.update(sql);
81 | return true;
82 | } catch (Exception e) {
83 | logger.error("Feil i slett alle motorvogner" + e);
84 | return false;
85 | }
86 | }
87 |
88 | public List hentAlleBiler() {
89 | String sql = "SELECT * FROM Bil7";
90 | try {
91 | return db.query(sql, new BeanPropertyRowMapper(Bil.class));
92 | } catch (Exception e) {
93 | return null;
94 | }
95 | }
96 | }
97 |
--------------------------------------------------------------------------------
/src/main/java/eriksommer/webprog/relasjonsdatabase2/repository/Motorvogn6Repository.java:
--------------------------------------------------------------------------------
1 | package eriksommer.webprog.relasjonsdatabase2.repository;
2 |
3 | import eriksommer.webprog.relasjonsdatabase2.model.Bil;
4 | import eriksommer.webprog.relasjonsdatabase2.model.Motorvogn;
5 | import org.slf4j.Logger;
6 | import org.slf4j.LoggerFactory;
7 | import org.springframework.beans.factory.annotation.Autowired;
8 | import org.springframework.jdbc.core.BeanPropertyRowMapper;
9 | import org.springframework.jdbc.core.JdbcTemplate;
10 | import org.springframework.stereotype.Repository;
11 |
12 | import java.util.List;
13 |
14 | @Repository
15 | @SuppressWarnings("all")
16 | public class Motorvogn6Repository {
17 |
18 | @Autowired
19 | private JdbcTemplate db;
20 |
21 | private final Logger logger = LoggerFactory.getLogger(Motorvogn6Repository.class);
22 |
23 | public boolean lagreMotorvogn(Motorvogn m) {
24 | String sql = "INSERT INTO Motorvogn6 (personnr,navn,adresse,kjennetegn,merke,type) VALUES(?,?,?,?,?,?)";
25 | try {
26 | db.update(sql, m.getPersonnr(), m.getNavn(), m.getAdresse(), m.getKjennetegn(), m.getMerke(), m.getType());
27 | return true;
28 | } catch (Exception e) {
29 | logger.error("Feil i lagre motorvogn " + e);
30 | return false;
31 | }
32 | }
33 |
34 | public List hentAlleMotorvogner() {
35 | String sql = "SELECT * FROM Motorvogn6";
36 | try {
37 | return db.query(sql, new BeanPropertyRowMapper(Motorvogn.class));
38 | } catch (Exception e) {
39 | logger.error("Feil i hent alle motorvogner " + e);
40 | return null;
41 | }
42 | }
43 |
44 | public Motorvogn henteEnMotorvogn(int id) {
45 | String sql = "SELECT * FROM Motorvogn6 WHERE id=?";
46 | try {
47 | List enMotorvogn = db.query(sql, new BeanPropertyRowMapper(Motorvogn.class), id);
48 | return enMotorvogn.get(0);
49 | } catch (Exception e) {
50 | logger.error("Feil i hent en motorvogn " + e);
51 | return null;
52 | }
53 | }
54 |
55 | public boolean endreMotorvogn(Motorvogn m) {
56 | String sql = "UPDATE Motorvogn6 SET personnr=?, navn=?,adresse=?,kjennetegn=?,merke=?,type=? where id=?";
57 | try {
58 | db.update(sql, m.getPersonnr(), m.getNavn(), m.getAdresse(), m.getKjennetegn(), m.getMerke(), m.getType(), m.getId());
59 | return true;
60 | } catch (Exception e) {
61 | logger.error("Feil i endre en motorvogn " + e);
62 | return false;
63 | }
64 | }
65 |
66 | public boolean slettEnMotorvogn(int personnr) {
67 | String sql = "DELETE FROM Motorvogn6 WHERE personnr=?";
68 | try {
69 | db.update(sql, personnr);
70 | return true;
71 | } catch (Exception e) {
72 | logger.error("Feil i slett en motorvogn" + e);
73 | return false;
74 | }
75 | }
76 |
77 | public boolean slettAlleMotorvogner() {
78 | String sql = "DELETE FROM Motorvogn6";
79 | try {
80 | db.update(sql);
81 | return true;
82 | } catch (Exception e) {
83 | logger.error("Feil i slett alle motorvogner" + e);
84 | return false;
85 | }
86 | }
87 |
88 | public List hentAlleBiler() {
89 | String sql = "SELECT * FROM Bil6";
90 | try {
91 | return db.query(sql, new BeanPropertyRowMapper(Bil.class));
92 | } catch (Exception e) {
93 | return null;
94 | }
95 | }
96 | }
97 |
--------------------------------------------------------------------------------
/src/main/resources/static/inputvalidering/endre.js:
--------------------------------------------------------------------------------
1 | import {apiInputvalidering as api} from "../apiurl.js"
2 | import validering from "./validering.js"
3 |
4 | $(() => { // kjøres når dokumentet er ferdig lastet
5 | hentAlleBiler();
6 | henteEnMotorvogn();
7 |
8 | $("#endreMotorvogn").click(() => {
9 | const motorvogn = {
10 | id: $("#id").val(),
11 | personnr: $("#personnr").val(),
12 | navn: $("#navn").val(),
13 | adresse: $("#adresse").val(),
14 | kjennetegn: $("#kjennetegn").val(),
15 | merke: $("#valgtMerke").val(),
16 | type: $("#valgtType").val(),
17 | };
18 |
19 | if (validering.feil()) {
20 | $.post(api + "/endre", motorvogn, () => hentAlleBiler())
21 | .fail(jqXHR => {
22 | const json = $.parseJSON(jqXHR.responseText);
23 | $("#feil").html(json.message);
24 | });
25 |
26 | window.location.href = "index.html";
27 | }
28 | });
29 |
30 | $("#personnr").on("change", () => validering.personnr());
31 | $("#navn").on("change", () => validering.navn());
32 | $("#adresse").on("change", () => validering.adresse());
33 | $("#kjennetegn").on("change", () => validering.kjennetegn());
34 |
35 | });
36 |
37 | const hentAlleBiler = () => {
38 | $.get(api + "/hentBiler", biler => formaterBiler(biler))
39 | .fail(jqXHR => {
40 | const json = $.parseJSON(jqXHR.responseText);
41 | $("#feil").html(json.message);
42 | });
43 | }
44 |
45 | const formaterBiler = biler => {
46 | $("#valgtMerke").off();
47 | let ut = "";
57 | $("#merke").html(ut);
58 |
59 | addEventListeners(biler);
60 | }
61 |
62 | const addEventListeners = biler => {
63 | for (const bil of biler) $("#valgtMerke").on("change", () => finnTyper());
64 | }
65 |
66 | const finnTyper = () => {
67 | const valgtMerke = $("#valgtMerke").val();
68 | $("#feilMerke").html("");
69 | $.get(api + "/hentBiler", biler => formaterTyper(biler, valgtMerke))
70 | .fail(jqXHR => {
71 | const json = $.parseJSON(jqXHR.responseText);
72 | $("#feil").html(json.message);
73 | });
74 | }
75 |
76 | const formaterTyper = (biler, valgtMerke) => {
77 | let ut = "";
84 | $("#type").html(ut);
85 | }
86 |
87 | const henteEnMotorvogn = () => {
88 | const id = window.location.search.substring(1); // kommer fra kallet i index.js
89 | const url = "/henteEnMotorvogn?id=" + id;
90 | $.get(api + url, enMotorVogn => {
91 | // overfør til input-feltene i skjemaet
92 | $("#id").val(enMotorVogn.id); // må ha med denne for å vite hvilken id
93 | $("#personnr").val(enMotorVogn.personnr);
94 | $("#navn").val(enMotorVogn.navn);
95 | $("#adresse").val(enMotorVogn.adresse);
96 | $("#kjennetegn").val(enMotorVogn.kjennetegn);
97 | $("#merke").val(enMotorVogn.merke);
98 | $("#type").val(enMotorVogn.type);
99 | })
100 | .fail(jqXHR => {
101 | const json = $.parseJSON(jqXHR.responseText);
102 | $("#feil").html(json.message);
103 | });
104 | }
--------------------------------------------------------------------------------
/src/main/resources/static/sikkerhet/endre.js:
--------------------------------------------------------------------------------
1 | import validering from "./validering.js"
2 | import {apiSikkerhet as api} from "../apiurl.js"
3 |
4 | $(() => { // kjøres når dokumentet er ferdig lastet
5 | hentAlleBiler();
6 | henteEnMotorvogn();
7 |
8 | $("#endreMotorvogn").click(() => {
9 | const motorvogn = {
10 | id: $("#id").val(),
11 | personnr: $("#personnr").val(),
12 | navn: $("#navn").val(),
13 | adresse: $("#adresse").val(),
14 | kjennetegn: $("#kjennetegn").val(),
15 | merke: $("#valgtMerke").val(),
16 | type: $("#valgtType").val(),
17 | };
18 |
19 | if (validering.ingenfeil()) {
20 | $.post(api + "/endre", motorvogn, () => {
21 | window.location.href = "/sikkerhet/liste.html";
22 | })
23 | .fail(jqXHR => {
24 | const json = $.parseJSON(jqXHR.responseText);
25 | $("#feil").html(json.message);
26 | });
27 | }
28 | })
29 |
30 | $("#personnr").on("change", () => validering.personnr());
31 | $("#navn").on("change", () => validering.navn());
32 | $("#adresse").on("change", () => validering.adresse());
33 | $("#kjennetegn").on("change", () => validering.kjennetegn());
34 |
35 | });
36 |
37 | const hentAlleBiler = () => {
38 | $.get(api + "/hentBiler", biler => {
39 | formaterBiler(biler);
40 | })
41 | .fail(jqXHR => {
42 | const json = $.parseJSON(jqXHR.responseText);
43 | $("#feil").html(json.message);
44 | });
45 | }
46 |
47 | const formaterBiler = biler => {
48 | $("#valgtMerke").off();
49 | let ut = "";
59 | $("#merke").html(ut);
60 |
61 | addEventListeners(biler);
62 | }
63 |
64 | const addEventListeners = biler => {
65 | for (const bil of biler) $("#valgtMerke").on("change", () => finnTyper());
66 | }
67 |
68 | const finnTyper = () => {
69 | const valgtMerke = $("#valgtMerke").val();
70 | $("#feilMerke").html("");
71 | $.get(api + "/hentBiler", biler => {
72 | formaterTyper(biler, valgtMerke);
73 | })
74 | .fail(jqXHR => {
75 | const json = $.parseJSON(jqXHR.responseText);
76 | $("#feil").html(json.message);
77 | });
78 | }
79 |
80 | const formaterTyper = (biler, valgtMerke) => {
81 | let ut = "";
88 | $("#type").html(ut);
89 | }
90 |
91 | const henteEnMotorvogn = () => {
92 | const id = window.location.search.substring(1); // kommer fra kallet i index.js
93 | const url = "/henteEnMotorvogn?id=" + id;
94 | $.get(api + url, enMotorVogn => {
95 | // overfør til input-feltene i skjemaet
96 | $("#id").val(enMotorVogn.id); // må ha med denne for å vite hvilken id
97 | $("#personnr").val(enMotorVogn.personnr);
98 | $("#navn").val(enMotorVogn.navn);
99 | $("#adresse").val(enMotorVogn.adresse);
100 | $("#kjennetegn").val(enMotorVogn.kjennetegn);
101 | $("#merke").val(enMotorVogn.merke);
102 | $("#type").val(enMotorVogn.type);
103 | })
104 | .fail(jqXHR => {
105 | const json = $.parseJSON(jqXHR.responseText);
106 | $("#feil").html(json.message);
107 | });
108 | }
109 |
110 |
111 |
--------------------------------------------------------------------------------
/src/main/resources/static/sesjoner/endre.js:
--------------------------------------------------------------------------------
1 | import {apiSesjoner as api} from "../apiurl.js"
2 | import validering from "./validering.js"
3 |
4 | $(() => { // kjøres når dokumentet er ferdig lastet
5 | hentAlleBiler();
6 | henteEnMotorvogn();
7 |
8 | $("#endreMotorvogn").click(() => {
9 | const motorvogn = {
10 | id: $("#id").val(),
11 | personnr: $("#personnr").val(),
12 | navn: $("#navn").val(),
13 | adresse: $("#adresse").val(),
14 | kjennetegn: $("#kjennetegn").val(),
15 | merke: $("#valgtMerke").val(),
16 | type: $("#valgtType").val(),
17 | };
18 |
19 | if (validering.ingenfeil()) {
20 | $.post(api + "/endre", motorvogn, () => {
21 | hentAlleBiler();
22 | })
23 | .fail(jqXHR => {
24 | const json = $.parseJSON(jqXHR.responseText);
25 | $("#feil").html(json.message);
26 | });
27 |
28 | window.location.href = "/sesjoner/liste.html";
29 | }
30 | })
31 |
32 | $("#personnr").on("change", () => validering.personnr());
33 | $("#navn").on("change", () => validering.navn());
34 | $("#adresse").on("change", () => validering.adresse());
35 | $("#kjennetegn").on("change", () => validering.kjennetegn());
36 |
37 | });
38 |
39 | const hentAlleBiler = () => {
40 | $.get(api + "/hentBiler", biler => {
41 | formaterBiler(biler);
42 | })
43 | .fail(jqXHR => {
44 | const json = $.parseJSON(jqXHR.responseText);
45 | $("#feil").html(json.message);
46 | });
47 | }
48 |
49 | const formaterBiler = biler => {
50 | $("#valgtMerke").off();
51 | let ut = "";
61 | $("#merke").html(ut);
62 |
63 | addEventListeners(biler);
64 | }
65 |
66 | const addEventListeners = biler => {
67 | for (const bil of biler) $("#valgtMerke").on("change", () => finnTyper());
68 | }
69 |
70 | const finnTyper = () => {
71 | const valgtMerke = $("#valgtMerke").val();
72 | $("#feilMerke").html("");
73 | $.get(api + "/hentBiler", biler => {
74 | formaterTyper(biler, valgtMerke);
75 | })
76 | .fail(jqXHR => {
77 | const json = $.parseJSON(jqXHR.responseText);
78 | $("#feil").html(json.message);
79 | });
80 | }
81 |
82 | const formaterTyper = (biler, valgtMerke) => {
83 | let ut = "";
90 | $("#type").html(ut);
91 | }
92 |
93 | const henteEnMotorvogn = () => {
94 | const id = window.location.search.substring(1); // kommer fra kallet i index.js
95 | const url = "/henteEnMotorvogn?id=" + id;
96 | $.get(api + url, enMotorVogn => {
97 | // overfør til input-feltene i skjemaet
98 | $("#id").val(enMotorVogn.id); // må ha med denne for å vite hvilken id
99 | $("#personnr").val(enMotorVogn.personnr);
100 | $("#navn").val(enMotorVogn.navn);
101 | $("#adresse").val(enMotorVogn.adresse);
102 | $("#kjennetegn").val(enMotorVogn.kjennetegn);
103 | $("#merke").val(enMotorVogn.merke);
104 | $("#type").val(enMotorVogn.type);
105 | })
106 | .fail(jqXHR => {
107 | const json = $.parseJSON(jqXHR.responseText);
108 | $("#feil").html(json.message);
109 | });
110 | }
--------------------------------------------------------------------------------