Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
alx_mszczonow_3
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Patryk Czarnik
alx_mszczonow_3
Commits
5e7df664
Commit
5e7df664
authored
Jul 25, 2023
by
Patryk Czarnik
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Kalkulator - historia i pozostałe wersje
parent
55f8d5c6
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
117 additions
and
3 deletions
+117
-3
HistoriaKalkulatoraJSON.java
src/main/java/alx/kalkulator/HistoriaKalkulatoraJSON.java
+19
-0
InnaLogika.java
src/main/java/alx/kalkulator/InnaLogika.java
+24
-0
KalkulatorController.java
src/main/java/alx/kalkulator/KalkulatorController.java
+1
-0
LogikaKalkulatora.java
src/main/java/alx/kalkulator/LogikaKalkulatora.java
+4
-0
LogikaKalkulatoraImpl.java
src/main/java/alx/kalkulator/LogikaKalkulatoraImpl.java
+20
-3
WstrzykiwaniePrzezKonstruktor.java
...in/java/alx/kalkulator/WstrzykiwaniePrzezKonstruktor.java
+40
-0
kalkulator.html
src/main/resources/templates/kalkulator.html
+9
-0
No files found.
src/main/java/alx/kalkulator/HistoriaKalkulatoraJSON.java
0 → 100644
View file @
5e7df664
package
alx
.
kalkulator
;
import
java.util.List
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RestController
;
@RestController
public
class
HistoriaKalkulatoraJSON
{
@Autowired
private
LogikaKalkulatora
logika
;
@GetMapping
(
"/historia.json"
)
public
List
<
String
>
pokazHistorie
()
{
return
logika
.
getHistoriaDzialan
();
}
}
src/main/java/alx/kalkulator/InnaLogika.java
0 → 100644
View file @
5e7df664
package
alx
.
kalkulator
;
import
java.util.List
;
// @Component("inna") i potem za pomocą Qualifier wskazać w miejscu użycia (podczas wstrzykiwania)
// albo można za pomocą @Primary wskazać, że teraz ten komponent ma być wybrany
public
class
InnaLogika
implements
LogikaKalkulatora
{
@Override
public
long
oblicz
(
long
liczba1
,
long
liczba2
,
String
operacja
)
{
long
wynik
=
switch
(
operacja
)
{
case
"+"
->
liczba1
+
liczba2
+
1000
;
case
"-"
->
liczba1
-
liczba2
+
1000
;
case
"*"
->
liczba1
*
liczba2
+
1000
;
case
"/"
->
liczba1
/
liczba2
+
1000
;
default
->
0L
;
};
return
wynik
;
}
@Override
public
List
<
String
>
getHistoriaDzialan
()
{
return
List
.
of
(
"Ala"
,
"Ola"
,
"Ela"
);
}
}
src/main/java/alx/kalkulator/KalkulatorController.java
View file @
5e7df664
...
...
@@ -22,6 +22,7 @@ public class KalkulatorController {
public
String
kalkulator
(
Long
liczba1
,
Long
liczba2
,
String
operacja
,
Model
model
)
{
Long
wynik
=
logika
.
oblicz
(
liczba1
,
liczba2
,
operacja
);
model
.
addAttribute
(
"wynik"
,
wynik
);
model
.
addAttribute
(
"historia"
,
logika
.
getHistoriaDzialan
());
return
"kalkulator.html"
;
}
}
src/main/java/alx/kalkulator/LogikaKalkulatora.java
View file @
5e7df664
package
alx
.
kalkulator
;
import
java.util.List
;
public
interface
LogikaKalkulatora
{
long
oblicz
(
long
liczba1
,
long
liczba2
,
String
operacja
);
List
<
String
>
getHistoriaDzialan
();
}
src/main/java/alx/kalkulator/LogikaKalkulatoraImpl.java
View file @
5e7df664
...
...
@@ -2,19 +2,36 @@ package alx.kalkulator;
import
org.springframework.stereotype.Component
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.List
;
/* LogikaKalkulatora jest przykładem "komponentu".
* Podczas startu aplikacji Spring tworzy jeden obiekt tej klasy (tzw. singleton) i zapamiętuje go jako "bean".
* W starszych wersjach Springa tego typu klasy należało zadeklarować w pliku beans.xml.
* Obecnie używa się raczej adnotacji. Takie działanie mają adnotacje: @Component, @Service, @Repository, @Controller.
*
* Inny sposób tworzenia beanów/kompomentów: klasa fabryczna z metodami oznaczonymi @Bean (będą inne przykłady).
*/
@Component
public
class
LogikaKalkulatoraImpl
implements
LogikaKalkulatora
{
private
final
List
<
String
>
historiaDzialan
=
Collections
.
synchronizedList
(
new
ArrayList
<>());
@Override
public
long
oblicz
(
long
liczba1
,
long
liczba2
,
String
operacja
)
{
long
wynik
=
switch
(
operacja
)
{
long
wynik
=
switch
(
operacja
)
{
case
"+"
->
liczba1
+
liczba2
;
case
"-"
->
liczba1
-
liczba2
;
case
"*"
->
liczba1
*
liczba2
;
case
"/"
->
liczba1
/
liczba2
;
default
->
0L
;
default
->
0L
;
};
historiaDzialan
.
add
(
String
.
format
(
"%d %s %d = %d"
,
liczba1
,
operacja
,
liczba2
,
wynik
));
return
wynik
;
}
@Override
public
List
<
String
>
getHistoriaDzialan
()
{
return
Collections
.
unmodifiableList
(
historiaDzialan
);
}
}
src/main/java/alx/kalkulator/WstrzykiwaniePrzezKonstruktor.java
0 → 100644
View file @
5e7df664
package
alx
.
kalkulator
;
import
java.util.stream.Collectors
;
import
org.springframework.stereotype.Controller
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.ResponseBody
;
@Controller
public
class
WstrzykiwaniePrzezKonstruktor
{
private
LogikaKalkulatora
logikaKalkulatora
;
// Jeśli jedynym dostępnym konstruktorem jest taki, który wymaga parametrów,
// Spring wywoła własnie ten konstruktor i przekaże wymagane parametry, o ile uda mu się takie obiekty znaleźć.
// To też jest forma wstrzykiwania zależności.
// Zauważmy, że działa bez żadnej adnotacji przed tym konstruktorem.
public
WstrzykiwaniePrzezKonstruktor
(
LogikaKalkulatora
logikaKalkulatora
)
{
this
.
logikaKalkulatora
=
logikaKalkulatora
;
}
// public WstrzykiwaniePrzezKonstruktor(@Qualifier("inna") LogikaKalkulatora logikaKalkulatora) {
// this.logikaKalkulatora = logikaKalkulatora;
// }
@GetMapping
(
path
=
"/liczenie"
,
produces
=
"text/plain"
)
@ResponseBody
public
String
liczenie
(
Long
liczba1
,
Long
liczba2
,
String
operacja
)
{
return
String
.
valueOf
(
logikaKalkulatora
.
oblicz
(
liczba1
,
liczba2
,
operacja
));
}
@GetMapping
(
path
=
"/historia.txt"
,
produces
=
"text/plain"
)
@ResponseBody
public
String
dajHistorie
()
{
return
logikaKalkulatora
.
getHistoriaDzialan
()
.
stream
()
.
map
(
s
->
" → "
+
s
)
.
collect
(
Collectors
.
joining
(
"\n"
));
}
}
src/main/resources/templates/kalkulator.html
View file @
5e7df664
...
...
@@ -29,6 +29,15 @@
<strong
th:text=
"${wynik}"
>
5
</strong>
</div>
<section
th:if=
"${historia != null and !historia.isEmpty()}"
>
<h2>
Historia działań
</h2>
<ul>
<li
th:each=
"element: ${historia}"
th:text=
"${element}"
>
2 + 2 = 4
</li>
</ul>
</section>
<div><a
th:href=
"@{/historia.json}"
>
historia JSON
</a></div>
<div><a
th:href=
"@{/historia.txt}"
>
historia TXT
</a></div>
<div><a
th:href=
"@{/}"
>
wróć do strony głównej
</a></div>
</body>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment