/*
* File : FilePCC.java
* Created : 12-jul-2000 12:30
* By : fbusquets
*
* JClic - Authoring and playing system for educational activities
*
* Copyright (C) 2000 - 2005 Francesc Busquets & Departament
* d'Educacio de la Generalitat de Catalunya
*
* This program 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) any later version.
*
* This program 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 (see the LICENSE file).
*/
package edu.xtec.jclic.fileSystem;
import edu.xtec.util.ResourceBridge;
import java.io.*;
/**
*
* @author Francesc Busquets (fbusquets@xtec.cat)
* @version 13.08.28
*/
public class FilePCC extends PCCFileSystem {
RandomAccessFile raf;
public FilePCC(String rootPath, String fName, ResourceBridge rb) throws Exception {
super(rootPath, fName, rb);
open();
}
@Override
protected void open() throws Exception{
if(raf==null){
DataInputStream dis=super.getDataInputStream(pccName);
initPCC(dis);
dis.close();
raf=new RandomAccessFile(sysFn(getCanonicalNameOf(root + pccName)), "r");
}
}
protected byte[] getBytes(int entryNum) throws IOException {
long fileSize=fe[entryNum].size;
byte[] b=new byte[(int)fileSize];
raf.seek(fe[entryNum].offset);
for(long k=0; k<fileSize;)
k+=raf.read(b, (int)k, (int)(fileSize-k));
return b;
}
@Override
protected void changeBase(String newRoot, String newFileName) throws Exception{
if(raf!=null)
throw new Exception("Unable to change base fileName: FileSystem is open!");
super.changeBase(newRoot, newFileName);
pccName = getCanonicalNameOf(newFileName);
}
@Override
public void close(){
if(raf!=null){
try{
raf.close();
} catch(Exception ex){
// eat exception
}
raf=null;
}
super.close();
}
}