Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
O
ohj2
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
julipits
ohj2
Commits
cdce1022
Commit
cdce1022
authored
2 weeks ago
by
julipits
Browse files
Options
Downloads
Patches
Plain Diff
Tarkistuksia
parent
de537bd8
No related branches found
No related tags found
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
src/kohtaushallinta/Kohtaus.java
+137
-5
137 additions, 5 deletions
src/kohtaushallinta/Kohtaus.java
src/kohtaushallinta/Tietue.java
+0
-40
0 additions, 40 deletions
src/kohtaushallinta/Tietue.java
src/kohtaushallinta/test/KohtausTest.java
+116
-0
116 additions, 0 deletions
src/kohtaushallinta/test/KohtausTest.java
with
253 additions
and
45 deletions
src/kohtaushallinta/Kohtaus.java
+
137
−
5
View file @
cdce1022
...
@@ -2,9 +2,15 @@ package kohtaushallinta;
...
@@ -2,9 +2,15 @@ package kohtaushallinta;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
/**
* @author Jussi Lipitsäinen
* @version 19.3.2025
* Luokka itse kohtausta varten
*/
public
class
Kohtaus
extends
Tietue
{
public
class
Kohtaus
extends
Tietue
{
private
ArrayList
<
Tietue
>
hahmot
=
new
ArrayList
<
Tietue
>();
private
ArrayList
<
Tietue
>
hahmot
=
new
ArrayList
<
Tietue
>();
private
ArrayList
<
Tietue
>
asiat
=
new
ArrayList
<
Tietue
>();
private
ArrayList
<
Tietue
>
asiat
=
new
ArrayList
<
Tietue
>();
private
String
muistiinpanot
=
""
;
/** Käsitellään linkitettyjä hahmoja */
/** Käsitellään linkitettyjä hahmoja */
public
static
final
int
HAHMOT
=
0
;
public
static
final
int
HAHMOT
=
0
;
...
@@ -12,6 +18,11 @@ public class Kohtaus extends Tietue {
...
@@ -12,6 +18,11 @@ public class Kohtaus extends Tietue {
public
static
final
int
ASIAT
=
1
;
public
static
final
int
ASIAT
=
1
;
/**
* Luo uuden Kohtauksen ID:n ja otsikon avulla
* @param id ID
* @param otsikko otsikko
*/
public
Kohtaus
(
int
id
,
String
otsikko
)
{
public
Kohtaus
(
int
id
,
String
otsikko
)
{
super
(
id
,
otsikko
);
super
(
id
,
otsikko
);
}
}
...
@@ -28,7 +39,16 @@ public class Kohtaus extends Tietue {
...
@@ -28,7 +39,16 @@ public class Kohtaus extends Tietue {
* Tietue[] tt1 = { new Tietue(0, "tietue0"), new Tietue(1, "tietue1"), new Tietue(2, "tietue2") };
* Tietue[] tt1 = { new Tietue(0, "tietue0"), new Tietue(1, "tietue1"), new Tietue(2, "tietue2") };
* Kohtaus k = new Kohtaus(0, "kohtaus");
* Kohtaus k = new Kohtaus(0, "kohtaus");
* k.setLinkit(Kohtaus.HAHMOT, tt1);
* k.setLinkit(Kohtaus.HAHMOT, tt1);
* k.setLinkit(2, tt1);
* try {
* k.setLinkit(2, tt1);
* } catch (IllegalArgumentException ie) {
* ie.getMessage() === "Listan tyypin on oltava HAHMOT (0) tai ASIAT (1): 2 ei kelpaa";
* }
* try {
* k.setLinkit(-1, tt1);
* } catch (IllegalArgumentException ie) {
* ie.getMessage() === "Listan tyypin on oltava HAHMOT (0) tai ASIAT (1): -1 ei kelpaa";
* }
* </pre>
* </pre>
*
*
*/
*/
...
@@ -38,6 +58,63 @@ public class Kohtaus extends Tietue {
...
@@ -38,6 +58,63 @@ public class Kohtaus extends Tietue {
}
}
/**
* Hakee linkitettyjen tiedostojen ID:t
* @param tyyppi HAHMO (0) tai ASIA (1)
* @return linkitettyjen tiedostojen ID:t kokonaislukutaulukkona
* @throws IllegalArgumentException listan tyyppi ei ole kelvollinen
* @example
* <pre name="test">
* Kohtaus k = new Kohtaus(0, "kohtaus");
* k.getLinkkiIDt(Kohtaus.ASIAT).length === 0;
* k.getLinkkiIDt(Kohtaus.HAHMOT).length === 0;
* try {
* k.getLinkkiIDt(2);
* } catch (IllegalArgumentException ie) {
* ie.getMessage() === "Listan tyypin on oltava HAHMOT (0) tai ASIAT (1): 2 ei kelpaa";
* }
* try {
* k.getLinkkiIDt(-1);
* } catch (IllegalArgumentException ie) {
* ie.getMessage() === "Listan tyypin on oltava HAHMOT (0) tai ASIAT (1): -1 ei kelpaa";
* }
*
* k.linkita(Kohtaus.ASIAT, new Tietue(1, "asia1"));
* k.linkita(Kohtaus.ASIAT, new Tietue(3, "asia3"));
* k.linkita(Kohtaus.ASIAT, new Tietue(4, "asia4"));
* k.linkita(Kohtaus.ASIAT, new Tietue(9, "asia9"));
* k.linkita(Kohtaus.HAHMOT, new Tietue(2, "hahmo2"));
* k.linkita(Kohtaus.HAHMOT, new Tietue(3, "hahmo3"));
* k.linkita(Kohtaus.HAHMOT, new Tietue(4, "hahmo4"));
* int[] tarkistush = { 2, 3, 4 };
* int[] tarkistusa = { 1, 3, 4, 9 };
* int[] asiat = k.getLinkkiIDt(Kohtaus.ASIAT);
* int[] hahmot = k.getLinkkiIDt(Kohtaus.HAHMOT);
* for (int i = 0; i < 4; i++)
* asiat[i] === tarkistusa[i];
* for (int j = 0; j < 3; j++)
* hahmot[j] === tarkistush[j];
* try {
* k.getLinkkiIDt(2);
* } catch (IllegalArgumentException ie) {
* ie.getMessage() === "Listan tyypin on oltava HAHMOT (0) tai ASIAT (1): 2 ei kelpaa";
* }
* try {
* k.getLinkkiIDt(-1);
* } catch (IllegalArgumentException ie) {
* ie.getMessage() === "Listan tyypin on oltava HAHMOT (0) tai ASIAT (1): -1 ei kelpaa";
* }
* </pre>
*/
public
int
[]
getLinkkiIDt
(
int
tyyppi
)
throws
IllegalArgumentException
{
ArrayList
<
Tietue
>
lista
=
valitseLista
(
tyyppi
);
int
[]
idt
=
new
int
[
lista
.
size
()];
int
i
=
0
;
for
(
Tietue
t
:
lista
)
if
(
t
!=
null
)
idt
[
i
++]
=
t
.
getID
();
return
idt
;
}
/**
/**
* Valitsee listan annetun tyypin perusteella
* Valitsee listan annetun tyypin perusteella
* @param tyyppi HAHMO (0) tai ASIA (1)
* @param tyyppi HAHMO (0) tai ASIA (1)
...
@@ -51,7 +128,7 @@ public class Kohtaus extends Tietue {
...
@@ -51,7 +128,7 @@ public class Kohtaus extends Tietue {
case
ASIAT:
case
ASIAT:
return
this
.
asiat
;
return
this
.
asiat
;
default
:
default
:
throw
new
IllegalArgumentException
(
"Listan tyypin on oltava
0(
HAHMO) tai
1(
ASIA): "
+
tyyppi
);
throw
new
IllegalArgumentException
(
"Listan tyypin on oltava HAHMO
T (0
) tai ASIA
T (1
): "
+
tyyppi
+
" ei kelpaa"
);
}
}
}
}
...
@@ -60,9 +137,18 @@ public class Kohtaus extends Tietue {
...
@@ -60,9 +137,18 @@ public class Kohtaus extends Tietue {
* Jos samalla id:llä ei ole tietuetta halutussa listassa, lisää sen
* Jos samalla id:llä ei ole tietuetta halutussa listassa, lisää sen
* @param tyyppi HAHMO/ASIA
* @param tyyppi HAHMO/ASIA
* @param t linkitettävä tietue
* @param t linkitettävä tietue
* @example
* <pre name="test">
* Kohtaus k = new Kohtaus (0, "kohtaus");
* k.linkita(Kohtaus.ASIAT, new Tietue(2, "asia2"));
* k.linkita(Kohtaus.HAHMOT, new Tietue(1, "hahmo1"));
* k.linkita(Kohtaus.ASIAT, new Tietue(2, "uusi asia"));
*
*
* </pre>
*/
*/
public
void
linkita
(
int
tyyppi
,
Tietue
t
)
{
public
void
linkita
(
int
tyyppi
,
Tietue
t
)
{
if
(
this
.
onkoLi
stassa
(
tyyppi
,
t
.
getID
()))
return
;
if
(
this
.
onkoLi
nkitetty
(
tyyppi
,
t
.
getID
()))
return
;
ArrayList
<
Tietue
>
lista
=
valitseLista
(
tyyppi
);
ArrayList
<
Tietue
>
lista
=
valitseLista
(
tyyppi
);
lista
.
add
(
t
);
lista
.
add
(
t
);
}
}
...
@@ -70,17 +156,63 @@ public class Kohtaus extends Tietue {
...
@@ -70,17 +156,63 @@ public class Kohtaus extends Tietue {
/**
/**
* Tarkistaa, onko samalla ID:llä tietue listassa
* Tarkistaa, onko samalla ID:llä tietue listassa
* @param tyyppi HAHMO
/ASIA
* @param tyyppi HAHMO
T (0) / ASIAT (1)
* @param id haettava ID
* @param id haettava ID
* @return true, jos löytyy. Muuten false
* @return true, jos löytyy. Muuten false
* @throws IllegalArgumentException listan tyyppi ei ole kelvollinen
* @example
* <pre name="test">
* Kohtaus k = new Kohtaus(0, "Kohtaus");
* k.linkita(Kohtaus.HAHMOT, new Tietue(3, "hahmo3"));
* k.onkoLinkitetty(Kohtaus.HAHMOT, 3) === true;
* k.onkoLinkitetty(Kohtaus.HAHMOT, 2) === false;
* k.onkoLinkitetty(Kohtaus.ASIAT, 3) === false;
* k.linkita(Kohtaus.ASIAT, new Tietue(0, "asia0"));
* k.onkoLinkitetty(Kohtaus.ASIAT, 0) === true;
* try {
* k.onkoLinkitetty(2, 3);
* } catch (IllegalArgumentException ie) {
* ie.getMessage() === "Listan tyypin on oltava HAHMOT (0) tai ASIAT (1): 2 ei kelpaa";
* }
* try {
* k.onkoLinkitetty(-1, 3);
* } catch (IllegalArgumentException ie) {
* ie.getMessage() === "Listan tyypin on oltava HAHMOT (0) tai ASIAT (1): -1 ei kelpaa";
* }
* </pre>
*/
*/
public
boolean
onkoLi
stassa
(
int
tyyppi
,
int
id
)
{
public
boolean
onkoLi
nkitetty
(
int
tyyppi
,
int
id
)
throws
IllegalArgumentException
{
ArrayList
<
Tietue
>
lista
=
valitseLista
(
tyyppi
);
ArrayList
<
Tietue
>
lista
=
valitseLista
(
tyyppi
);
for
(
Tietue
t
:
lista
)
if
(
t
.
getID
()
==
id
)
return
true
;
for
(
Tietue
t
:
lista
)
if
(
t
.
getID
()
==
id
)
return
true
;
return
false
;
return
false
;
}
}
/**
* Asettaa muistiinpanot-kentän sisällön
* @param jono muistiinpanot
*/
public
void
setMuistiinpanot
(
String
jono
)
{
this
.
muistiinpanot
=
jono
;
}
public
static
Kohtaus
lueTaulukko
(
String
[]
taulukko
)
throws
IllegalArgumentException
,
NumberFormatException
{
if
(
taulukko
.
length
<
2
)
{
throw
new
IllegalArgumentException
(
"ID ja otsikko on oltava määritelty."
);
}
int
id
=
Integer
.
parseInt
(
taulukko
[
0
].
strip
());
Kohtaus
uusi
=
new
Kohtaus
(
id
,
taulukko
[
1
].
strip
());
if
(
taulukko
.
length
<
3
)
return
uusi
;
uusi
.
getAvainsanat
().
lueJonosta
(
taulukko
[
2
].
strip
());
if
(
taulukko
.
length
<
4
)
return
uusi
;
uusi
.
setKuvaus
(
taulukko
[
3
].
strip
());
if
(
taulukko
.
length
<
5
)
return
uusi
;
uusi
.
setMuistiinpanot
(
taulukko
[
4
].
strip
());
return
uusi
;
}
@Override
@Override
public
String
toString
()
{
public
String
toString
()
{
StringBuilder
sb
=
new
StringBuilder
(
this
.
toString
());
StringBuilder
sb
=
new
StringBuilder
(
this
.
toString
());
...
...
This diff is collapsed.
Click to expand it.
src/kohtaushallinta/Tietue.java
+
0
−
40
View file @
cdce1022
...
@@ -156,46 +156,6 @@ public class Tietue {
...
@@ -156,46 +156,6 @@ public class Tietue {
}
}
/**
* Lukee uuteen Tietueeseen tiedot StringBuilderista:
* " id [erotin] otsikko [erotin] avainsanat [erotin] kuvaus ([erotin]...) "
* Poistaa tiedot StringBuilderista niitä lukiessaan. Kenttiä luetaan annettuun kenttien määrään tai viimeistään viidenteen kenttään.
* @param sb StringBuilder
* @param erotin kentät erottava merkki
* @param kenttia kenttia kuinka monta kenttää luetaan (4. jälkeen lopetetaan viimeistään)
* @return uusi Tietue. Null, jos id-arvoa ei saatu luettua tai kenttia on alle yksi.
* @example
* <pre name="test">
* StringBuilder sb = new StringBuilder("1 | Otsikko | sana1, sana2, sana3 | Kuvaus | Muistiinpanot");
* Tietue t = lueSB(sb, '|', 4);
* sb.toString() === " Muistiinpanot";
* t.toString() === "1 | Otsikko | sana1, sana2, sana3 | Kuvaus";
* sb = new StringBuilder("1 | Otsikko | sana1, sana2, sana3 | Kuvaus | Muistiinpanot");
* t = lueSB(sb, '|', 2);
* t.toString() === ""1 | Otsikko | |"
* sb.toString() === " sana1, sana2, sana3 | Kuvaus | Muistiinpanot";
* </pre>
*/
public
static
Tietue
lueSB
(
StringBuilder
sb
,
char
erotin
,
int
kenttia
)
{
if
(
kenttia
<
2
)
return
null
;
String
jono
=
Mjonot
.
erota
(
sb
,
erotin
).
strip
();
int
id
;
try
{
id
=
Integer
.
parseInt
(
jono
);
}
catch
(
NumberFormatException
e
)
{
return
null
;
}
Tietue
uusi
=
new
Tietue
(
id
);
if
(
kenttia
<
2
)
return
uusi
;
uusi
.
setOtsikko
(
Mjonot
.
erota
(
sb
,
erotin
).
strip
());
if
(
kenttia
<
3
)
return
uusi
;
uusi
.
avainsanat
.
lueJonosta
(
Mjonot
.
erota
(
sb
,
erotin
).
strip
());
if
(
kenttia
<
4
)
return
uusi
;
uusi
.
setKuvaus
(
Mjonot
.
erota
(
sb
,
erotin
).
strip
());
return
uusi
;
}
/**
/**
* Lukee uuden Tietueen tiedot merkkijonotaulukosta: { ID, otsikko, avainsanat, kuvaus }
* Lukee uuden Tietueen tiedot merkkijonotaulukosta: { ID, otsikko, avainsanat, kuvaus }
* Taulukossa on oltava vähintään kaksi ensimmäistä alkiota, joista ensimmäinen on oltava
* Taulukossa on oltava vähintään kaksi ensimmäistä alkiota, joista ensimmäinen on oltava
...
...
This diff is collapsed.
Click to expand it.
src/kohtaushallinta/test/KohtausTest.java
0 → 100644
+
116
−
0
View file @
cdce1022
package
kohtaushallinta.test
;
// Generated by ComTest BEGIN
import
static
org
.
junit
.
Assert
.*;
import
org.junit.*
;
import
kohtaushallinta.*
;
// Generated by ComTest END
/**
* Test class made by ComTest
* @version 2025.03.19 18:48:12 // Generated by ComTest
*
*/
@SuppressWarnings
({
"all"
})
public
class
KohtausTest
{
// Generated by ComTest BEGIN
/** testSetLinkit38 */
@Test
public
void
testSetLinkit38
()
{
// Kohtaus: 38
Tietue
[]
tt1
=
{
new
Tietue
(
0
,
"tietue0"
),
new
Tietue
(
1
,
"tietue1"
),
new
Tietue
(
2
,
"tietue2"
)
}
;
Kohtaus
k
=
new
Kohtaus
(
0
,
"kohtaus"
);
k
.
setLinkit
(
Kohtaus
.
HAHMOT
,
tt1
);
try
{
k
.
setLinkit
(
2
,
tt1
);
}
catch
(
IllegalArgumentException
ie
)
{
assertEquals
(
"From: Kohtaus line: 45"
,
"Listan tyypin on oltava HAHMOT (0) tai ASIAT (1): 2 ei kelpaa"
,
ie
.
getMessage
());
}
try
{
k
.
setLinkit
(-
1
,
tt1
);
}
catch
(
IllegalArgumentException
ie
)
{
assertEquals
(
"From: Kohtaus line: 50"
,
"Listan tyypin on oltava HAHMOT (0) tai ASIAT (1): -1 ei kelpaa"
,
ie
.
getMessage
());
}
}
// Generated by ComTest END
// Generated by ComTest BEGIN
/** testGetLinkkiIDt67 */
@Test
public
void
testGetLinkkiIDt67
()
{
// Kohtaus: 67
Kohtaus
k
=
new
Kohtaus
(
0
,
"kohtaus"
);
assertEquals
(
"From: Kohtaus line: 69"
,
0
,
k
.
getLinkkiIDt
(
Kohtaus
.
ASIAT
).
length
);
assertEquals
(
"From: Kohtaus line: 70"
,
0
,
k
.
getLinkkiIDt
(
Kohtaus
.
HAHMOT
).
length
);
try
{
k
.
getLinkkiIDt
(
2
);
}
catch
(
IllegalArgumentException
ie
)
{
assertEquals
(
"From: Kohtaus line: 74"
,
"Listan tyypin on oltava HAHMOT (0) tai ASIAT (1): 2 ei kelpaa"
,
ie
.
getMessage
());
}
try
{
k
.
getLinkkiIDt
(-
1
);
}
catch
(
IllegalArgumentException
ie
)
{
assertEquals
(
"From: Kohtaus line: 79"
,
"Listan tyypin on oltava HAHMOT (0) tai ASIAT (1): -1 ei kelpaa"
,
ie
.
getMessage
());
}
k
.
linkita
(
Kohtaus
.
ASIAT
,
new
Tietue
(
1
,
"asia1"
));
k
.
linkita
(
Kohtaus
.
ASIAT
,
new
Tietue
(
3
,
"asia3"
));
k
.
linkita
(
Kohtaus
.
ASIAT
,
new
Tietue
(
4
,
"asia4"
));
k
.
linkita
(
Kohtaus
.
ASIAT
,
new
Tietue
(
9
,
"asia9"
));
k
.
linkita
(
Kohtaus
.
HAHMOT
,
new
Tietue
(
2
,
"hahmo2"
));
k
.
linkita
(
Kohtaus
.
HAHMOT
,
new
Tietue
(
3
,
"hahmo3"
));
k
.
linkita
(
Kohtaus
.
HAHMOT
,
new
Tietue
(
4
,
"hahmo4"
));
int
[]
tarkistush
=
{
2
,
3
,
4
}
;
int
[]
tarkistusa
=
{
1
,
3
,
4
,
9
}
;
int
[]
asiat
=
k
.
getLinkkiIDt
(
Kohtaus
.
ASIAT
);
int
[]
hahmot
=
k
.
getLinkkiIDt
(
Kohtaus
.
HAHMOT
);
for
(
int
i
=
0
;
i
<
4
;
i
++)
assertEquals
(
"From: Kohtaus line: 94"
,
tarkistusa
[
i
],
asiat
[
i
]);
for
(
int
j
=
0
;
j
<
3
;
j
++)
assertEquals
(
"From: Kohtaus line: 96"
,
tarkistush
[
j
],
hahmot
[
j
]);
try
{
k
.
getLinkkiIDt
(
2
);
}
catch
(
IllegalArgumentException
ie
)
{
assertEquals
(
"From: Kohtaus line: 100"
,
"Listan tyypin on oltava HAHMOT (0) tai ASIAT (1): 2 ei kelpaa"
,
ie
.
getMessage
());
}
try
{
k
.
getLinkkiIDt
(-
1
);
}
catch
(
IllegalArgumentException
ie
)
{
assertEquals
(
"From: Kohtaus line: 105"
,
"Listan tyypin on oltava HAHMOT (0) tai ASIAT (1): -1 ei kelpaa"
,
ie
.
getMessage
());
}
}
// Generated by ComTest END
// Generated by ComTest BEGIN
/** testLinkita141 */
@Test
public
void
testLinkita141
()
{
// Kohtaus: 141
Kohtaus
k
=
new
Kohtaus
(
0
,
"kohtaus"
);
k
.
linkita
(
Kohtaus
.
ASIAT
,
new
Tietue
(
2
,
"asia2"
));
k
.
linkita
(
Kohtaus
.
HAHMOT
,
new
Tietue
(
1
,
"hahmo1"
));
k
.
linkita
(
Kohtaus
.
ASIAT
,
new
Tietue
(
2
,
"uusi asia"
));
}
// Generated by ComTest END
// Generated by ComTest BEGIN
/** testOnkoLinkitetty164 */
@Test
public
void
testOnkoLinkitetty164
()
{
// Kohtaus: 164
Kohtaus
k
=
new
Kohtaus
(
0
,
"Kohtaus"
);
k
.
linkita
(
Kohtaus
.
HAHMOT
,
new
Tietue
(
3
,
"hahmo3"
));
assertEquals
(
"From: Kohtaus line: 167"
,
true
,
k
.
onkoLinkitetty
(
Kohtaus
.
HAHMOT
,
3
));
assertEquals
(
"From: Kohtaus line: 168"
,
false
,
k
.
onkoLinkitetty
(
Kohtaus
.
HAHMOT
,
2
));
assertEquals
(
"From: Kohtaus line: 169"
,
false
,
k
.
onkoLinkitetty
(
Kohtaus
.
ASIAT
,
3
));
k
.
linkita
(
Kohtaus
.
ASIAT
,
new
Tietue
(
0
,
"asia0"
));
assertEquals
(
"From: Kohtaus line: 171"
,
true
,
k
.
onkoLinkitetty
(
Kohtaus
.
ASIAT
,
0
));
try
{
k
.
onkoLinkitetty
(
2
,
3
);
}
catch
(
IllegalArgumentException
ie
)
{
assertEquals
(
"From: Kohtaus line: 175"
,
"Listan tyypin on oltava HAHMOT (0) tai ASIAT (1): 2 ei kelpaa"
,
ie
.
getMessage
());
}
try
{
k
.
onkoLinkitetty
(-
1
,
3
);
}
catch
(
IllegalArgumentException
ie
)
{
assertEquals
(
"From: Kohtaus line: 180"
,
"Listan tyypin on oltava HAHMOT (0) tai ASIAT (1): -1 ei kelpaa"
,
ie
.
getMessage
());
}
}
// Generated by ComTest END
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment