// Near Infinity - An Infinity Engine Browser and Editor
// Copyright (C) 2001 - 2005 Jon Olav Hauglid
// See LICENSE.txt for license information
package org.infinity.search;
import java.awt.Component;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.infinity.datatype.ResourceRef;
import org.infinity.datatype.StringRef;
import org.infinity.resource.AbstractStruct;
import org.infinity.resource.Resource;
import org.infinity.resource.StructEntry;
import org.infinity.resource.key.ResourceEntry;
import org.infinity.resource.text.PlainTextResource;
import org.infinity.util.StringResource;
public final class WavReferenceSearcher extends AbstractReferenceSearcher
{
public WavReferenceSearcher(ResourceEntry targetEntry, Component parent)
{
super(targetEntry, AbstractReferenceSearcher.FILE_TYPES, parent);
}
@Override
protected void search(ResourceEntry entry, Resource resource)
{
if (resource instanceof AbstractStruct) {
searchStruct(entry, (AbstractStruct)resource);
} else if (resource instanceof PlainTextResource) {
searchText(entry, (PlainTextResource)resource);
}
}
private void searchStruct(ResourceEntry entry, AbstractStruct struct)
{
for (int i = 0; i < struct.getFieldCount(); i++) {
StructEntry o = struct.getField(i);
if (o instanceof ResourceRef &&
((ResourceRef)o).getResourceName().equalsIgnoreCase(targetEntry.toString())) {
addHit(entry, entry.getSearchString(), o);
}
else if (o instanceof StringRef &&
StringResource.hasWavResource(((StringRef)o).getValue()) &&
targetEntry.toString().equalsIgnoreCase(
StringResource.getWavResource(((StringRef)o).getValue()) + ".WAV")) {
addHit(entry, null, o);
}
else if (o instanceof AbstractStruct) {
searchStruct(entry, (AbstractStruct)o);
}
}
}
private void searchText(ResourceEntry entry, PlainTextResource text)
{
String name = getTargetEntry().getResourceName();
int idx = name.lastIndexOf('.');
if (idx > 0) {
String nameBase = name.substring(0, idx);
Pattern p = Pattern.compile("\\b" + nameBase + "\\b", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(text.getText());
if (m.find()) {
addHit(entry, null, null);
}
}
}
}