X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=server%2Ftesi%2Fsrc%2Fcom%2Fcompany%2FDirectoryWhatcer.java;fp=server%2Ftesi%2Fsrc%2Fcom%2Fcompany%2FDirectoryWhatcer.java;h=8b376a1a3557e5cdec54122e390834a1ac8cb760;hb=edfa62efb21b128dce6de134a3fb0d85f77bd2b8;hp=0000000000000000000000000000000000000000;hpb=a02dc65816998ec35975339dbad1627c2e5fb444;p=logicplayer.git diff --git a/server/tesi/src/com/company/DirectoryWhatcer.java b/server/tesi/src/com/company/DirectoryWhatcer.java new file mode 100644 index 0000000..8b376a1 --- /dev/null +++ b/server/tesi/src/com/company/DirectoryWhatcer.java @@ -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 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; + } + } + +}