package com.rectang.xsm.doc;
import com.rectang.xsm.site.DocumentPage;
import com.rectang.xsm.site.Site;
import com.rectang.xsm.io.XSMDocument;
import com.rectang.xsm.UserData;
import java.util.Vector;
import java.io.Serializable;
import org.jdom.Element;
import org.apache.wicket.markup.html.WebMarkupContainer;
public class DocElement
implements Serializable
{
protected String name;
public DocElement element;
private DocumentPage page;
private UserData user;
private XSMDocument doc;
/**
* @return Returns the page.
*/
public DocumentPage getPage()
{
return page;
}
/**
* @return The path to our page
*/
public String getPath()
{
return page.getPath();
}
/**
* @return The path to our published page
*/
public String getPublishedPath()
{
return page.getPublishedPath();
}
/**
* @param page The page to set.
*/
public void setPage( DocumentPage page )
{
if ( element != null )
{
element.setPage( page );
}
this.page = page;
}
public String getName()
{
return name;
}
public DocElement()
{
this( "", null );
}
public DocElement( String name )
{
this( name, null );
}
public DocElement( String name, DocElement element )
{
this.name = name;
this.element = element;
}
public void view( Element node, StringBuffer s )
{
publish( node, s );
}
public void publish( Element node, StringBuffer s )
{
if ( element != null )
{
element.publish( node.getChild( element.name ), s );
}
}
public WebMarkupContainer edit( String wicketId, Element node, String path )
{
if ( element != null )
{
return element.edit( wicketId, node.getChild( element.name ), path + "/" + element.name );
}
return new WebMarkupContainer( wicketId );
}
public void create( Element node )
{
Element newNode;
if ( element != null )
{
node.addContent( newNode = new Element( element.name ) );
element.create( newNode );
}
}
public void destroy( Element node )
{
if ( element != null )
{
element.destroy( node.getChild( element.name ) );
}
}
public DocElement getElement( String name )
{
if ( element != null && element.name != null && element.name.equals( name ) )
{
return element;
}
return null;
}
public String pathToId( String path )
{
return "xsm_val" + path.replaceAll( "//", "_" ).replace( '/', '_' );
}
/**
* @return Returns the userdata.
*/
public UserData getUser()
{
return user;
}
/**
* @param user The userdata to set.
*/
public void setUser( UserData user )
{
this.user = user;
if ( element != null )
{
element.setUser( user );
}
}
/**
* @return the site the current user is logged in to
*/
public Site getSite()
{
return user.getSite();
}
/**
* @return Returns the document.
*/
public XSMDocument getDoc()
{
return doc;
}
/**
* @param doc The doc to set.
*/
public void setDoc( XSMDocument doc )
{
if ( element != null )
{
element.setDoc( doc );
}
this.doc = doc;
}
/**
* A list of all supported options for this page type. This returns an iterator of a vector containing
* <code>SupportedOption</code>s.
*
* @return an iteration through the <code>SupportedOption</code>s for this page
*/
public java.util.List getSupportedOptions()
{
if ( element != null )
{
return element.getSupportedOptions();
}
return new Vector();
}
}