*/
private String figureOutURL()
throws ProviderException
{
String url = null;
WikiEngine engine = m_wikiContext.getEngine();
if( m_pageName == null )
{
WikiPage page = m_wikiContext.getPage();
if( page != null )
{
m_pageName = page.getName();
}
}
if( m_templatefile != null )
{
String params = addParamsForRecipient( null, m_containedParams );
String template = engine.getTemplateDir();
url = engine.getURL( WikiContext.NONE, "templates/"+template+"/"+m_templatefile, params, false );
}
else if( m_jsp != null )
{
String params = addParamsForRecipient( null, m_containedParams );
//url = m_wikiContext.getURL( WikiContext.NONE, m_jsp, params );
url = engine.getURL( WikiContext.NONE, m_jsp, params, m_absolute );
}
else if( m_ref != null )
{
int interwikipoint;
if( JSPWikiMarkupParser.isExternalLink(m_ref) )
{
url = m_ref;
}
else if( (interwikipoint = m_ref.indexOf(":")) != -1 )
{
String extWiki = m_ref.substring( 0, interwikipoint );
String wikiPage = m_ref.substring( interwikipoint+1 );
url = engine.getInterWikiURL( extWiki );
if( url != null )
{
url = TextUtil.replaceString( url, "%s", wikiPage );
}
}
else if( m_ref.startsWith("#") )
{
// Local link
}
else if( TextUtil.isNumber(m_ref) )
{
// Reference
}
else
{
int hashMark = -1;
String parms = (m_version != null) ? "version="+getVersion() : null;
//
// Internal wiki link, but is it an attachment link?
//
WikiPage p = engine.getPage( m_pageName );
if( p instanceof Attachment )
{
url = m_wikiContext.getURL( WikiContext.ATTACH, m_pageName );
}
else if( (hashMark = m_ref.indexOf('#')) != -1 )
{
// It's an internal Wiki link, but to a named section
String namedSection = m_ref.substring( hashMark+1 );
String reallink = m_ref.substring( 0, hashMark );
reallink = MarkupParser.cleanLink( reallink );
String matchedLink;
String sectref = "";
if( (matchedLink = engine.getFinalPageName( reallink )) != null )
{
sectref = "section-"+engine.encodeName(matchedLink)+"-"+namedSection;
sectref = "#"+sectref.replace('%', '_');
}
else
{
matchedLink = reallink;
}
url = makeBasicURL( m_context, matchedLink, parms, m_absolute ) + sectref;
}
else
{
String reallink = MarkupParser.cleanLink( m_ref );
url = makeBasicURL( m_context, reallink, parms, m_absolute );
}
}
}
else if( m_pageName != null && m_pageName.length() > 0 )
{
WikiPage p = engine.getPage( m_pageName );
String parms = (m_version != null) ? "version="+getVersion() : null;
parms = addParamsForRecipient( parms, m_containedParams );
if( p instanceof Attachment )
{
String ctx = m_context;
// Switch context appropriately when attempting to view an
// attachment, but don't override the context setting otherwise
if( m_context == null || m_context.equals( WikiContext.VIEW ) )
{
ctx = WikiContext.ATTACH;
}
url = engine.getURL( ctx, m_pageName, parms, m_absolute );
//url = m_wikiContext.getURL( ctx, m_pageName, parms );
}
else
{
url = makeBasicURL( m_context, m_pageName, parms, m_absolute );
}
}
else
{
String page = engine.getFrontPage();
url = makeBasicURL( m_context, page, null, m_absolute );
}
return url;
}