package org.bigbluebutton.webminer.swf;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.io.StringReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.zip.DataFormatException;
import org.apache.log4j.Logger;
import com.flagstone.transform.FSCharacter;
import com.flagstone.transform.FSDefineText;
import com.flagstone.transform.FSMovie;
import com.flagstone.transform.FSMovieObject;
import com.flagstone.transform.FSText;
import org.bigbluebutton.webminer.index.Index;
public class SwfParser {
private StringBuffer sb = null;
private URL url;
private static Logger logger = Logger.getLogger(Index.class);
/*public SwfParser(String swfExec, String swfFileName) {
this.swfExec = swfExec;
this.swfFileName = swfFileName;
}*/
public SwfParser(URL url){
this.url = url;
}
public Reader getReader() {
if (logger.isDebugEnabled())
logger.debug(sb.toString());
return new StringReader(sb.toString());
}
public String getContents() {
return sb.toString();
}
/*public void parse() throws IOException, InterruptedException {
Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec(
swfExec + " " + swfFileName);
// put a BufferedReader on the ls output
InputStream inputstream =
proc.getInputStream();
InputStreamReader inputstreamreader =
new InputStreamReader(inputstream);
BufferedReader bufferedreader =
new BufferedReader(inputstreamreader);
// read the ls output
sb = new StringBuffer();
String line;
while ((line = bufferedreader.readLine())
!= null) {
sb.append(line);
}
// check for ls failure
if (proc.waitFor() != 0) {
System.err.println("exit value = " +
proc.exitValue());
}
}*/
public void parse() throws IOException, InterruptedException {
try {
url.openConnection();
InputStream is = url.openStream();
ByteArrayOutputStream bao = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
int numRead;
int numWritten = 0;
while ((numRead = is.read(buf)) != -1) {
bao.write(buf, 0, numRead);
numWritten += numRead;
}
sb = new StringBuffer();
FSMovie swf = new FSMovie(bao.toByteArray());
ArrayList al = swf.getObjectsOfType(FSMovieObject.DefineText);
if (al != null) {
Iterator it = al.iterator();
while (it.hasNext()) {
FSDefineText dt = (FSDefineText) it.next();
ArrayList texts = (ArrayList) dt.getObjects();
Iterator textIt = texts.iterator();
while (textIt.hasNext()) {
Object nextText = textIt.next();
if (nextText instanceof FSText) {
FSText ft = (FSText) nextText;
ArrayList chars = ft.getCharacters();
Iterator charIt = chars.iterator();
while (charIt.hasNext()) {
FSCharacter fsChar = (FSCharacter) charIt.next();
sb.append((char) fsChar.getGlyphIndex());
}
sb.append(' ');
}
}
}
}
} catch (DataFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}