예제 #1
0
 /**
  * Mécanisme de compilation du fichier Jvs.
  *
  * @param program Le code à compiler
  * @return La valeur true si la compilation est ok, false sinon.
  */
 public boolean doCompile(String program) {
   doStop();
   // Traduction Jvs -> Java puis Java -> Class et chargement de la classe
   // si succès
   Jvs2Java jvs2java = new Jvs2Java();
   if (getProglet() != null) {
     jvs2java.setProgletTranslator(getProglet().getTranslator());
     jvs2java.setProgletPackageName(
         getProglet().hasFunctions() ? "org.javascool.proglets." + getProglet().getName() : null);
   }
   String javaCode = jvs2java.translate(program);
   // Creation d'un répertoire temporaire
   String javaFile;
   try {
     File buildDir = FileManager.createTempDir("javac");
     javaFile = buildDir + File.separator + jvs2java.getClassName() + ".java";
     FileManager.save(javaFile, javaCode);
     // Si il y a un problème avec le répertoire temporaire on se rabat
     // sur le répertoire local
   } catch (Exception e1) {
     try {
       javaFile = new File(jvs2java.getClassName() + ".java").getAbsolutePath();
       System.err.println("Sauvegarde locale du fichier : " + javaFile);
       FileManager.save(javaFile, javaCode);
       // Sinon on signale le problème à l'utilisateur
     } catch (Exception e2) {
       System.out.println(
           "Attention ! le répertoire '"
               + System.getProperty("user.dir")
               + "' ne peut être utilisé pour sauver des fichiers, \n il faut re-lancer javascool dans un répertoire de travail approprié.");
       return false;
     }
   }
   if (Java2Class.compile(javaFile)) {
     try {
       runnable = Java2Class.load(javaFile);
       return true;
     } catch (Exception e3) {
       System.out.println(
           "Attention ! il y a eu une action externe de netoyyage de fichiers temporraires ou le répertoire '"
               + new File(javaFile).getParent()
               + "' ne peut être utilisé pour sauver des fichiers, \n il faut re-lancer javascool dans un répertoire de travail approprié.");
       return false;
     }
   } else {
     runnable = null;
     return false;
   }
 }
예제 #2
0
 /**
  * Copie un répertoire/fichier dans un autre en oubliant les svn.
  *
  * @param srcDir Dossier source.
  * @param dstDir Dossier cible.
  */
 public static void copyFiles(String srcDir, String dstDir) throws IOException {
   if (new File(srcDir).isDirectory()) {
     if (!new File(srcDir).getName().equals(".svn")) {
       for (String s : FileManager.list(srcDir)) {
         String d = dstDir + File.separator + new File(s).getAbsoluteFile().getName();
         JarManager.copyFiles(s, d);
       }
     }
   } else {
     new File(dstDir).getParentFile().mkdirs();
     JarManager.copyStream(new FileInputStream(srcDir), new FileOutputStream(dstDir));
   }
 }
예제 #3
0
 private ProgletEngine() {
   String javascoolJar = Core.javascoolJar();
   // Détection des proglets présentes dans le jar
   try {
     proglets = new ArrayList<Proglet>();
     for (String dir :
         FileManager.list(javascoolJar, "org.javascool.proglets.[^\\.]+.proglet.pml")) {
       String name = dir.replaceFirst("jar:[^!]*!(.*)proglet.pml", "$1");
       try {
         Proglet proglet = new Proglet().load(name);
         proglets.add(proglet);
       } catch (Exception e) {
         System.err.println(
             "Erreur lors de la détection dans le jar de la proglet "
                 + name
                 + " en "
                 + dir
                 + " ("
                 + e
                 + ")");
       }
     }
   } catch (Exception er) {
     System.err.println(
         "Erreur lors de la détection des proglets ("
             + er
             + " avec "
             + javascoolJar
             + "\n . . vous pouvez quand même utiliser JavaScool");
   }
   // Définit une proglet "vide" pour lancer l'interface
   if (proglets.isEmpty()) {
     for (int i = 0; i < 1; i++) {
       Proglet p = new Proglet();
       p.pml.set("name", "Interface");
       p.pml.set("icon-location", "org/javascool/widgets/icons/scripts.png");
       p.pml.set("help-location", "org/javascool/macros/memo-macros.htm");
       proglets.add(p);
     }
   }
   // Tri des proglets par ordre alphabétique
   Collections.sort(
       proglets,
       new Comparator<Proglet>() {
         @Override
         public int compare(Proglet p1, Proglet p2) {
           return p1.getName().compareTo(p2.getName());
         }
       });
 }