FEI archív 2010/2011 > 4. ročník

MaGSA - Modelovanie a generovanie softvérových architektúr

(1/32) > >>

jan:
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


--- Code: ---( for(EntityRef er: entities) )
--- End code ---
----------------------------------------------------------------------------------------------------


----------------------------------------------------------------------------------------------------
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: ---public enum Type {
    INTEGER, REAL, STRING;
}
--- End code ---

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: ---List<Property> property = new ArrayList<Property>();
.
.
.
Property[] p = (Property[])property.toArray(new Property[property.size()]);
return new Entity(name, p);
--- End code ---

05.03.2010, 13:39:14   alebo jednoduchsie:


--- Code: ---return new Entity(name, properties.toArray(new Property[]{}));
--- End code ---
----------------------------------------------------------------------------------------------------

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: ---line.matches(IDENT_REGEX)
--- End code ---

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: ---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) {
        
    }
}
--- End code ---

----------------------------------------------------------------------------------------------------
28.03.2010, 23:31:19   pripojenie k databaze


--- Code: ---staci pouzit connectionPool.java
ConnectionPool cp = new ConnectionPool();
Connection conn = cp.acquire();
--- End code ---
----------------------------------------------------------------------------------------------------

18.04.2010, 13:54:23
spravne vygenerovana ebnf


--- Code: ---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>)
--- End code ---
----------------------------------------------------------------------------------------------------

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: ---public Reference[] getOutgoingReferences() {
        Reference[] refs = new Reference[outgoingReferences.size()];
        int i = 0;
        for(Reference ref : outgoingReferences){
            refs[i++] = ref;
        }
        return refs;
    }
--- End code ---


--- Code: ---public Reference[] getOutgoingReferences() {
        return (Reference[]) outgoingReferences.toArray(new Reference[outgoingReferences.size()]);
    }
--- End code ---
----------------------------------------------------------------------------------------------------

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: ---#set( $n = 1 )
#foreach($entity in $model.entities)
case $n:
new ${entity.name}Table().menu();
break;
#set( $n  = $n + 1 )
#end
--- End code ---
----------------------------------------------------------------------------------------------------

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: ---#if($!{component.entity})
--- End code ---

dostat z componentu typ danej property


--- Code: ---#if($property.type == "INTEGER")
--- End code ---

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: ---UIProcessor parserext = new UIProcessor(new FileReader("ui.xml"));
--- End code ---

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: ---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);
--- End code ---

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: ---#set( $entity = ${model.findEntity($table.entityName)} )
#set( $name = $column.getPropertyName() )
#if(${entity.findProperty($name)})
--- End code ---

componentu typ danej property


--- Code: ---#set( $property = ${entity.findProperty($name)} )
--- End code ---
----------------------------------------------------------------------------------------------------

domino3d:
 :thumbs-up: dobra praca jan

jan:
jap, jap, vyburil som sa

Cheiftan:
ake je heslo do moodla?

drtic:
magsicka

Navigácia

[0] Index správ

[#] Ďalšia strana

Go to full version