Skip to content
Snippets Groups Projects
Commit cdce1022 authored by julipits's avatar julipits
Browse files

Tarkistuksia

parent de537bd8
No related branches found
No related tags found
No related merge requests found
...@@ -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 HAHMOT (0) tai ASIAT (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.onkoListassa(tyyppi, t.getID())) return; if (this.onkoLinkitetty(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 HAHMOT (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 onkoListassa(int tyyppi, int id) { public boolean onkoLinkitetty(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());
......
...@@ -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
......
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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment