final String style = owner.getStyle();
final String variation = owner.getVariation();
final Locale locale = owner.getLocale();
MarkupResourceStream markupResourceStream = null;
Class<?> containerClass = getClass();
while (!(containerClass.equals(BorderBehavior.class)))
{
String path = containerClass.getName().replace('.', '/');
IResourceStream resourceStream = locator.locate(containerClass, path, style, variation,
locale, markupType.getExtension(), false);
// Did we find it already?
if (resourceStream != null)
{
ContainerInfo ci = new ContainerInfo(containerClass, locale, style, variation,
markupType);
markupResourceStream = new MarkupResourceStream(resourceStream, ci, containerClass);
break;
}
// Walk up the class hierarchy one level, if markup has not
// yet been found
containerClass = containerClass.getSuperclass();
}
if (markupResourceStream == null)
{
throw new WicketRuntimeException("Could not find markup for component border `" +
getClass().getName() + "`");
}
try
{
IMarkupFragment markup = MarkupFactory.get()
.newMarkupParser(markupResourceStream)
.parse();
return new MarkupStream(markup);
}
catch (Exception e)
{
throw new WicketRuntimeException(
"Could not parse markup from markup resource stream: " +
markupResourceStream.toString(), e);
}
finally
{
try
{
markupResourceStream.close();
}
catch (IOException e)
{
throw new WicketRuntimeException("Cannot close markup resource stream: " +
markupResourceStream, e);