Menu Zavrieť

CPL editor by CPLEd

Popis editora

CPLEd je pod GPL licenciou voľne dostupný grafický editor jazyka CPL. Žial, vývojové práce boli ukončené pred dvoma rokmi a odvtedy na ňom autor Bogdan Andrei Iancu nepracuje. Je napísaný v Jave, založený na JAXP API pre parsovanie XML súborov (keďže CPL je podmnožinou XML) a na javax.swing pre GUI. Ide o jednoduchý program, ktorý sa dá spustiť ako applet alebo ako desktopová aplikácia. Jeho výzor ilustruje Obrázok.

Možno vytvárať nové skripty, otvoriť a editovať už existujúce. Editovanie nie je realizované písaním, ale graficky. Keďže CPL má štruktúru stromu, CPLEd je rozdelený na dve časti. Vľavo sa nachádza strom, ktorému možno pridávať a rušiť uzly a listy, čo sú vlastne akoby príkazy CPL. Napravo v okne je možnosť nastaviť jednotlivé uzly a listy stromu. Takto si vizuálne vytvoríme CPL skript. Alebo prezrieme už predtým napísaný skript. CPLEd obsahuje aj možnosť vzdialene stiahnuť skript užívateľa zo servera, uploadnuť skript na server a zmazať skript na serveri. Využíva pritom protokol SIP (metóda REGISTER). Takéto posielanie však funguje iba z iného počítača (nie servera). Originálna java.net metóda nám na Linuxe nevedela poslať správu s jedného na ten istý počítač.

Pretože potrebujeme nainštalované JVM na spustenie aplikácie, najskôr si stiahneme a nainštalujeme JRE zo stránky firmy SUN

http://java.sun.com/javase/downloads/index.jsp

alebo použijeme

sudo apt-get install sun-java6-bin

CPLEd sme stiahli zo stránky projektu http://sourceforge.net/projects/cpled

 

Problémy s editorom CPLeD

Riešenie 1

Úprava zdrojových kódov

Žiaľbohu, CPLEd nefungoval korektne a tak sme ho museli trochu upraviť. CPLEd editor v stave, v ktorom ho zanechal jeho tvorca, používal na validáciu vytvorených CPL skriptov XML schému. OpenSER však používa DTD, a tak súbory vytvorené týmto editorom nebolo možné použiť na OpenSER serveri. Preto bolo potrebné zmeniť spôsob validácie v CPLEd editore na validáciu pomocou DTD. Z analýzy zdrojových kódov sme lokalizovali metódy, ktoré treba zmeniť. Problém bol lokalizovaný v balíku (package) CPLEd.tree v súbore CPLTree.java, ktorý obsahuje definíciu triedy CPLTree. V tomto súbore sme vykonali niekoľko zmien. Prvou z nich je zmena konštruktora triedy CPLTree, konkrétne zmena nastavení XML parsera. Vypustili sme nasledovné riadky:

factory.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
factory.setAttribute(JAXP_SCHEMA_SOURCE, new File(schemaSource));

Tým sme zmenili spôsob validácie vytvorených súborov na validáciu pomocou DTD (Parser DocumentBuilderFactory štandardne validuje podľa DTD, ale pridaním uvedených atribútov validuje podľa XML schémy).
Ďalšiu zmenu sme urobili v metóde newCPL, ktorá vytvára nový, prázdny CPL skript. Tu sme zmenili (odstránili) parametre elementu cpl (root tagu), ktoré definovali XML schému. (V DTD súborov CPL skriptov je elment cpl definovaný bez parametrov.)

Zmenili sme aj metódu saveCPL, ktorá ukladá vytvorený/editovaný CPL skript do súboru. Do súboru sme pridali definíciu typu (!DOCTYPE). Konkrétne:

byte xml_start[] = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
getBytes();
byte xml_type[] ="<!DOCTYPE cpl PUBLIC \"cpl.dtd\" \"cpl.dtd\">\n";
getBytes();

Tieto dve premenné (xml_start a xml_type) sú zapísané do každého súboru na začiatok:

out.write( xml_start );
out.write( xml_type );

To spôsobilo problém pri pokuse znovu uložiť otvorený súbor. Problém sme identifikovali v metóde saveCPL, ale ten vznikal ešte pri otváraní súboru. Pri otváraní súboru sa použije parser/validátor vytvorený v konštruktore triedy CPLTree. Ten ukladá tag DOCTYPE ako element do štruktúry xml ako brata koreňového elmentu. Pri zápise metóda saveCPL načíta koreňový element a rekurzívne zapisuje všetkých jeho potomkov, nie však bratov. Nahradili sme teda príkaz:

write_node( out, 0, ((Node)document).getFirstChild());

príkazom

 write_node( out, 0, ((Node)document).getLastChild());

Namiesto prvého potomka dokumentu, ktorým je element DOCTYPE zapisujeme posledný, teda koreňový element cpl. Tento spôsob funguje spoľahlivo aj v prípade, že vytvárame nový dokument, ktorý nemá element DOCTYPE, lebo v tomto prípade má dokument len jedného potomka. Vo výslednom súbore sa definícia typu súbore bude nachádzať vždy alebo je tam vkladaná pevne podľa postupu opísaného vyššie.
Po týchto úpravách sme vytvorili nový jar archív programu a mohli sme pokračovať v ďalšom riešení zadania. Pri vytváraní bolo treba upraviť v súbore s mapou vlastností /CPLEd/CPLEd/nbproject/project.properties tieto vlastnosti:

