Validační server - automatická kontrola semestrálních prací

Externí akce

Zpět na webovou konfiguraci

Externí akce jsou jar knihovny, které slouží, stejně jako již vytovřené vlastní akce, k částečné nebo úplné validaci domény. Externí akce může vytvářet programátor bez větší znalosti validačního serveru. Následující informace jsou tedy určené pro programátory, kteři by chtěli přidat k validátoru další vlastní akce.

Je nutné, aby knihovní třída:

Dále je nutné aby v jar knihovně byl v souboru MANIFEST.MF nastaven parametr AKCE: název_vlastni_akce, kde název akce musí být unikátní přes všechny akce.

Následující příklad je ukázka jednoduché vlastní akce, která pro zjistí název a velikost odevzdaného souboru.

import java.io.File;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import org.mozilla.javascript.Context;
import org.mozilla.javascript.Scriptable;

import cz.zcu.validationserver.ValidationResult;
import cz.zcu.validationserver.exceptions.ValidationError;
import cz.zcu.validationserver.gui.actions.ParametrAkce;
import cz.zcu.validationserver.gui.actions.VlastniAkce;
import cz.zcu.validationserver.gui.data.Parametr;
import cz.zcu.validationserver.validation.FullValidationResult;
import cz.zcu.validationserver.validation.ValidationInfo;

/**
 * Vlastní akce, která je k~aplikaci přidána jako externí
 * knihovna. Akce získává z~odevzdaného souboru jeho název
 * a~velikost. S~těmito parametry můžeme pak pracovat v~dalších
 * krocích validace.
 * @author Veronika Dudová
 *
 */
public class ExterniAkceTest implements VlastniAkce {
  public static final String PARAM1 = "Název souboru";
  public static final String PARAM2 = "Velikost souboru";
	
  /**
   * Spustí akci (v~průběhu validace domény).
   */
  public void execute(ValidationInfo info, FullValidationResult result,
      Scriptable scope, Context jsContext, Collection parametry) {
    String par1 = "", par2 = "";
    File soubor = null;
		
    // získání hodnot parametru
    for(Parametr p:parametry) {
      if(p.getKey().equals(PARAM1)) par1 = p.getValue();
      else if (p.getKey().equals(PARAM2)) par2 = p.getValue();
    }
		
    if(par1.equals("") || par2.equals("")) {
      // chyba - není zadána JS proměnná pro počet slov
      String textChyby = info.getDomain().getLocalizedString("wrong_param",
          info.getValidationInput().getLocale());
      throw new ValidationError(textChyby+" ("+PARAM1+"/"+PARAM2+")", 
          ValidationResult.VR_SERVER_ERROR);
    }
		
    // získání souboru, jeho jména a~velikosti
    soubor = info.getInputFile();
    String name = soubor.getName();
    long velikost = soubor.length();		
		
    // parametry do výstupu
    scope.put(par1,scope,name);
    scope.put(par2,scope,velikost);		
  }

  public String getNazev() {
    return "Externí akce - test";
  }

  public List getParametry() {
    ArrayList list = new ArrayList();
    list.add(new ParametrAkce(PARAM1,"Název souboru","Javascriptová proměnná" +
        + "pro uložení názvu souboru.",""));
    list.add(new ParametrAkce(PARAM2,"Velikost souboru (JS proměnná)",
        "JS proměnná typu int - velikost odevzdávaného souboru",""));
    return list;
  }

  public String getPopis() {
    return "Akce nastavuje prametry pro název a~velikost odevzdaného souboru.";
  }

  public String getHelp() {
    String help =
      "<h4> Kontextová nápověda: vlastní akce \"Testovací akce s parametry\"</h4>";
    help += "<p>Toto je testovací akce pro ukázku použití externích akcí.</p>";
    help += "<p>Parametr \"Název souboru\" je javascriptová proměnná sloužící k uložení" + 
          + "názvu odevzdávaného souboru.</p>";
    help += "<p>Parametr \"Velikost souboru\" je javascriptová proměnná typu int sloužící" +
          + "k uložení velikosti odevzdávaného souboru.</p>";
    return help;
  }

  public String getId() {
    return "ExterniAkceTest";
  }

  public String getKategorii() {
    return KAT_SOUBOR;
  }
}

Zpět na webovou konfiguraci

autor: Veronika Dudová, duben 2010 (veronnie at students.zcu.cz)