Zhrnutie príspevkov z minulého roka
----------------------------------------------------------------------------------------------------
skuska
----------------------------------------------------------------------------------------------------
07.05.2010, 13:49:59 23 otazok
http://people.tuke.sk/jan.kollar/mgsa/Otazky.pdf
----------------------------------------------------------------------------------------------------
23.05.2010, 16:19:44 Boli iba niektore otazky, ktore sa opakovali, alebo boli vsetky?
23.05.2010, 16:19:44 ak nie vsetky tak vacsina urcie
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
na stiahnutie
----------------------------------------------------------------------------------------------------
27.03.2010, 10:24:15
Prednasky su na KANE-ftp .... tie pisane v TXT niesu nic moc lebo som nestihal pisat ... tak som sa rozhodol to odteraz fotit ... ak ma niekto kvalitnejsie poznamky z 1. a 3. prednasky sa moze podelit s nimi sa neurazim
27.03.2010, 20:39:08
Tak moje kompletne vydenie druheho zadania z MAGSA spolu z vypracovanymi vsetkymi bonusovymi ulohami najdete na stranke: http://www.megaupload.com/?d=GWOBN7ZF projekt.zip
Samozrejme vsetko je bez zaruky, ale malo by to byt OK
28.03.2010, 19:31:58 skus robit prechadzanie vsetkych objektov inak napr
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
spustenie pojektu
----------------------------------------------------------------------------------------------------
25.02.2010, 21:40:40
cvicenie 2
tak, mozem ti napisat co sme stihli na cviku (v podstate ako zacat):
1. stiahnut a rozbalit si projects.zip z moodlu resp. z hornadu (su to dva projekty)
2. v adresari projektu magsa vytvorit adresar "model" a v nom vytvorit entity Oddelenie.el a Zamestnanec.el (vid moodle)
3. stiahnut parser.zip rozbalit a obsah vlozit do adresara projects/magsa/src asi takto ze:
adresar projects\magsa\src\sk\tuke\magsa\tools\ ma odsahovat adresare "metamodel" a "parser" (z toho zipka)
4. otvorit projekt magsa v netbeanse a pokracovat ulohami z 2.cvika v moodli:
t.j... vytvorit v metamodel Type.java (ako je v 2. cv na obrazku)...
...
atd...
----------------------------------------------------------------------------------------------------
28.02.2010, 15:03:58
1. stiahnes projects.zip
2. rozbalis projects.zip
3. otvoris v Netbeanse projekty
4. pozries sa do lib adresaru projektu magsa a co tam nevidiiis? tri jar-ka (that means: velocity.jar, yajco.jar a javacc.jar)
5. prides do Netbeansu a v projekte magsa pridas do kniznic tie tri jar-ka a voila! Smiley (resp. mozno staci dat Resolve Reference Problems pravym klikom na projekt a tam vyhladas toto co ti treba z tych troch jar)
EDIT: co sa tyka problemov s projektom ParserGenerator , odpoved najdete v dalsom poste od BCAA.
28.02.2010, 17:52:34 cize ak uz nechcete mat s tym problemy tak jednoducho tuto referenciu odstrante (tipujem ze to bude vo vasom projekte v Libraries/ParserGenerator tak tam jednoducho pravy klik a odstranit ) Nic nepokazite (ak neverite si spravte zalohu Wink)
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
riesenie problemov pri robeni projektu
----------------------------------------------------------------------------------------------------
02.03.2010, 12:07:15 v triede Model.java
rob vkuse s arraylistom
List<Property> properties = new ArrayList<Property>();
a po naplneni to len pretypuj
(Property[]) properties.toArray()
02.03.2010, 12:21:31 treba ho inicializovat na Property[] p = new Property[props.size()] a az tak skopcit z arraylistu props do pola
05.03.2010, 10:25:34 Takto to funguje
05.03.2010, 13:39:14 alebo jednoduchsie:
----------------------------------------------------------------------------------------------------
vyskocit z volania metody v jave
return null; (ak nemas navratovy typ, tak return;) a nasledne pri volani metody testujes ci tam nie je null.. Resp. mozes hodit na metodu throws TvojException a potom pri volani metody potom testujes, ci vhodila vynimku
----------------------------------------------------------------------------------------------------
04.03.2010, 14:21:04 v tom cviku tri, crud_interface.vm, teraz sa tie sablony volaju dao_impl.java.vm, dao_interface.java.vm, entity_class.java.vm
----------------------------------------------------------------------------------------------------
Identifikatori v jave sa riadia nasledovnimi pravidlami :
1. Mozu obsahovat vsetky velke a male pismena, cisla a znaky _ a $
2. Meno identifikatora nesmie zacinat cislom - a to je cela filozofia
07.03.2010, 09:45:21 v projekte mas pripraveny string pod nazvom IDENT_REGEX, takze staci pouzit:
druha moznost je pouzit metody java.lang.Character.isJavaIdentifierStart a java.lang.Character.isJavaIdentifierPart
----------------------------------------------------------------------------------------------------
povedal nam ako poriesit tie importy v generated, treba len jednoducho vymazat ten mgsa.jar subor v libraries a importnut ho tam znovu, lebo zrejme ked sa pregeneruje nanovo projekt mgsa tak tam aj tak ma natiahnuty len tu staru verziu akoby... potom to uz islo vsetko v pohode
----------------------------------------------------------------------------------------------------
07.03.2010, 20:05:26
vygenerovany subor OddelenieDaoImpl.java
----------------------------------------------------------------------------------------------------
28.03.2010, 23:31:19 pripojenie k databaze
----------------------------------------------------------------------------------------------------
18.04.2010, 13:54:23
spravne vygenerovana ebnf
----------------------------------------------------------------------------------------------------
18.04.2010, 21:07:56
Dam vygenerovat pomocou YAJCO parser, a vygeneruje mi parser s milion chybami.
jj stalo sa aj mne take...ale pridal som na novo yajco.jar ...to ,ktore je v osmom cviceni a ide vsetko ako ma
----------------------------------------------------------------------------------------------------
19.04.2010, 20:15:20
trieda Entity
----------------------------------------------------------------------------------------------------
28.04.2010, 08:56:29 v tom XML ui.xsd, mne ten schemagen este stale nejde
29.04.2010, 15:41:33 Dajte @XmlTransient na zvysne get metody (napr. Entity getEntity()) a na obe abstraktne triedy. Potom to pojde.
----------------------------------------------------------------------------------------------------
01.05.2010, 23:06:46
12 cviko
ked som dobre pochopil tak metoda menu by mala vypisat ako polozky hlavneho menu nazvy entit napr nieco takeho:
(1) Zamestnanec
(2) Oddelenie
Enter selection:
po konkretnom vybere by sa potom malo pomocou tej triedy TableDialog vypisat podmenu pre pracu s entitou, co je v tej triede, ze:
(1) Display
(2) Create
(3) Edit
(4) Remove
(5) Return
Enter selection:
----------
02.05.2010, 08:32:24
Tam ked si pozries v zadani je pod napisane, ze za vypis podmenu je zodpovedne TableDialog, tato trieda je vsak abstraktna .. no neskor vytvaras pre kazdu entitu triedu, ktora rozsiruje TableDialog ... cize pre kazdu entitu budes mat taku triedu a kazda taka trieda ma aj metodu menu(), ktora vypise to dane submenu ale uz pracuje s tou entitou .. takze v tej sablone "app" musis pre kazdu entitu vytvorit polozku v menu (tak ako si pisal) a v ramci switchu potom podla toho co stlacis zavolat prislusnu triedu
ja to mam nejako takto (funguje, takze dufam ze aj dobre Tongue):
----------------------------------------------------------------------------------------------------
03.05.2010, 18:58:49 overovanie obmedzeni pri zadavani hodnoty pouzivatelom
ja som to nechal overit prave tym testom v dao, ale neviem ci to bola spravna cesta
----------------------------------------------------------------------------------------------------
07.05.2010, 19:58:49
porovnanie componentu na class LookupColumn
dostat z componentu typ danej property
07.05.2010, 22:13:52
Tebe to nefunguje, lebo Entity mas vsade null, tak isto ako Property lebo inak by si property vytiahnut vedel.
Tvoj problem je v tom ze si si UI nenaplnil instanciami z modelu. To nestaci len validovat, ale ak zistis ze Entita alebo Property existuje tak ju tam aj musis setnut.
----------------------------------------------------------------------------------------------------
07.05.2010, 22:59:01
11.cviko, furt ked dam ten schemagen, vyhodi mi "cannot find symbol"
1. vsetky GET metody musia mat anotaciu, metody ktore sa nemaju premietnut do XSD maju byt transientne
2. odporucam oanotovat vsetky triedy, UI ma xmlRoot... a ostatne XmlType
3. pri pouziti schemagen je idealne zadat celu castu ku vsetky adresarom pouzitym v prikaze ako parametre
----------------------------------------------------------------------------------------------------
09.05.2010, 19:27:10
To XSD co sa ti vygenerovalo, na to kasli.
Do root adresara projektu nakopci ui.xsd a ui.xml a potom:
09.05.2010, 19:46:21 Dik, uz ide mohli napisat do toho "navodu", ze sa na to mam vysrat...
10.05.2010, 09:20:46 to xsd tam je na validaciu toho xml-ka:
10.05.2010, 12:16:31 Ano ibaze potom treba upravovat aj triedu UIProcessor.
A vzhladom nato ze generovane XSD je absolutne rovnake ako to na stranke tak staci pouzit to XSD a XML zo stranky.
----------------------------------------------------------------------------------------------------
10.05.2010, 16:31:24
porovnanie componentu na class LookupColumn
componentu typ danej property
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
skuska
----------------------------------------------------------------------------------------------------
07.05.2010, 13:49:59 23 otazok
http://people.tuke.sk/jan.kollar/mgsa/Otazky.pdf
----------------------------------------------------------------------------------------------------
23.05.2010, 16:19:44 Boli iba niektore otazky, ktore sa opakovali, alebo boli vsetky?
23.05.2010, 16:19:44 ak nie vsetky tak vacsina urcie
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
na stiahnutie
----------------------------------------------------------------------------------------------------
27.03.2010, 10:24:15
Prednasky su na KANE-ftp .... tie pisane v TXT niesu nic moc lebo som nestihal pisat ... tak som sa rozhodol to odteraz fotit ... ak ma niekto kvalitnejsie poznamky z 1. a 3. prednasky sa moze podelit s nimi sa neurazim
27.03.2010, 20:39:08
Tak moje kompletne vydenie druheho zadania z MAGSA spolu z vypracovanymi vsetkymi bonusovymi ulohami najdete na stranke: http://www.megaupload.com/?d=GWOBN7ZF projekt.zip
Samozrejme vsetko je bez zaruky, ale malo by to byt OK
28.03.2010, 19:31:58 skus robit prechadzanie vsetkych objektov inak napr
Code [Select]
( for(EntityRef er: entities) )
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
spustenie pojektu
----------------------------------------------------------------------------------------------------
25.02.2010, 21:40:40
cvicenie 2
tak, mozem ti napisat co sme stihli na cviku (v podstate ako zacat):
1. stiahnut a rozbalit si projects.zip z moodlu resp. z hornadu (su to dva projekty)
2. v adresari projektu magsa vytvorit adresar "model" a v nom vytvorit entity Oddelenie.el a Zamestnanec.el (vid moodle)
3. stiahnut parser.zip rozbalit a obsah vlozit do adresara projects/magsa/src asi takto ze:
adresar projects\magsa\src\sk\tuke\magsa\tools\ ma odsahovat adresare "metamodel" a "parser" (z toho zipka)
4. otvorit projekt magsa v netbeanse a pokracovat ulohami z 2.cvika v moodli:
t.j... vytvorit v metamodel Type.java (ako je v 2. cv na obrazku)...
...
Code [Select]
public enum Type {
INTEGER, REAL, STRING;
}
atd...
----------------------------------------------------------------------------------------------------
28.02.2010, 15:03:58
1. stiahnes projects.zip
2. rozbalis projects.zip
3. otvoris v Netbeanse projekty
4. pozries sa do lib adresaru projektu magsa a co tam nevidiiis? tri jar-ka (that means: velocity.jar, yajco.jar a javacc.jar)
5. prides do Netbeansu a v projekte magsa pridas do kniznic tie tri jar-ka a voila! Smiley (resp. mozno staci dat Resolve Reference Problems pravym klikom na projekt a tam vyhladas toto co ti treba z tych troch jar)
EDIT: co sa tyka problemov s projektom ParserGenerator , odpoved najdete v dalsom poste od BCAA.
28.02.2010, 17:52:34 cize ak uz nechcete mat s tym problemy tak jednoducho tuto referenciu odstrante (tipujem ze to bude vo vasom projekte v Libraries/ParserGenerator tak tam jednoducho pravy klik a odstranit ) Nic nepokazite (ak neverite si spravte zalohu Wink)
----------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------
riesenie problemov pri robeni projektu
----------------------------------------------------------------------------------------------------
02.03.2010, 12:07:15 v triede Model.java
rob vkuse s arraylistom
List<Property> properties = new ArrayList<Property>();
a po naplneni to len pretypuj
(Property[]) properties.toArray()
02.03.2010, 12:21:31 treba ho inicializovat na Property[] p = new Property[props.size()] a az tak skopcit z arraylistu props do pola
05.03.2010, 10:25:34 Takto to funguje
Code [Select]
List<Property> property = new ArrayList<Property>();
.
.
.
Property[] p = (Property[])property.toArray(new Property[property.size()]);
return new Entity(name, p);
05.03.2010, 13:39:14 alebo jednoduchsie:
Code [Select]
return new Entity(name, properties.toArray(new Property[]{}));
----------------------------------------------------------------------------------------------------
vyskocit z volania metody v jave
return null; (ak nemas navratovy typ, tak return;) a nasledne pri volani metody testujes ci tam nie je null.. Resp. mozes hodit na metodu throws TvojException a potom pri volani metody potom testujes, ci vhodila vynimku
----------------------------------------------------------------------------------------------------
04.03.2010, 14:21:04 v tom cviku tri, crud_interface.vm, teraz sa tie sablony volaju dao_impl.java.vm, dao_interface.java.vm, entity_class.java.vm
----------------------------------------------------------------------------------------------------
Identifikatori v jave sa riadia nasledovnimi pravidlami :
1. Mozu obsahovat vsetky velke a male pismena, cisla a znaky _ a $
2. Meno identifikatora nesmie zacinat cislom - a to je cela filozofia
07.03.2010, 09:45:21 v projekte mas pripraveny string pod nazvom IDENT_REGEX, takze staci pouzit:
Code [Select]
line.matches(IDENT_REGEX)
druha moznost je pouzit metody java.lang.Character.isJavaIdentifierStart a java.lang.Character.isJavaIdentifierPart
----------------------------------------------------------------------------------------------------
povedal nam ako poriesit tie importy v generated, treba len jednoducho vymazat ten mgsa.jar subor v libraries a importnut ho tam znovu, lebo zrejme ked sa pregeneruje nanovo projekt mgsa tak tam aj tak ma natiahnuty len tu staru verziu akoby... potom to uz islo vsetko v pohode
----------------------------------------------------------------------------------------------------
07.03.2010, 20:05:26
vygenerovany subor OddelenieDaoImpl.java
Code [Select]
package sk.tuke.magsa.personalistika.dao_impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.ResultSet;
import sk.tuke.magsa.framework.CRUDDaoImpl;
import sk.tuke.magsa.framework.ValidatorException;
import sk.tuke.magsa.framework.ConnectionPool;
import sk.tuke.magsa.personalistika.entity.Oddelenie;
import sk.tuke.magsa.personalistika.dao.OddelenieDao;
public class OddelenieDaoImpl extends CRUDDaoImpl<Oddelenie> implements OddelenieDao {
public OddelenieDaoImpl(ConnectionPool pool) {
super(pool);
}
protected PreparedStatement prepareInsertStatement(Connection connection, Oddelenie object)
throws SQLException {
String query = "INSERT INTO Oddelenie (nazov, kod, poschodie) VALUES (?, ?, ?)";
PreparedStatement pstm = connection.prepareStatement(query);
pstm.setString(1, object.getNazov());
pstm.setString(2, object.getKod());
pstm.setInt(3, object.getPoschodie());
return pstm;
}
protected PreparedStatement prepareUpdateStatement(Connection connection, Oddelenie object)
throws SQLException {
String query = "UPDATE Oddelenie SET nazov=?, kod=?, poschodie=? where ident=?";
PreparedStatement pstm = connection.prepareStatement(query);
pstm.setString(1, object.getNazov());
pstm.setString(2, object.getKod());
pstm.setInt(3, object.getPoschodie());
pstm.setInt(4, object.getIdent());
return pstm;
}
protected PreparedStatement prepareDeleteStatement(Connection connection, Oddelenie object)
throws SQLException {
String query = "DELETE FROM Oddelenie where ident=?";
PreparedStatement pstm = connection.prepareStatement(query);
pstm.setInt(1, object.getIdent());
return pstm;
}
protected PreparedStatement prepareFindStatement(Connection connection, Integer id) throws
SQLException {
String query = "SELECT * FROM Oddelenie where ident=?";
PreparedStatement pstm = connection.prepareStatement(query);
pstm.setInt(1, id);
return pstm;
}
protected PreparedStatement prepareSelectStatement(Connection connection) throws SQLException {
String query = "SELECT * FROM Oddelenie";
PreparedStatement pstm = connection.prepareStatement(query);
return pstm;
}
protected Oddelenie createFromResultSet(ResultSet rs) throws SQLException {
Oddelenie object = new Oddelenie();
object.setNazov( rs.getString("nazov") );
object.setKod( rs.getString("kod") );
object.setPoschodie( rs.getInt("poschodie") );
return object;
}
@Override
protected void test(Oddelenie object) {
}
}
----------------------------------------------------------------------------------------------------
28.03.2010, 23:31:19 pripojenie k databaze
Code [Select]
staci pouzit connectionPool.java
ConnectionPool cp = new ConnectionPool();
Connection conn = cp.acquire();
----------------------------------------------------------------------------------------------------
18.04.2010, 13:54:23
spravne vygenerovana ebnf
Code [Select]
Constraint ::= (Length | DefaultValue | Regex | Range | Required)
DefaultValue ::= (<defaultvalue> <INT_VALUE>)
Entity ::= (<entity> <NAME> (<{> (Property (Property)*) <}>))
Length ::= (<length> <INT_VALUE> <INT_VALUE>)
Model ::= ((Entity)* (Reference)*)
Property ::= (<NAME> (<:> Type) ((Constraint ((<,> Constraint))*))?)
Range ::= (<range> <INT_VALUE> <INT_VALUE>)
Reference ::= (<reference> <NAME> <NAME>)
Regex ::= (<regex> <STRING_VALUE>)
Required ::= <required>
Type ::= (<INTEGER> | <REAL> | <STRING>)
----------------------------------------------------------------------------------------------------
18.04.2010, 21:07:56
Dam vygenerovat pomocou YAJCO parser, a vygeneruje mi parser s milion chybami.
jj stalo sa aj mne take...ale pridal som na novo yajco.jar ...to ,ktore je v osmom cviceni a ide vsetko ako ma
----------------------------------------------------------------------------------------------------
19.04.2010, 20:15:20
trieda Entity
Code [Select]
public Reference[] getOutgoingReferences() {
Reference[] refs = new Reference[outgoingReferences.size()];
int i = 0;
for(Reference ref : outgoingReferences){
refs[i++] = ref;
}
return refs;
}
Code [Select]
public Reference[] getOutgoingReferences() {
return (Reference[]) outgoingReferences.toArray(new Reference[outgoingReferences.size()]);
}
----------------------------------------------------------------------------------------------------
28.04.2010, 08:56:29 v tom XML ui.xsd, mne ten schemagen este stale nejde
29.04.2010, 15:41:33 Dajte @XmlTransient na zvysne get metody (napr. Entity getEntity()) a na obe abstraktne triedy. Potom to pojde.
----------------------------------------------------------------------------------------------------
01.05.2010, 23:06:46
12 cviko
ked som dobre pochopil tak metoda menu by mala vypisat ako polozky hlavneho menu nazvy entit napr nieco takeho:
(1) Zamestnanec
(2) Oddelenie
Enter selection:
po konkretnom vybere by sa potom malo pomocou tej triedy TableDialog vypisat podmenu pre pracu s entitou, co je v tej triede, ze:
(1) Display
(2) Create
(3) Edit
(4) Remove
(5) Return
Enter selection:
----------
02.05.2010, 08:32:24
Tam ked si pozries v zadani je pod napisane, ze za vypis podmenu je zodpovedne TableDialog, tato trieda je vsak abstraktna .. no neskor vytvaras pre kazdu entitu triedu, ktora rozsiruje TableDialog ... cize pre kazdu entitu budes mat taku triedu a kazda taka trieda ma aj metodu menu(), ktora vypise to dane submenu ale uz pracuje s tou entitou .. takze v tej sablone "app" musis pre kazdu entitu vytvorit polozku v menu (tak ako si pisal) a v ramci switchu potom podla toho co stlacis zavolat prislusnu triedu
ja to mam nejako takto (funguje, takze dufam ze aj dobre Tongue):
Code [Select]
#set( $n = 1 )
#foreach($entity in $model.entities)
case $n:
new ${entity.name}Table().menu();
break;
#set( $n = $n + 1 )
#end
----------------------------------------------------------------------------------------------------
03.05.2010, 18:58:49 overovanie obmedzeni pri zadavani hodnoty pouzivatelom
ja som to nechal overit prave tym testom v dao, ale neviem ci to bola spravna cesta
----------------------------------------------------------------------------------------------------
07.05.2010, 19:58:49
porovnanie componentu na class LookupColumn
Code [Select]
#if($!{component.entity})
dostat z componentu typ danej property
Code [Select]
#if($property.type == "INTEGER")
07.05.2010, 22:13:52
Tebe to nefunguje, lebo Entity mas vsade null, tak isto ako Property lebo inak by si property vytiahnut vedel.
Tvoj problem je v tom ze si si UI nenaplnil instanciami z modelu. To nestaci len validovat, ale ak zistis ze Entita alebo Property existuje tak ju tam aj musis setnut.
----------------------------------------------------------------------------------------------------
07.05.2010, 22:59:01
11.cviko, furt ked dam ten schemagen, vyhodi mi "cannot find symbol"
1. vsetky GET metody musia mat anotaciu, metody ktore sa nemaju premietnut do XSD maju byt transientne
2. odporucam oanotovat vsetky triedy, UI ma xmlRoot... a ostatne XmlType
3. pri pouziti schemagen je idealne zadat celu castu ku vsetky adresarom pouzitym v prikaze ako parametre
----------------------------------------------------------------------------------------------------
09.05.2010, 19:27:10
To XSD co sa ti vygenerovalo, na to kasli.
Do root adresara projektu nakopci ui.xsd a ui.xml a potom:
Code [Select]
UIProcessor parserext = new UIProcessor(new FileReader("ui.xml"));
09.05.2010, 19:46:21 Dik, uz ide mohli napisat do toho "navodu", ze sa na to mam vysrat...
10.05.2010, 09:20:46 to xsd tam je na validaciu toho xml-ka:
Code [Select]
SchemaFactory schemaFactory=SchemaFactory.newInstance("[url=http://www.w3.org/2001/XMLSchema]http://www.w3.org/2001/XMLSchema[/url]");
Schema schema=schemaFactory.newSchema(new File("model/schema1.xsd"));
unmarshaller.setSchema(schema);
10.05.2010, 12:16:31 Ano ibaze potom treba upravovat aj triedu UIProcessor.
A vzhladom nato ze generovane XSD je absolutne rovnake ako to na stranke tak staci pouzit to XSD a XML zo stranky.
----------------------------------------------------------------------------------------------------
10.05.2010, 16:31:24
porovnanie componentu na class LookupColumn
Code [Select]
#set( $entity = ${model.findEntity($table.entityName)} )
#set( $name = $column.getPropertyName() )
#if(${entity.findProperty($name)})
componentu typ danej property
Code [Select]
#set( $property = ${entity.findProperty($name)} )
----------------------------------------------------------------------------------------------------