src.dir=${file.reference.CPLEd-util} 

na 

src.dir=. main.class= na main.class=CPLEd.gui.MainFrame

Upravený novovytvorený súbor CPLEd.jar sme uložili na disk do nového adresára, pridelili práva cez príkaz chmod 777. Takisto bolo potrebné skopírovať súbor cpl.dtd do tohoto adresára alebo neskôr v nastaveniach CPLEd-u zadať umiestnenie tohto súboru (viď ďalej).

 

Editor je dostupný na stiahnutie.

Riešenie 2

Zoznam problémov s editorom CPLEd:

1. XML schéma (cpl.xsd) voči ktorej sa validujú CPL scripty, sa nenašla.

2. Editor do elementu <cpl> vkladá informácie o schéme, ktoré cpl modul nevie spracovať (hlási chybu v scripte).

3. Pri sťahovaní scriptu zo servera editor hlási chybu “SCRIPT IS EMPTY“.

 

Riešenie problémov:

1. Editor vyžadoval vo svojom spúšťacom adresári súbor cpl.xsd, ktorý je potrebné stiahnuť z domény www.w3.org.
2. Upravili sme editor tak, aby generoval CPL scripty, v ktorých element <cpl> neobsahuje žiadne ďalšie parametre. Ale tieto scripty nedokáže editor opätovne načítať, pretože validuje script hneď pri jeho parsovaní. Tento proces sme pozmenili tak, že načítame script zo súboru bez validácie, doplníme do elementu <cpl> potrebné parametre a až následne vykonáme validáciu. Tento proces popisujú nasledujúce obrázky.

 

3. Server posiela 2 SIP správy s kódom 200, pričom editor spracuje len prvú, ale v druhej sa nachádza script, ktorý sme žiadali (prvá správa tento script neobsahuje). Problémom bolo nesprávne poradie príkazov v smerovacej logike konfiguračného súboru.
Nesprávne poradie:

…
save("location");
cpl_process_register();
…
Správne poradie:
…
cpl_process_register();
save("location");
…

Práca s editorom

Po nainštalovaní JRE spustíme potom vo Windows dvojklikom, v Linuxe cez príkaz java:
/usr/java/jre1.6.0_11/bin/java -jar /home/CPLEd\ jar/CPLEd.jar

Je výhodné, ale nie nutné, najskôr v menu Settings/Edit settings (nasledujúci obr.) zadať meno užívateľa, ktorého profil chceme upraviť pridaním CPL skriptu, a adresu servera (IP adresa počítača, na ktorom beží OpenSER). Ak sme neskopírovali súbor cpl.dtd do adresára, odkiaľ spúšťame CPLEd, je zadať jeho umiestnenie do posledného políčka. Nastavenia uložíme do súboru cpled.cfg v aktuálnom adresári pomocou tlačidla Save.

 

Následne môžeme vybrať v menu File/Open nejaký pripravený CPL skript. Po otvorení sa v ľavej časti zobrazí strom, ktorým sa dá prechádzať, otvárať a zatvárať jeho uzly a nastavovať parametre uzlov a listov (Obrázok 8). Alebo cez File/New si vyskladáme vlastný skript. Nové uzly sa pridávajú pravým kliknutím na existujúci uzol (na začiatku to je CPL root) a vybraním voľby Insert new.

Skript sa dá stiahnuť aj priamo z databázy z profilu užívateľa cez protokol SIP. V menu zvolíme možnosť Server/Download from ../Using SIP

V menu Server/Upload to ../Using SIP si teraz môžeme zvoliť, že chceme poslať vytvorený (resp. aktuálne otvorený) skript na server. Zadáme adresu servera a prihlasovacie meno a heslo užívateľa.
Existujúci skript možno užívateľovi odstrániť z profilu cez Server/Remove ../Using SIP.
Nasledujúci obrázok číslo 10 ilustruje nastavenia pri vzdialenom sťahovaní/ posielaní/ odstraňovaní skriptov na serveri. Ak sme uložili nastavenia v menu Settings/Edit settings, tak niektoré polia budú predvyplnené.

 

Poznámka: Pri otváraní súboru v CPLEd-e sú problémy so slovenskou interpunkciou.

Na ukážku sme vytvorili skript, ktorý by sa mohol zísť napríklad na Vianoce. V čase medzi 24. decembrom 2008 a 7.januárom 2009 prijmeme hovor iba od užívateľa 1001, ostatných užívateľov slušne odmietneme. V inom období prijmeme každý hovor.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE cpl PUBLIC "cpl.dtd" "cpl.dtd">
<cpl >
  <incoming>
    <time-switch>
      <time dtstart="20081224T000000" dtend="20090107T235959">
        <address-switch field="origin" subfield="user">
          <address is="1001">
             <proxy />
          </address>
          <otherwise>
            <reject status="reject" reason="Cez Vianoce nepracujem." />
          </otherwise>
        </address-switch>
      </time>
      <otherwise>
        <proxy/>
      </otherwise>
    </time-switch>
  </incoming>
</cpl>

Tu je CPL editor upravený podľa riešenia 1.

Here is working CPL editor changed by solution 1.

 

Rate this post

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

The reCAPTCHA verification period has expired. Please reload the page.