Nämä korjaukset ovat luokkien ohjelmoijien erikseen ilmoittamia ja kirjaamia korjauksia integrointivaiheessa löydettyihin bugeihin. ************************************************************ TreeManager: ************************************************************ 1.2.10 Kuvaus: Kun ensin valitaan pääkirjoitus ja sitten corrected DTD, tulee "Can't get reference to body.content" ja konsolille tulostuu nullpoint exception, sekä Body.getSelectedArea: rivi 628 ja Body. drawNode: rivi 386. Virhe saatu toistettua useita kertoja. Havainto: EventHandlerit Vakavuus: 1 Luokittelu: Body ja TreeManager Korjaus: Ei mikään ihme, sillä TreeManagerille annetaan (väärä) kolumni-DTD, joka on liian löysä. Virhe on UIManagerissa tai sitten tietokannassa on kaksi väärää DTD:tä. 1.3. Kuvaus: Tyhjän artikkelipohjan tallennus. Annettu vain kuvaus Save As-ikkunassa, corrected DTD oli artikkelipohjana. Havainto: Nul-artikkeli tallentui. Save tehty sekä Tool Barista että Filestä. Load-tilanteessa käyttöliittymä menee sekaisin, TreeManager heittää nullpointerexceptionia, getActive Buttons: rivi 509. Kaataa niin kauan kuin body on tyhjä, riippumatta muista tyhjistä kentistä. Vakavuus: 1 Luokittelu: TreeManager Korjaus: 17.4. body.content-elementin lapsivektori oli null. Nyt se ei voi olla null: public boolean[] getActiveButtons(AreaSelection s) { ... if (old == null) { parent.setChildren(new Vector(0)); old = parent.getChildren(); } 1.3 Kuvaus: Tyhjän artikkelipohjan tallennus. Annettu vain kuvaus Save As-ikkunassa, column DTD oli artikkelipohjana. Vatii, että headers-kentissäkin on oltava bodyn lisäksi jotain. Havainto: Nul-artikkeli tallentui. Save tehty sekä Tool Barista että Filestä. Load-tilanteessa tuli asiallinen virheilmoitus "Document tree could not be created. Reason: The document could not not loaded due to its invalidity." Käyttöliitymä ja softa pysyi kunnossa. Column DTD:n tallennus/lataus ei tuota validia lopputuosta!!! Samalla view source lopettaa alkurivien jälkeen DOCTYPEEN, artikkeli oli kunnossa tallennustilanteessa ja tuntui olevan kunnossa myös latauksen alussa. UIManagerin setHeaderValues metodi heittää keskeytyksen (Header values cuold not be saved XML-tree). Vakavuus: 1 Luokittelu: TreeManager Korjaus: Ongelma johtuu kolumni-dtd:stä, joka on liian löysä. DTD päivitetään. 1.4.8 Kuvaus: Tekstiä ilman kappaletta ei saada aikaan, mutta kun pelkät headersit oli ja body tyhjä. Tällöin body content alkumerkki jää lisäämättä puuhun. Havainto: Ohjelma katuu invalidiin puuhun. toString() pitää huolehtia, että puun tulee olla validi. Vakavuus: 1 Luokittelu: TreeManager Korjaus: Itse asiassa ohjelma ei kaadu ja näytettiin XML-tyylinen tyhjä elementti: "". Ei korjattavaa. 2.5.5 Kuvaus: Artikkelin ainoan kappaleen tappaminen cutilla, tekee xlm-sivun mukaan puusta invaliditin poistamalla body.contentin. Vakavuus: 1 Luokittelu: TreeManager ja Body Korjaus: Itse asiassa ohjelma ei kaadu ja näytettiin XML-tyylinen tyhjä elementti: "". Ei korjattavaa. Kuvaus: Hyperlinkki, quote ja special sallivat mitä tahansa inline- elementtejä lisättävän sisään ensimmäisessä kerroksessa. Onko näin NITF:n mukaan? Samat elementit sallivat, esim. ensin hyperlinkki, äärettömän monta quote, hyperlinkkiä ja specialia niin, että viimeisimpään tasoon saakka voi lisätä kaikkia muitakin inline-elementtejä. Onko näin NITF:n mukaan? Luokittelu: TreeManager Korjaus: DTD sallii kaiken tuon. Tässä kaivataan lisäominaisuutta, jota ei toteuteta. 2.18 Kuvaus: Personille lisättän value=vesipää ja idsrc=. Havainto: Ikkuna ei kuole ja tulee ClassCastException: PCData paikassa Body.ActionPerformed rivillä 1143. Samoin tapahtuu kun tyhjillä arvoilla painetaa ok. Kirjoitetu arvot ei myöskään tallennu puuhun xml-sivun mukaan. Näyttää olevan muiden attribuutti- ikkunoiden ongelma. Muöskään kantaan tallennettujen attribuuttien ylläpito ei onnistu. Vakavuus: 2 Luokittelu: TreeManager Korjaus: Käytettiin väärää muuttujaa. Korjattu 17.4. Nyt: Attribute[] oldAtts = ((Element)clickedNode).getAttributes(); Oli: Attribute[] oldAtts = ((Element)currentNode).getAttributes(); ********************************************************** Body: ********************************************************** *-----* Kuvaus: Rivitysalgoritmin? mahdollinen bugi: kursorin epämääräinen siirtyminen isoja tekstilohkokja kirjoitettaessa. Rivin lopussa se hyppää joko jollekin seuraavalle riville tai blockin loppuun. Jossain vaiheessa hyppäys taapahtuu myösss seuraavaan blockiin. Mitä enemmän on inline-elemetin osia mukana kursorin edellä, sitä varmemmin alkaa kursorin hyppääminen. Suoritusongelma? Satunnaisesti tapahtuu seuraavaa: Kun ollaan rivin lopussa, kursori alkaa mennä rivejä eteenpäin, mutta teksti kirjoittuu silti oikeaan kohtaan, ts. kursori kadottaa paikkansa mutta itse kirjoituskohta säilyttää paikkaansa. Vakavuus: 2 Luokittelu: Body ----------- Tähän bugiin ei ole korjausta. Bugi saadaan aikaan jos kirjoitetaan hyvin nopeasti, jolloin tapahtumankäsittely sekoaa jotenkin. *-----* Kuvaus: Aina kun mennään block-alueen ulkopuolelle ja painetaan esim. Enter, muitaa jokin osa vanhan kursoripaikan ja tekee esim. uuden paragrafin. Havainto: Ulkopuolella oltaessa ei nollata kursorin paikkaa. Vakavuus: 1 Luokittelu Body ---------- Korjattu: Enter ei enää vaikuta jos ollaan block-tagin päällä *-----* 2.2.14 Kuvaus: Kun blockin aluista otetaan mukaan blockin aloitusmerkki ja osa tekstiä inline-elementteineen, cut ei onnistu, joskus tekee paste ja joskus poistaa osan. Olettavasti muistaa vanhan kursorin paikan. Huom! blockin lopulle tehtäessä sama testi, näitä ongelmia ei esiinny. Havainto: Kursorin sijoittaminen blockin ulkopuolelle aiheuttaa epämääräistä toimintaa. Kts. 2.5.5 kohta. Vakavuus: 1 Luokittelu: Body ---------- Korjattu samalla kuin ylläoleva ongelmakin. Korjattu laittamalla drawImage-metodiin, joka paikkaan jossa currentNodea muutetaan käky jolla myös oldNodea muutetaan. *-----* 2.5.5 Kuvaus: Kun ensin jaetaan kappale painamalla Enter ja sitten kursori näpätään jälkimmäisen kallapeen block-kuvan jälkeen ja painetaa uudelleen Enter. Koodissa tulee error StringIndexOutOfBoundsExpection: String index out of range: -1 tapahtuu Body.keyRelease rivillä 963 (StringBuffer indeksivirhe) Huom. tässä vaiheessa ruutua ei piirretä uudelleen, mutta kun siirrytään tekemään jotakin, piirretään uudelleen ruutu lisättynä uudella paragrafilla. Yleiseti ottaen ongelma lienee, että ohjelma muistaa vanha kursorin paikka ja tekee toiminnan sinne silloin, kun ollaan sallitun alueen ulkopuolella. Toiminta tapahtuu vasta kun mennään seuraavaan vaiheesee. Vakavuus: 2 Luokittelu: Body ----------- Korjattu. Samalla korjattu myös kursorin karkailu ongelma *********************************************************** UIManager *********************************************************** Virhe: 1.2 Kuvaus: Artikkelia ladattaessa writers, alias ja gategoriat eivät tule artikkelin mukaan. Aliaksen hakua ei ole toteutettu. Havainto: Oletusarvon mukaan tuli tai jos muutettiin sen mukaan Vakavuus: 2 Luokittelu: UIManager Korjaus: Alkuperäisessä koodissa asiaan ei olettu ollenkaan kantaa, vaan indeksit laitettiin luodaan 0:aan. Korjauksena ohjelmaan luotiin private metodi setIPTCCombos(String[] iptcVal), joka asetettaa parametrinä saamansa taulukon mukaan combobox:ien arvot vastaamaan ladatun artikkelin tilannetta, tai virhetilanteissa 1. arvot taulukosta. Virhe: 1.4.1 Kuvaus : tehtiin artikkeli kaikkine tietoineen, tallennettiin ilman kuvausta. Ensin ladattiin tyhjä pohja. Sitten ladattiin artikkeli, jolloin puuttuivat headersit. Käytettiin artikkelissa Corrected DTD. Havainto: Ei tallentanut sitä puuhun, xml-tiedot olivat tyhjiä, tapahtui kaksi kertaa, mutta ei löydetty tapaa toistaa virhettä. Virhe ei tapahdu koskaan kahta kertaa perätysten. Huom! virhe ehkä johtunee setHeadersValuesin kutsumattomuudesta näissä tilanteissa. Vakavuus. 2 Luokittelu: UIManage/TreeManager Lisähavainto korjausvaiheessa: virhe saadaan aina aikaan seuraavasti: täytetään Header-tiedot, ja sitten vasta bodyyn tavaraa. View Source ilmentää, että header tiedot eivät mene puuhun. Vasta kun bodyn täytön jälkeen mennään header-tietojen johonkin kenttään, ja tullaan sieltä pois, niin tapahtumakäsittelijä toitaa tiedot puuhun (joka voidaan todentaa tarkastamalla puu). Valitettavasti tätäkään toimintaa ei saa aikaan jokaisella kerralla. Lisälisähavainto: Koodissa on pieni looginen virhe. Arvot kyllä asetetaan UIManagerin sisäisiin muuttujaan (taulukkoon) mutta niitä ei varsinaisesti aseteta puuhun. Tämä siis aiheuttaa sen, että arvot eivät välttämättä menekään puuhun. Korjaus: metodin setHeaderData-metodin lopuksi lisätty flush()-metodin kutsu, joka tallettaa arvot puuhun. Näin pakotetaan sisäisissä muuttujissa olevat arvot tallettumaan. Virhe: 1.6 Kuvaus: Päivämäärässä menee kaikki läpi. Havainto: Tallentuu sekä puuhun että tietokantaan, tulee myös latauksen jälkeen artikkelin pvm:ksi. Vakavuus: 3 Luokittelu: UIManager Korjaus: Ennen tallennusta tarkastetaan päivämäärän muoto ja hyvyys yleisellä tasolla. Jos päivämäärä ei mene tarkastuksen läpi, laitetaan siihen nykyinen päivämäärä. Tämä korjaus oli vain osittainen, eikä läheskään kattava. Siitä puuttuu mm. annetun päivämäärän järkevyystarkastus.