/* ** 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.FileNotFoundException; 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; /** * Diese Klasse stellt Funktionen bereit um reale Dateien auf Rechnerrechner der * Internetworking Anwendung zu importieren. * * @author Thomas Gerding & Johannes Bade * */ public class FileImporter extends Anwendung implements I18n { private HashMap<String, String> fileTypeMap; public FileImporter() { super(); Main.debug.println("INVOKED-2 ("+this.hashCode()+", T"+this.getId()+") "+getClass()+" (FileImporter), constr: FileImporter()"); this.getFileTypeMap(); } public void starten() { Main.debug.println("INVOKED ("+this.hashCode()+", T"+this.getId()+") "+getClass()+" (FileImporter), starten()"); } public void beenden() { Main.debug.println("INVOKED ("+this.hashCode()+", T"+this.getId()+") "+getClass()+" (FileImporter), beenden()"); } /** * 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()+" (FileImporter), addFile("+pfadname+","+dateiname+","+ordner+","+neuerName+")"); Datei tempDatei; String dateityp; String ergebnis = messages.getString("sw_fileimporter_msg1"); //Main.debug.println("#################################################"); try { if (ordner.getUserObject().getClass().equals(Datei.class)) { //Main.debug //.println("Es können Keine Dateien in Dateien angeleget werden!"); } else { if (dateiname.equals("")) { dateityp = this.getFileType(dateiname); tempDatei = new Datei("noName", this .getFileType(dateiname), Base64.encodeFromFile(pfadname + dateiname)); if (dateityp.equals("text")) { tempDatei.setDateiInhalt(Base64.decodeToObject( tempDatei.getDateiInhalt()).toString()); } getSystemSoftware().getDateisystem().speicherDatei(ordner, tempDatei); } else { dateityp = this.getFileType(dateiname); tempDatei = new Datei(dateiname, dateityp, Base64 .encodeFromFile(pfadname + dateiname)); if (dateityp.equals("text")) { tempDatei.setDateiInhalt(Base64.decodeToObject( tempDatei.getDateiInhalt()).toString()); } getSystemSoftware().getDateisystem().speicherDatei(ordner, tempDatei); } ergebnis = messages.getString("sw_fileimporter_msg2")+"\n\t"+pfadname+dateiname; } } catch (Exception e) {} 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()+" (FileImporter), 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()+" (FileImporter), 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) { e.printStackTrace(Main.debug); } catch (IOException e) { e.printStackTrace(Main.debug); } //Main.debug.println(fileTypeMap); } }