• Welcome to TUKE FÓRUM - Fórum pre študentov Technickej Univerzity v Košiciach.
 

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

Started by jan, 04.02.2011, 22:09:45

« predchdzajce - alie »

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

( 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)...
...

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

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:

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:

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

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

staci pouzit connectionPool.java
ConnectionPool cp = new ConnectionPool();
Connection conn = cp.acquire();

----------------------------------------------------------------------------------------------------

18.04.2010, 13:54:23
spravne vygenerovana ebnf

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

public Reference[] getOutgoingReferences() {
       Reference[] refs = new Reference[outgoingReferences.size()];
       int i = 0;
       for(Reference ref : outgoingReferences){
           refs[i++] = ref;
       }
       return refs;
   }


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

#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

#if($!{component.entity})

dostat z componentu typ danej property

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

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:

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

#set( $entity = ${model.findEntity($table.entityName)} )
#set( $name = $column.getPropertyName() )
#if(${entity.findProperty($name)})


componentu typ danej property

#set( $property = ${entity.findProperty($name)} )
----------------------------------------------------------------------------------------------------
- Understanding is a three edged sword. (Your side, their side, and the truth) [Vorlons' saying]
(thanks to Agamemnon)

domino3d

vivat academicus

jan

- Understanding is a three edged sword. (Your side, their side, and the truth) [Vorlons' saying]
(thanks to Agamemnon)

Cheiftan

Hello!


jan

Software Factories: Assembling Applications with Patterns, Models, Frameworks, and Tools

neviete toto niekto zohnat http://www.amazon.com/Software-Factories-Assembling-Applications-Frameworks/dp/0471202843
- Understanding is a three edged sword. (Your side, their side, and the truth) [Vorlons' saying]
(thanks to Agamemnon)

Achilus13

no čuvajte neviem nejakosi ako mám urobiť to umiesnenie súborov lebo keď s tým chcem pracovať mi vypisuje NetBeans že nevie nájsť to dané umiestnenie metamodel a parser kam to mám hodiť aby s tým vedel pracovať?? do nejakého priečinka Natbeansov?? alebo niečo nastaviť v ňom??

Havran

Quote from: jan on  18.02.2011, 03:18:09
Software Factories: Assembling Applications with Patterns, Models, Frameworks, and Tools

neviete toto niekto zohnat http://www.amazon.com/Software-Factories-Assembling-Applications-Frameworks/dp/0471202843


ja to mam, ale nemyslim si zase ze by ta kniha bola potrebna na absolvovanie tohto predmetu Smiley

Achievement of your happiness is the only moral purpose of your life.

Matejus


jan

Quote from: Havran on  18.02.2011, 16:09:33
ja to mam, ale nemyslim si zase ze by ta kniha bola potrebna na absolvovanie tohto predmetu Smiley


posli mi to prosim ta, z najvacsou pravdepodobnostou to citat nebudem, ale pozriem aspon
- Understanding is a three edged sword. (Your side, their side, and the truth) [Vorlons' saying]
(thanks to Agamemnon)

domino3d

mozes to dat zdielat keby sme si to nahodou chceli aj my pozriet?
dakujem
nechcem potom jana otravovat s tym dvakrat ;)
vivat academicus

trek


Havran

Achievement of your happiness is the only moral purpose of your life.

jan

- Understanding is a three edged sword. (Your side, their side, and the truth) [Vorlons' saying]
(thanks to Agamemnon)

jan

- Understanding is a three edged sword. (Your side, their side, and the truth) [Vorlons' saying]
(thanks to Agamemnon)

jan

Quote from: jan on  24.02.2011, 02:33:33
nejak nevidim kde je ten IDENT_REGEX  :'(

dúfal som, že to bude v yajco.jar, tak som ho dekompiloval. Žiaľ nebolo  :P, tak som k nemu, aspoň vygeneroval dokumentáciu (https://hron.fei.tuke.sk/~lazar/yajco/). Možno sa na niečo zíde ( ale asi nie :D :D :D ).
- Understanding is a three edged sword. (Your side, their side, and the truth) [Vorlons' saying]
(thanks to Agamemnon)

Cheiftan

ja som pouzil dva regularne vyrazy na identifikatory (na mena properties):

[_$a-zA-Z][0-9a-zA-Z_$]+
([_$a-zA-Z][0-9a-zA-Z_$]+)[\\s]:[\\s](INTEGER|REAL|STRING)+  -> ked sa definuje aj typ

opravte ma ak to mam zle
Hello!

markus

mna skor trapi ta tretia vlastnost :D
nesmu byt zhodne s klucovym slovom ... - to mam teraz vypisat vsetkych 50 klucovych slov ze nesmie mat taky vyraz?

Quote from: Cheiftan on  25.02.2011, 16:24:59
ja som pouzil dva regularne vyrazy na identifikatory (na mena properties):

[_$a-zA-Z][0-9a-zA-Z_$]+
([_$a-zA-Z][0-9a-zA-Z_$]+)[\\s]:[\\s](INTEGER|REAL|STRING)+  -> ked sa definuje aj typ

opravte ma ak to mam zle

a k tomuto asi tolko...
smu obsahovat iba pismena, cislice a znaky _ a $ za pismeno je pritom povazovany akykolvek znak, za ktory ho povazuje znak unicode.

nieco mi hovori ze unicode pozna viacero znakov ako a-z ... cize podla mna tam by trebalo nejaku vacsiu mnozinu ale neviem presne ako

piton

ja si myslim, ze z toho sa az tak nestriela... ja som tam dal len kontrolu, na to, ci sa meno nezacina cislo...
"Iba život, ktorý žijeme pre ostatných, stojí za to." - Albert Einstein

santa99

to:Cheiftan

Ehm zbytocne pouzivas dva regularne vyrazy  , staci pouzit predsa jeden co ste vsetci zabudli na TIcko ?? Ved mame pozitivny a tranzitivny uzaver ty tam mas pozitivny spomen si jaku vlastnost to vyjadruje :)

qwerty

Quote from: piton on  26.02.2011, 00:06:56
ja si myslim, ze z toho sa az tak nestriela... ja som tam dal len kontrolu, na to, ci sa meno nezacina cislo...

radsej si to uprav cez ten regularny vyraz, lebo inac ti pri generovani tried s neplatnym menom pre identifikator neprebehne kompilacia...
Theory is when you know something, but it doesn't work. Practice is when something works, but you don't know why. Programmers combine theory and practice: Nothing works and they don't know why.

piton

ja to mam cez regular., ale jednoduchsi... myslim, ze kontrolovat ci to nie je jedno z tych 50 klucovych slov je ale trosku prehnane nie?
"Iba život, ktorý žijeme pre ostatných, stojí za to." - Albert Einstein

Cheiftan

Quote from: santa99 on  26.02.2011, 01:02:47
to:Cheiftan

Ehm zbytocne pouzivas dva regularne vyrazy  , staci pouzit predsa jeden co ste vsetci zabudli na TIcko ?? Ved mame pozitivny a tranzitivny uzaver ty tam mas pozitivny spomen si jaku vlastnost to vyjadruje :)

no ano staci pouzit jeden
TIcko som urobil :)  :bannana_guitar: a viem rozdiel medzi ()+ a ()*
preto som pouzil pozitivny uzaver, aby neboli take mena properties ako: "_" a "$"
Hello!

jan

Quote from: piton on  26.02.2011, 04:03:25
ja to mam cez regular., ale jednoduchsi... myslim, ze kontrolovat ci to nie je jedno z tych 50 klucovych slov je ale trosku prehnane nie?

mna to tiez nenapadlo, ale cert to ber
package JavaKeywords;

import java.util.Arrays;
import java.util.List;

public class JavaKeywords {

    private static final String keywords[] = {
        "abstract", "continue", "for",          "new",          "switch",
        "assert",   "default",  "goto",         "package",      "synchronized",
        "boolean",  "do",       "if",           "private",      "this",
        "break",    "double",   "implements",   "protected",    "throw",
        "byte",     "else",     "import",       "public",       "throws",
        "case",     "enum",     "instanceof",   "return",       "transient",
        "catch",    "extends",  "int",          "short",        "char",
        "final",    "try",      "interface",    "static",       "void",
        "class",    "finally",  "long",         "strictfp",     "volatile",
        "const",    "float",    "native",       "super",        "while"};
    private static final List l = Arrays.asList(keywords);

    public Boolean isJavaKeyWord(String keyword) {
        return l.contains(keyword);
    }

    // alebo lepsie
    public Boolean isJavaKeyWord2(String keyword) {
        for (int i = 0; i < keywords.length; i++) {
            if (keyword.equals(keywords[i])) {
                return true;
            }
        }
        return false;
    }
}
- Understanding is a three edged sword. (Your side, their side, and the truth) [Vorlons' saying]
(thanks to Agamemnon)

keckus

zbytocne to robit cez regularne vyrazy ked trieda Character ma staticke metody isJavaIdentifierStart a isJavaIdentifierPart pomocou ktorych sa to da jednoducho overit a zarucene spravne :)