/* ** This file is part of Filius, a network construction and simulation software. ** ** Originally created at the University of Siegen, Institute "Didactics of ** Informatics and E-Learning" by a students' project group: ** members (2006-2007): ** André Asschoff, Johannes Bade, Carsten Dittich, Thomas Gerding, ** Nadja Haßler, Ernst Johannes Klebert, Michell Weyer ** supervisors: ** Stefan Freischlad (maintainer until 2009), Peer Stechert ** Project is maintained since 2010 by Christian Eibl <filius@c.fameibl.de> ** and Stefan Freischlad ** Filius is free software: you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation, either version 2 of the License, or ** (at your option) version 3. ** ** Filius is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied ** warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ** PURPOSE. See the GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with Filius. If not, see <http://www.gnu.org/licenses/>. */ package filius.software.lokal; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.RandomAccessFile; import java.util.HashMap; import java.util.StringTokenizer; import javax.swing.tree.DefaultMutableTreeNode; import filius.Main; import filius.rahmenprogramm.Base64; import filius.rahmenprogramm.I18n; import filius.software.Anwendung; import filius.software.system.Datei; public class FileExplorer extends Anwendung implements I18n { //Betriebssystem betriebssystem; private HashMap<String, String> fileTypeMap; public FileExplorer(//Betriebssystem betriebssystem ) { super(); Main.debug.println("INVOKED-2 ("+this.hashCode()+", T"+this.getId()+") "+getClass()+" (FileExplorer), constr: FileExplorer()"); this.getFileTypeMap(); } public void beenden() { // TODO Auto-generated method stub Main.debug.println("INVOKED ("+this.hashCode()+", T"+this.getId()+") "+getClass()+" (FileExplorer), beenden()"); } public void starten() { // TODO Auto-generated method stub Main.debug.println("INVOKED ("+this.hashCode()+", T"+this.getId()+") "+getClass()+" (FileExplorer), starten()"); } /** * Diese Funktion importiert die ausgewaehlte Datei in das Betriebssystem des Rechners. Dabei * wird die Datei Base64 kodiert, um sie als String verarbeiten zu koennen! * * @param dateiname * @return */ public String addFile(String pfadname, String dateiname, DefaultMutableTreeNode ordner, String neuerName) { Main.debug.println("INVOKED ("+this.hashCode()+", T"+this.getId()+") "+getClass()+" (FileExplorer), addFile("+pfadname+","+dateiname+","+ordner+","+neuerName+")"); String ergebnis = messages.getString("sw_fileexplorer_msg1"); java.io.File file = new java.io.File(pfadname+dateiname); if(!file.exists() || file.length() > 150000) { // max filesize 150.000 Bytes return ergebnis +"\n"+ messages.getString("sw_fileexplorer_msg3"); } if (ordner.getUserObject().getClass().equals(Datei.class)) { Main.debug.println("ERROR ("+this.hashCode()+"): Es können keine Dateien in Dateien angeleget werden!"); } else { if(neuerName.equals("")) neuerName="noName"; String dateityp = this.getFileType(dateiname); Datei tempDatei; if (dateityp!=null && dateityp.equals("text")) { String txtInhalt = ""; try { BufferedReader in = new BufferedReader(new FileReader(pfadname+dateiname)); String str; while ((str = in.readLine()) != null) { txtInhalt += str + "\r\n"; } in.close(); ergebnis = messages.getString("sw_fileexplorer_msg2"); } catch (IOException e) { e.printStackTrace(Main.debug); } tempDatei = new Datei(neuerName,dateityp,txtInhalt); } else { tempDatei = new Datei(neuerName,dateityp,Base64.encodeFromFile(pfadname+dateiname)); tempDatei.setSize(file.length()); ergebnis = messages.getString("sw_fileexplorer_msg2"); } getSystemSoftware().getDateisystem().speicherDatei(ordner, tempDatei); } return ergebnis; } /** * Ermittelt an Hand der Dateiendung den Dateitypen, damit dieser im Dateikonstruktor gesetzt werden kann. * Es werden folgende Typen unterstuetzt und entsprechend gesetzt. Die Dateitypen werden in der Konfigurationsdate * filetypes.txt festgelegt. * * @param dateiname Der zu ueberpruefende Dateiname * @return Typ der Datei als String */ public String getFileType(String dateiname) { Main.debug.println("INVOKED ("+this.hashCode()+", T"+this.getId()+") "+getClass()+" (FileExplorer), getFileType("+dateiname+")"); String tmpType = ""; /* Schritt 1: Die Datei wird in LowerCase konvertiert und der letzte Token wird gesucht */ dateiname = dateiname.toLowerCase(); StringTokenizer st = new StringTokenizer(dateiname,"."); //Main.debug.println("Die Datei hat " + st.countTokens() + " Tokens!"); int counting = st.countTokens(); if(counting>1) { for(int i=1;i<counting;i++) { st.nextToken(); } String a = st.nextToken(); tmpType = fileTypeMap.get(a); } else { tmpType = "text"; } //Main.debug.println("Der Dateityp ist: " + tmpType); return tmpType; } /** * Liest einmalig die definierten Filetypen ein, damit diese beim Importieren * der Dateien passend zugewiesen werden koennen. Wird einmalig im Konstruktor * des FileImporters aufgerufen. * * @author Johannes Bade & Thomas Gerding * */ public void getFileTypeMap() { Main.debug.println("INVOKED ("+this.hashCode()+", T"+this.getId()+") "+getClass()+" (FileExplorer), getFileTypeMap()"); fileTypeMap = new HashMap<String, String>(); RandomAccessFile configFile; try { configFile = new RandomAccessFile( "config/filetypes.txt", "r" ); for ( String line; (line=configFile.readLine()) != null; ) { StringTokenizer stx = new StringTokenizer(line,";"); String tmpType = stx.nextToken(); StringTokenizer sty = new StringTokenizer(stx.nextToken(),","); while(sty.hasMoreElements()) { fileTypeMap.put(sty.nextToken(), tmpType); } } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(Main.debug); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(Main.debug); } //Main.debug.println(fileTypeMap); } }