/* ** 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.system; import java.io.Serializable; import filius.rahmenprogramm.Base64; /** * Dateien sind Objekte, die vom Betriebssystem verwaltet werden. Jede Datei hat * einen Dateinamen (der eindeutig sein sollte, einen Datei Typ (ähnlich einem * mime/type) und natürlich den Dateiinhalt selber. * * @author Nadja & Thomas Gerding * */ public class Datei implements Serializable { /* * Attribute * ---------------------------------------------------------------------------------- */ /** * */ private static final long serialVersionUID = 1L; /** Typ der Datei, z.B. mp3, doc, txt,... */ private String dateiTyp; /** Inhalt der Datei als String (ggf. Base64-kodiert) */ private String dateiInhalt; /** Der Dateiname (ist auch der Rueckgabewert von toString()) */ private String name; // Dateiname // real size of file without having enforced Base64 encoding private long decodedSize = -1; /** * Erzeugt ein neues Objekt vom Typ Datei. Dieser Konstruktor wird * benoetigt, damit die Klasse den Anforderungen an JavaBeans entspricht! * */ public Datei() { } /** * Erzeugt ein neues Objekt vom Typ Datei * * @param name * der Bezeichner der Datei * @param typ * ein Dateittyp * @param dateiInhalt * der eigentliche Inhalt. Binaerdateien sollten Base64-kodiert * gespeichert werden. */ public Datei(String name, String typ, String dateiInhalt) { this.dateiInhalt = dateiInhalt; this.name = name; this.dateiTyp = typ; } public void setSize(long size) { this.decodedSize = size; } /** * Liefert die Groesse der Datei zurueck * * @return die Laenge des Strings dateiInhalt */ public long holeGroesse() { if(this.getDateiInhalt() == null) return 0; if(this.dateiTyp!=null && this.dateiTyp.equals("text")) return this.getDateiInhalt().length(); else { try { if(decodedSize<0) setSize(Base64.decode(this.getDateiInhalt()).length); // set current size to be sure it's correct return decodedSize; } catch(Exception e) { // current file does not seem to be Base64 encoded (that's why an error occurred... hopefully) if(decodedSize<0) return this.getDateiInhalt().length(); else return decodedSize; } } } /** * Liefert den Dateiinhalt so zurueck, wie er gespeichert wurde. D. h., dass * kodierte Dateien auch kodiert ausgegeben werden. * * @return der Dateiinhalt als String */ public String getDateiInhalt() { return dateiInhalt; } public void setDateiInhalt(String dateiInhalt) { this.dateiInhalt = dateiInhalt; } /** * Methode fuer den Zugriff auf Base64-kodierte Dateien. * * @return Gibt den Base64-dekodierten Dateiinhalt als String zurück. * @see setzeDateiInhaltDecoded */ public String holeDateiInhaltDecoded() { return (String) Base64.decodeToObject(this.getDateiInhalt()); } /** * Methode fuer den Zugriff auf Base64-kodierte Dateien. * * @param dateiInhalt * einen "binaeren" Dateiinhalt, der Base64-kodiert gespeichert * werden soll */ public void setzeDateiInhaltDecoded(String dateiInhalt) { this.dateiInhalt = Base64.encodeObject(dateiInhalt); } public String getDateiTyp() { return dateiTyp; } public void setDateiTyp(String dateiTyp) { this.dateiTyp = dateiTyp; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String toString() { return name; } }