/** * 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; } }
/** * 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)); } }
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()); } }); }