Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
naomod
Object-Oriented Software Analysis and Design (OOAD)
Projet 2020 - Not Alone
Commits
7a389a5f
Commit
7a389a5f
authored
Dec 01, 2020
by
Corentin Guillevic
Browse files
Create module not-alone-database and move some classes in
parent
50c92125
Changes
108
Hide whitespace changes
Inline
Side-by-side
not-alone-database/pom.xml
0 → 100644
View file @
7a389a5f
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns=
"http://maven.apache.org/POM/4.0.0"
xmlns:xsi=
"http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<modelVersion>
4.0.0
</modelVersion>
<parent>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-parent
</artifactId>
<version>
2.4.0
</version>
<relativePath/>
</parent>
<groupId>
fr.univnantes.alma
</groupId>
<artifactId>
not-alone-database
</artifactId>
<version>
1.0-SNAPSHOT
</version>
<name>
Not Alone Server
</name>
<description>
Spring Boot Not Alone database
</description>
<dependencies>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter
</artifactId>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-web
</artifactId>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-data-jpa
</artifactId>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-test
</artifactId>
<scope>
test
</scope>
</dependency>
<dependency>
<groupId>
com.h2database
</groupId>
<artifactId>
h2
</artifactId>
<scope>
runtime
</scope>
</dependency>
<dependency>
<groupId>
org.testng
</groupId>
<artifactId>
testng
</artifactId>
<version>
RELEASE
</version>
<scope>
test
</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-maven-plugin
</artifactId>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
not-alone-
server
/src/main/java/fr/univnantes/alma/data/
item/
AccessingDataJpaApplication.java
→
not-alone-
database
/src/main/java/fr/univnantes/alma/data/AccessingDataJpaApplication.java
View file @
7a389a5f
package
fr.univnantes.alma.data
.item
;
package
fr.univnantes.alma.data
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.boot.CommandLineRunner
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.context.annotation.Bean
;
@SpringBootApplication
public
class
AccessingDataJpaApplication
{
...
...
not-alone-
server
/src/main/java/fr/univnantes/alma/data/item/User.java
→
not-alone-
database
/src/main/java/fr/univnantes/alma/data/item/User.java
View file @
7a389a5f
File moved
not-alone-
server
/src/main/java/fr/univnantes/alma/data/item/UserRepository.java
→
not-alone-
database
/src/main/java/fr/univnantes/alma/data/item/UserRepository.java
View file @
7a389a5f
package
fr.univnantes.alma.data.item
;
import
java.util.List
;
import
fr.univnantes.alma.data.item.User
;
import
org.springframework.data.repository.CrudRepository
;
...
...
not-alone-
server
/src/test/java/
fr/univnantes/alma/data/item
/DataStoreTest.java
→
not-alone-
database
/src/test/java/
data
/DataStoreTest.java
View file @
7a389a5f
package
fr.univnantes.alma.data.item
;
package
data
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
import
fr.univnantes.alma.data.item.User
;
import
fr.univnantes.alma.data.item.UserRepository
;
import
org.assertj.core.api.Assertions
;
import
org.junit.Test
;
import
org.junit.runner.RunWith
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
...
@@ -22,16 +25,16 @@ public class DataStoreTest {
@Test
public
void
no_User
(){
Iterable
<
User
>
customers
=
repository
.
findAll
();
assertThat
(
customers
).
isEmpty
();
Assertions
.
assertThat
(
customers
).
isEmpty
();
}
@Test
public
void
should_store
(){
User
u
=
new
User
(
"ok"
,
"Jetecarryenadc"
,
"ok"
);
User
user
=
repository
.
save
(
new
User
(
"JackyLove@world.net"
,
"Jetecarryenadc"
,
"JackyLove"
));
assertThat
(
user
).
hasFieldOrPropertyWithValue
(
"mail"
,
"JackyLove@world.net"
);
Assertions
.
assertThat
(
user
).
hasFieldOrPropertyWithValue
(
"mail"
,
"JackyLove@world.net"
);
// assertThat(user).hasFieldOrPropertyWithValue("password",u.getPasswordHash());
assertThat
(
user
).
hasFieldOrPropertyWithValue
(
"pseudo"
,
"JackyLove"
);
Assertions
.
assertThat
(
user
).
hasFieldOrPropertyWithValue
(
"pseudo"
,
"JackyLove"
);
}
}
\ No newline at end of file
not-alone-server/pom.xml
View file @
7a389a5f
...
...
@@ -17,21 +17,17 @@
<description>
Spring Boot Not Alone server
</description>
<dependencies>
<dependency>
<groupId>
fr.univnantes.alma
</groupId>
<artifactId>
not-alone-database
</artifactId>
<version>
1.0-SNAPSHOT
</version>
</dependency>
<dependency>
<groupId>
org.mockito
</groupId>
<artifactId>
mockito-core
</artifactId>
<version>
3.3.3
</version>
<scope>
test
</scope>
</dependency>
<dependency>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-data-jpa
</artifactId>
</dependency>
<dependency>
<groupId>
com.h2database
</groupId>
<artifactId>
h2
</artifactId>
<scope>
runtime
</scope>
</dependency>
<dependency>
<groupId>
fr.univnantes.alma
</groupId>
<artifactId>
not-alone-core
</artifactId>
...
...
@@ -59,12 +55,6 @@
<artifactId>
spring-boot-starter-test
</artifactId>
<scope>
test
</scope>
</dependency>
<dependency>
<groupId>
org.testng
</groupId>
<artifactId>
testng
</artifactId>
<version>
RELEASE
</version>
<scope>
test
</scope>
</dependency>
</dependencies>
<build>
...
...
not-alone-server/src/main/java/fr/univnantes/alma/common/GameService.java
View file @
7a389a5f
package
fr.univnantes.alma.common
;
import
fr.univnantes.alma.game.item.board.Board
;
import
fr.univnantes.alma.game.item.planet.Planet
;
import
fr.univnantes.alma.
server.
game.item.board.Board
;
import
fr.univnantes.alma.
server.
game.item.planet.Planet
;
import
fr.univnantes.alma.thrift.InvalidOperationException
;
import
fr.univnantes.alma.thrift.Response
;
...
...
not-alone-server/src/main/java/fr/univnantes/alma/
data
/NotAloneDatabase.java
→
not-alone-server/src/main/java/fr/univnantes/alma/
common
/NotAloneDatabase.java
View file @
7a389a5f
package
fr.univnantes.alma.
data
;
package
fr.univnantes.alma.
common
;
import
fr.univnantes.alma.data.item.User
;
import
fr.univnantes.alma.game.item.card.*
;
import
fr.univnantes.alma.
server.
game.item.card.*
;
import
java.util.List
;
...
...
not-alone-server/src/main/java/fr/univnantes/alma/data/DatabaseFactory.java
View file @
7a389a5f
package
fr.univnantes.alma.data
;
import
fr.univnantes.alma.common.NotAloneDatabase
;
public
class
DatabaseFactory
{
public
static
NotAloneDatabase
getDatabase
(){
...
...
not-alone-server/src/main/java/fr/univnantes/alma/data/DatabaseStub.java
View file @
7a389a5f
package
fr.univnantes.alma.data
;
import
fr.univnantes.alma.common.NotAloneDatabase
;
import
fr.univnantes.alma.data.item.User
;
import
fr.univnantes.alma.game.item.Phase
;
import
fr.univnantes.alma.game.item.card.CardName
;
import
fr.univnantes.alma.game.item.card.PlaceCard
;
import
fr.univnantes.alma.game.item.card.SurvivalCard
;
import
fr.univnantes.alma.game.item.card.TrackingCard
;
import
fr.univnantes.alma.game.item.power.PowerType
;
import
fr.univnantes.alma.server.game.item.Phase
;
import
fr.univnantes.alma.server.game.item.card.CardName
;
import
fr.univnantes.alma.server.game.item.card.PlaceCard
;
import
fr.univnantes.alma.server.game.item.card.SurvivalCard
;
import
fr.univnantes.alma.server.game.item.card.TrackingCard
;
import
java.util.*
;
...
...
not-alone-server/src/main/java/fr/univnantes/alma/NotAloneApplication.java
→
not-alone-server/src/main/java/fr/univnantes/alma/
server/
NotAloneApplication.java
View file @
7a389a5f
package
fr.univnantes.alma
;
package
fr.univnantes.alma
.server
;
import
fr.univnantes.alma.handler.GameServiceHandler
;
import
fr.univnantes.alma.
server.
handler.GameServiceHandler
;
import
fr.univnantes.alma.thrift.GameServerService
;
import
org.apache.thrift.protocol.TBinaryProtocol
;
import
org.apache.thrift.protocol.TProtocolFactory
;
...
...
@@ -14,7 +14,7 @@ import org.springframework.context.annotation.Configuration;
@Configuration
@EnableAutoConfiguration
@ComponentScan
@ComponentScan
(
basePackages
=
{
"fr.univnantes.alma.server"
})
public
class
NotAloneApplication
{
public
static
void
main
(
String
[]
args
)
{
...
...
not-alone-server/src/main/java/fr/univnantes/alma/game/Game.java
→
not-alone-server/src/main/java/fr/univnantes/alma/
server/
game/Game.java
View file @
7a389a5f
package
fr.univnantes.alma.game
;
package
fr.univnantes.alma.
server.
game
;
import
fr.univnantes.alma.data.DatabaseFactory
;
import
fr.univnantes.alma.
data
.NotAloneDatabase
;
import
fr.univnantes.alma.game.item.Phase
;
import
fr.univnantes.alma.game.item.Reserve
;
import
fr.univnantes.alma.game.item.action.*
;
import
fr.univnantes.alma.game.item.board.Board
;
import
fr.univnantes.alma.game.item.card.*
;
import
fr.univnantes.alma.game.item.jeton.JetonSymbol
;
import
fr.univnantes.alma.game.item.jeton.PlacedJeton
;
import
fr.univnantes.alma.game.item.pioche.Pioche
;
import
fr.univnantes.alma.game.item.planet.Place
;
import
fr.univnantes.alma.game.item.planet.Planet
;
import
fr.univnantes.alma.game.item.player.Creature
;
import
fr.univnantes.alma.game.item.player.Player
;
import
fr.univnantes.alma.game.item.player.Traque
;
import
fr.univnantes.alma.game.item.power.Power
;
import
fr.univnantes.alma.game.item.power.PowerType
;
import
fr.univnantes.alma.game.item.power.modificator.PowerModificator
;
import
fr.univnantes.alma.game.item.power.modificator.PowerModificatorType
;
import
fr.univnantes.alma.game.item.power.recurrent.PowerRecurrent
;
import
fr.univnantes.alma.game.utilitary.Conversion
;
import
fr.univnantes.alma.game.utilitary.Pair
;
import
fr.univnantes.alma.handler.GameClientHandler
;
import
fr.univnantes.alma.
common
.NotAloneDatabase
;
import
fr.univnantes.alma.
server.
game.item.Phase
;
import
fr.univnantes.alma.
server.
game.item.Reserve
;
import
fr.univnantes.alma.
server.
game.item.action.*
;
import
fr.univnantes.alma.
server.
game.item.board.Board
;
import
fr.univnantes.alma.
server.
game.item.card.*
;
import
fr.univnantes.alma.
server.
game.item.jeton.JetonSymbol
;
import
fr.univnantes.alma.
server.
game.item.jeton.PlacedJeton
;
import
fr.univnantes.alma.
server.
game.item.pioche.Pioche
;
import
fr.univnantes.alma.
server.
game.item.planet.Place
;
import
fr.univnantes.alma.
server.
game.item.planet.Planet
;
import
fr.univnantes.alma.
server.
game.item.player.Creature
;
import
fr.univnantes.alma.
server.
game.item.player.Player
;
import
fr.univnantes.alma.
server.
game.item.player.Traque
;
import
fr.univnantes.alma.
server.
game.item.power.Power
;
import
fr.univnantes.alma.
server.
game.item.power.PowerType
;
import
fr.univnantes.alma.
server.
game.item.power.modificator.PowerModificator
;
import
fr.univnantes.alma.
server.
game.item.power.modificator.PowerModificatorType
;
import
fr.univnantes.alma.
server.
game.item.power.recurrent.PowerRecurrent
;
import
fr.univnantes.alma.
server.
game.utilitary.Conversion
;
import
fr.univnantes.alma.
server.
game.utilitary.Pair
;
import
fr.univnantes.alma.
server.
handler.GameClientHandler
;
import
fr.univnantes.alma.thrift.Response
;
import
fr.univnantes.alma.thrift.TAskAction
;
import
fr.univnantes.alma.thrift.TPair
;
...
...
@@ -30,13 +30,13 @@ import fr.univnantes.alma.thrift.TPair;
import
java.util.*
;
import
java.util.stream.Collectors
;
import
static
fr
.
univnantes
.
alma
.
game
.
PowerApplicator
.
applyPlayerCard
;
import
static
fr
.
univnantes
.
alma
.
game
.
PowerApplicator
.
resolvePlace
;
import
static
fr
.
univnantes
.
alma
.
game
.
item
.
action
.
ActionType
.*;
import
static
fr
.
univnantes
.
alma
.
game
.
item
.
jeton
.
JetonSymbol
.
ARTEMIA
;
import
static
fr
.
univnantes
.
alma
.
game
.
item
.
jeton
.
JetonSymbol
.
CIBLE
;
import
static
fr
.
univnantes
.
alma
.
game
.
item
.
player
.
PlayerTeam
.
CREATURE
;
import
static
fr
.
univnantes
.
alma
.
game
.
item
.
player
.
PlayerTeam
.
TRAQUE
;
import
static
fr
.
univnantes
.
alma
.
server
.
game
.
PowerApplicator
.
applyPlayerCard
;
import
static
fr
.
univnantes
.
alma
.
server
.
game
.
PowerApplicator
.
resolvePlace
;
import
static
fr
.
univnantes
.
alma
.
server
.
game
.
item
.
action
.
ActionType
.*;
import
static
fr
.
univnantes
.
alma
.
server
.
game
.
item
.
jeton
.
JetonSymbol
.
ARTEMIA
;
import
static
fr
.
univnantes
.
alma
.
server
.
game
.
item
.
jeton
.
JetonSymbol
.
CIBLE
;
import
static
fr
.
univnantes
.
alma
.
server
.
game
.
item
.
player
.
PlayerTeam
.
CREATURE
;
import
static
fr
.
univnantes
.
alma
.
server
.
game
.
item
.
player
.
PlayerTeam
.
TRAQUE
;
public
class
Game
implements
GameInterface
{
/**
...
...
not-alone-server/src/main/java/fr/univnantes/alma/game/GameInterface.java
→
not-alone-server/src/main/java/fr/univnantes/alma/
server/
game/GameInterface.java
View file @
7a389a5f
package
fr.univnantes.alma.game
;
package
fr.univnantes.alma.
server.
game
;
import
fr.univnantes.alma.game.item.Phase
;
import
fr.univnantes.alma.game.item.action.Action
;
import
fr.univnantes.alma.game.item.card.Card
;
import
fr.univnantes.alma.game.item.jeton.PlacedJeton
;
import
fr.univnantes.alma.game.item.power.Power
;
import
fr.univnantes.alma.server.game.item.Phase
;
import
fr.univnantes.alma.server.game.item.action.Action
;
import
fr.univnantes.alma.server.game.item.card.Card
;
import
fr.univnantes.alma.server.game.item.jeton.PlacedJeton
;
import
fr.univnantes.alma.thrift.Response
;
import
fr.univnantes.alma.thrift.TAction
;
import
fr.univnantes.alma.thrift.TAskAction
;
import
org.apache.thrift.TException
;
...
...
not-alone-server/src/main/java/fr/univnantes/alma/game/GameRoundVariables.java
→
not-alone-server/src/main/java/fr/univnantes/alma/
server/
game/GameRoundVariables.java
View file @
7a389a5f
package
fr.univnantes.alma.game
;
package
fr.univnantes.alma.
server.
game
;
import
java.util.ArrayList
;
import
java.util.List
;
...
...
not-alone-server/src/main/java/fr/univnantes/alma/game/GameServiceController.java
→
not-alone-server/src/main/java/fr/univnantes/alma/
server/
game/GameServiceController.java
View file @
7a389a5f
package
fr.univnantes.alma.game
;
package
fr.univnantes.alma.
server.
game
;
import
fr.univnantes.alma.common.GameService
;
import
fr.univnantes.alma.game.item.board.Board
;
import
fr.univnantes.alma.game.item.planet.Planet
;
import
fr.univnantes.alma.
server.
game.item.board.Board
;
import
fr.univnantes.alma.
server.
game.item.planet.Planet
;
import
fr.univnantes.alma.thrift.InvalidOperationException
;
import
fr.univnantes.alma.thrift.Response
;
import
org.springframework.stereotype.Component
;
...
...
not-alone-server/src/main/java/fr/univnantes/alma/game/PowerApplicator.java
→
not-alone-server/src/main/java/fr/univnantes/alma/
server/
game/PowerApplicator.java
View file @
7a389a5f
package
fr.univnantes.alma.game
;
package
fr.univnantes.alma.
server.
game
;
import
fr.univnantes.alma.data.DatabaseFactory
;
import
fr.univnantes.alma.
data
.NotAloneDatabase
;
import
fr.univnantes.alma.game.item.Reserve
;
import
fr.univnantes.alma.game.item.board.Board
;
import
fr.univnantes.alma.game.item.board.BoardColor
;
import
fr.univnantes.alma.game.item.card.*
;
import
fr.univnantes.alma.game.item.jeton.Jeton
;
import
fr.univnantes.alma.game.item.jeton.JetonSymbol
;
import
fr.univnantes.alma.game.item.jeton.PlacedJeton
;
import
fr.univnantes.alma.game.item.planet.PawnType
;
import
fr.univnantes.alma.game.item.planet.Place
;
import
fr.univnantes.alma.game.item.planet.Planet
;
import
fr.univnantes.alma.game.item.player.Creature
;
import
fr.univnantes.alma.game.item.player.Player
;
import
fr.univnantes.alma.game.item.player.PlayerTeam
;
import
fr.univnantes.alma.game.item.player.Traque
;
import
fr.univnantes.alma.game.item.power.Power
;
import
fr.univnantes.alma.game.item.power.modificator.PowerModificator
;
import
fr.univnantes.alma.game.item.power.modificator.PowerModificatorType
;
import
fr.univnantes.alma.game.item.power.recurrent.PowerRecurrent
;
import
fr.univnantes.alma.game.utilitary.Pair
;
import
fr.univnantes.alma.
common
.NotAloneDatabase
;
import
fr.univnantes.alma.
server.
game.item.Reserve
;
import
fr.univnantes.alma.
server.
game.item.board.Board
;
import
fr.univnantes.alma.
server.
game.item.board.BoardColor
;
import
fr.univnantes.alma.
server.
game.item.card.*
;
import
fr.univnantes.alma.
server.
game.item.jeton.Jeton
;
import
fr.univnantes.alma.
server.
game.item.jeton.JetonSymbol
;
import
fr.univnantes.alma.
server.
game.item.jeton.PlacedJeton
;
import
fr.univnantes.alma.
server.
game.item.planet.PawnType
;
import
fr.univnantes.alma.
server.
game.item.planet.Place
;
import
fr.univnantes.alma.
server.
game.item.planet.Planet
;
import
fr.univnantes.alma.
server.
game.item.player.Creature
;
import
fr.univnantes.alma.
server.
game.item.player.Player
;
import
fr.univnantes.alma.
server.
game.item.player.PlayerTeam
;
import
fr.univnantes.alma.
server.
game.item.player.Traque
;
import
fr.univnantes.alma.
server.
game.item.power.Power
;
import
fr.univnantes.alma.
server.
game.item.power.modificator.PowerModificator
;
import
fr.univnantes.alma.
server.
game.item.power.modificator.PowerModificatorType
;
import
fr.univnantes.alma.
server.
game.item.power.recurrent.PowerRecurrent
;
import
fr.univnantes.alma.
server.
game.utilitary.Pair
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
...
...
@@ -30,7 +30,7 @@ import java.util.function.BiConsumer;
import
java.util.function.BiFunction
;
import
java.util.stream.Collectors
;
import
static
fr
.
univnantes
.
alma
.
game
.
item
.
card
.
CardName
.*;
import
static
fr
.
univnantes
.
alma
.
server
.
game
.
item
.
card
.
CardName
.*;
public
class
PowerApplicator
{
...
...
not-alone-server/src/main/java/fr/univnantes/alma/game/Room.java
→
not-alone-server/src/main/java/fr/univnantes/alma/
server/
game/Room.java
View file @
7a389a5f
package
fr.univnantes.alma.game
;
package
fr.univnantes.alma.
server.
game
;
import
fr.univnantes.alma.game.item.board.Board
;
import
fr.univnantes.alma.game.item.planet.Planet
;
import
fr.univnantes.alma.game.utilitary.request.GameJoinRequest
;
import
fr.univnantes.alma.game.utilitary.request.GameRequest
;
import
fr.univnantes.alma.thrift.GameClientService
;
import
fr.univnantes.alma.server.game.item.board.Board
;
import
fr.univnantes.alma.server.game.item.planet.Planet
;
import
fr.univnantes.alma.server.game.utilitary.request.GameJoinRequest
;
import
fr.univnantes.alma.server.game.utilitary.request.GameRequest
;
import
fr.univnantes.alma.thrift.Response
;
import
org.atlanmod.commons.log.Log
;
...
...
not-alone-server/src/main/java/fr/univnantes/alma/game/RoomFactory.java
→
not-alone-server/src/main/java/fr/univnantes/alma/
server/
game/RoomFactory.java
View file @
7a389a5f
package
fr.univnantes.alma.game
;
package
fr.univnantes.alma.
server.
game
;
import
java.util.concurrent.atomic.AtomicInteger
;
...
...
not-alone-server/src/main/java/fr/univnantes/alma/game/item/Phase.java
→
not-alone-server/src/main/java/fr/univnantes/alma/
server/
game/item/Phase.java
View file @
7a389a5f
package
fr.univnantes.alma.game.item
;
package
fr.univnantes.alma.
server.
game.item
;
public
enum
Phase
{
PREPHASE_1
,
...
...
not-alone-server/src/main/java/fr/univnantes/alma/game/item/Reserve.java
→
not-alone-server/src/main/java/fr/univnantes/alma/
server/
game/item/Reserve.java
View file @
7a389a5f
package
fr.univnantes.alma.game.item
;
package
fr.univnantes.alma.
server.
game.item
;
import
fr.univnantes.alma.game.item.card.CardName
;
import
fr.univnantes.alma.game.item.card.PlaceCard
;
import
fr.univnantes.alma.game.utilitary.Pair
;
import
fr.univnantes.alma.
server.
game.item.card.CardName
;
import
fr.univnantes.alma.
server.
game.item.card.PlaceCard
;
import
fr.univnantes.alma.
server.
game.utilitary.Pair
;
import
javassist.NotFoundException
;
import
java.util.*
;
...
...
Prev
1
2
3
4
5
6
Next
Write
Preview
Supports
Markdown
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