package de.uhilger.filecms.api; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.Date; import java.util.logging.Level; import java.util.logging.Logger; public class SuchApi extends Api { private static Logger logger = Logger.getLogger(SuchApi.class.getName()); /** * Dateien suchen * * Suche von Dateien die einen gegebenen Suchbegriff irgendwo im Namen haben. * Die Suche erfolgt ohne Beruecksichtigung von Gross- und Kleinschreibung, * * @param suchbegriff zu suchender Inhalt * @param ablageort Ordner, in dem gesucht wird, einschl. Unterordner * * http://localhost:8080/suche/api?c=de.uhilger.suche.api.SuchApi&m=dateiSuchen&p=wbx&p=/home/ulrich/work * */ public String dateiSuchen(String suchbegriff, String ablageort) { ProcessBuilder builder = new ProcessBuilder("find", ablageort, "-iname", "*" + suchbegriff + "*"); return prozessAusfuehren(builder); } /** * grep -ril "javadoc" /media/extmirror/wbx-data/cms * http://localhost:8080/suche/api?c=de.uhilger.suche.api.SuchApi&m=inhaltSuchen&p=docker&p=/home/ulrich/work * @return */ public String inhaltSuchen(String suchbegriff, String ablageort) { ProcessBuilder builder = new ProcessBuilder("grep", "-ril", suchbegriff, ablageort); return prozessAusfuehren(builder); } /** * http://localhost:8080/suche/api?c=de.uhilger.suche.api.SuchApi&m=list&p=/home/ulrich/work * ls -l /pfad/zum/inhalt * @param ort * @return */ public String list(String ort) { ProcessBuilder builder = new ProcessBuilder("ls", "-l", ort); return prozessAusfuehren(builder); } private String prozessAusfuehren(ProcessBuilder builder) { try { File outFile = new File( new File(System.getProperty("catalina.base"), "temp"), "proc-out-" + new Date().getTime() + ".txt"); builder.redirectOutput(outFile); builder.redirectError(outFile); Process p = builder.start(); p.waitFor(); String newLine = System.getProperty("line.separator"); StringBuilder ergebnis = new StringBuilder(); BufferedReader fr = new BufferedReader(new FileReader(outFile)); String line = fr.readLine(); while(line != null) { ergebnis.append(line); ergebnis.append(newLine); line = fr.readLine(); } outFile.delete(); return ergebnis.toString(); } catch (IOException | InterruptedException ex) { logger.log(Level.SEVERE, null, ex); return ex.getMessage(); } } }