/*
* FilteredTagReader.java
* @Author Oleg Gorobets
* Created: 24.07.2007
* CVS-ID: $Id:
*************************************************************************/
package com.jswiff.swfrecords.tags;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.log4j.Logger;
import com.jswiff.io.InputBitStream;
public abstract class FilteredTagReader extends TagReaderImpl {
private static Logger logger = Logger.getLogger(FilteredTagReader.class);
protected Set<Short> tags = new HashSet<Short>();
protected static final int DO_PARSE = 2;
protected static final int DO_WRITE_AS_IS = 3;
@Override
public Tag readTag(TagHeader header, byte[] tagData, short swfVersion, boolean japanese) throws IOException {
Tag tag;
if (header.getCode() == TagConstants.SET_BACKGROUND_COLOR
|| header.getCode() == TagConstants.FILE_ATTRIBUTES
|| header.getCode() == TagConstants.METADATA
|| !tags.contains(header.getCode())
) {
logger.debug("TAG "+header.getCode()+" length:"+header.getLength()+" PARSING...");
tag = super.readTag(header, tagData, swfVersion, japanese);
} else {
// process all tags as unknown -- simply write binary data to output
logger.debug("TAG "+header.getCode()+" length:"+header.getLength()+" WRITING AS IS...");
tag = new UnknownTag(header.getCode(),tagData);
}
tag.setForceLongHeader(header.isLong());
return tag;
}
protected abstract int getTagAction(TagHeader header);
// @Override
// public Tag readTag(InputBitStream stream, short swfVersion, boolean shiftJIS) throws IOException {
// return super.readTag(stream, swfVersion, shiftJIS);
// logger.debug("#readTag() from FilteredTagReader");
// TagHeader header = new TagHeader(stream);
// byte[] tagData = stream.readBytes(header.getLength());
// return new UnknownTag(header.getCode(),tagData);
// }
public void setTags(String tags) {
String[] tokens = tags.split(",");
for(int j=0;j<tokens.length;j++) {
logger.debug("tokens[j]="+tokens[j]);
tokens[j] = tokens[j].trim();
if (tokens[j].indexOf("-")>0) {
String[] tagBoundaries = tokens[j].split("-");
String left = tagBoundaries[0];
String right = tagBoundaries[1];
int leftTagNum = Integer.valueOf(left);
int rightTagNum = Integer.valueOf(right);
logger.debug("leftTagNum="+leftTagNum+",rightTagNum="+rightTagNum);
for (int k=leftTagNum;k<=rightTagNum;k++) {
logger.debug("Tag added:"+k);
this.tags.add((short)k);
}
} else if (tokens[j].length()>0) {
logger.debug("Tag added:"+Integer.valueOf(tokens[j]));
this.tags.add(Short.valueOf(tokens[j]));
}
// tags.add(tokens[j]);
}
}
}