]> matita.cs.unibo.it Git - logicplayer.git/blobdiff - server/tesi/src/com/company/DirectoryWhatcer.java
Shuffling.
[logicplayer.git] / server / tesi / src / com / company / DirectoryWhatcer.java
diff --git a/server/tesi/src/com/company/DirectoryWhatcer.java b/server/tesi/src/com/company/DirectoryWhatcer.java
new file mode 100644 (file)
index 0000000..8b376a1
--- /dev/null
@@ -0,0 +1,147 @@
+package com.company;
+
+import java.io.*;
+import java.nio.file.Path;
+import java.nio.file.StandardWatchEventKinds;
+import java.nio.file.WatchEvent;
+import java.nio.file.WatchEvent.Kind;
+import java.nio.file.WatchKey;
+import java.nio.file.WatchService;
+import java.security.NoSuchAlgorithmException;
+import java.sql.SQLException;
+import java.util.ArrayList;
+
+// Simple class to watch directory events.
+class DirectoryWatcher implements Runnable {
+
+    private Path path;
+
+    public DirectoryWatcher(Path path) {
+        this.path = path;
+    }
+
+    //rimuove tutti gli elementi non validi
+    private void pulisciCartella() {
+        File dir = new File(global.locationEsercizi);
+        String[] lista=dir.list();
+        for(String name : lista)
+        {
+            if (!EsNameParser.check(name))
+            {
+                File file = new File(global.locationEsercizi+name);
+                if (file.delete())
+                    System.out.println("eliminato: "+name);
+                else
+                    System.out.println("problema di eliminazione file");
+            }
+            else
+            {
+                xmlOperation es=new xmlOperation();
+                File car=new File(global.listaEsercizi);
+                if (car.exists()) {
+                    dbConnect db=new dbConnect();
+                    try {
+                        ArrayList<String> esercizi=suString.stringToArrayList(db.dbQuery("4"));
+                        boolean add=true;
+                        for(String esercizio : esercizi)
+                        {
+                            if(esercizio.equals(name))
+                                add=false;
+                        }
+                        if(add)
+                            es.add(name);
+                    } catch (SQLException e) {
+                        e.printStackTrace();
+                    } catch (ClassNotFoundException e) {
+                        e.printStackTrace();
+                    } catch (IllegalAccessException e) {
+                        e.printStackTrace();
+                    } catch (InstantiationException e) {
+                        e.printStackTrace();
+                    } catch (IOException e) {
+                        e.printStackTrace();
+                    } catch (NoSuchAlgorithmException e) {
+                        e.printStackTrace();
+                    }
+                }
+            }
+        }
+    }
+
+    // print the events and the affected file
+    private void printEvent(WatchEvent<?> event) throws IOException {
+        Kind<?> kind = event.kind();
+        if (kind.equals(StandardWatchEventKinds.ENTRY_CREATE))
+        {
+            Path pathCreated = (Path) event.context();
+            System.out.println("Entry created:" + pathCreated);
+            boolean check = EsNameParser.check(pathCreated.getFileName().toString());
+            if(!check)
+            {
+                File file = new File(global.locationEsercizi+pathCreated.getFileName().toString());
+                if(file.delete())
+                    System.out.println("eliminato");
+                else
+                    System.out.println("problema di eliminazione file");
+            }
+            else
+            {
+                xmlOperation es=new xmlOperation();
+                File dir=new File(global.listaEsercizi);
+                if (dir.exists())
+                    es.add(pathCreated.getFileName().toString());
+            }
+        }
+        else if (kind.equals(StandardWatchEventKinds.ENTRY_DELETE))
+        {
+            Path pathDeleted = (Path) event.context();
+            System.out.println("Entry deleted:" + pathDeleted);
+            xmlOperation es=new xmlOperation();
+            File dir=new File(global.listaEsercizi);
+            if (dir.exists())
+                es.remove(pathDeleted.getFileName().toString());
+        }
+        else if (kind.equals(StandardWatchEventKinds.ENTRY_MODIFY))
+        {
+            Path pathModified = (Path) event.context();
+            System.out.println("Entry modified:" + pathModified);
+        }
+    }
+
+    @Override
+    public void run() {
+        try {
+            pulisciCartella();
+            WatchService watchService = path.getFileSystem().newWatchService();
+            path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE,
+                    StandardWatchEventKinds.ENTRY_MODIFY, StandardWatchEventKinds.ENTRY_DELETE);
+
+            // loop forever to watch directory
+            while (true) {
+                WatchKey watchKey;
+                watchKey = watchService.take(); // this call is blocking until events are present
+
+                // poll for file system events on the WatchKey
+                for (final WatchEvent<?> event : watchKey.pollEvents()) {
+                    printEvent(event);
+                }
+
+                // if the watched directed gets deleted, get out of run method
+                if (!watchKey.reset()) {
+                    System.out.println("No longer valid");
+                    watchKey.cancel();
+                    watchService.close();
+                    break;
+                }
+            }
+
+        } catch (InterruptedException ex) {
+            System.out.println("interrupted. Goodbye");
+            return;
+        } catch (IOException ex) {
+            ex.printStackTrace();  // don't do this in production code. Use a loggin framework
+            return;
+        }
+    }
+
+}