Add new class to use Presenter.
This commit is contained in:
parent
df1c684e1d
commit
e77b5e70c4
3 changed files with 564 additions and 0 deletions
196
src/xid/DomPresenter.java
Normal file
196
src/xid/DomPresenter.java
Normal file
|
@ -0,0 +1,196 @@
|
||||||
|
package xid;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import java.io.*;
|
||||||
|
import javax.xml.parsers.*;
|
||||||
|
import javax.xml.transform.stream.StreamSource;
|
||||||
|
import javax.xml.validation.Schema;
|
||||||
|
import org.xml.sax.*;
|
||||||
|
import org.w3c.dom.*;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class DomPresenter extends Presenter
|
||||||
|
{
|
||||||
|
static final public char INDEX_SEPARATOR = '_';
|
||||||
|
|
||||||
|
static protected org.apache.log4j.Logger log;
|
||||||
|
static
|
||||||
|
{
|
||||||
|
log = org.apache.log4j.Logger.getLogger (DomPresenter.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
static protected String staticRootPath;
|
||||||
|
static
|
||||||
|
{
|
||||||
|
staticRootPath = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
protected String webappPath;
|
||||||
|
protected Document doc;
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public DomPresenter ()
|
||||||
|
{
|
||||||
|
this.webappPath = Presenter.staticRootPath;
|
||||||
|
this.doc = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public DomPresenter (Document doc)
|
||||||
|
{
|
||||||
|
this.webappPath = Presenter.staticRootPath;
|
||||||
|
this.doc = doc;
|
||||||
|
DomPresenter.addMetaTag (this.doc, "generator", "XID 0.0");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public DomPresenter (String webappPath, Document doc)
|
||||||
|
{
|
||||||
|
if ((webappPath == null) || (webappPath.equals ("")))
|
||||||
|
{
|
||||||
|
this.webappPath = Presenter.staticRootPath;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.webappPath = webappPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.doc = doc;
|
||||||
|
DomPresenter.addMetaTag (this.doc, "generator", "XID 0.0");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public String getWebappPath ()
|
||||||
|
{
|
||||||
|
String result;
|
||||||
|
|
||||||
|
result = this.webappPath;
|
||||||
|
|
||||||
|
//
|
||||||
|
return (result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public void setWebappPath (String path)
|
||||||
|
{
|
||||||
|
this.webappPath = path;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public Document getDom ()
|
||||||
|
{
|
||||||
|
Document result;
|
||||||
|
|
||||||
|
result = this.doc;
|
||||||
|
|
||||||
|
//
|
||||||
|
return (result);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public void setDom (Document doc)
|
||||||
|
{
|
||||||
|
this.doc = doc;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public void setSource (Document doc)
|
||||||
|
{
|
||||||
|
this.doc = doc;
|
||||||
|
|
||||||
|
Presenter.addMetaTag (this.doc, "generator", "XID 0.0");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public Object getSource ()
|
||||||
|
{
|
||||||
|
Object result;
|
||||||
|
|
||||||
|
result = this.doc;
|
||||||
|
|
||||||
|
//
|
||||||
|
return (result);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public StringBuffer doXid (Data datas, StringBuffer errorOutput)
|
||||||
|
{
|
||||||
|
return (doXid (datas.getIdsDataById (), datas.getTagsDataById (), errorOutput));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public StringBuffer doXid (IdsDataById datas, TagsDataById tagsData, StringBuffer errorOutput)
|
||||||
|
{
|
||||||
|
StringBuffer result;
|
||||||
|
|
||||||
|
if (this.doc == null)
|
||||||
|
{
|
||||||
|
String errorMessage = "source not defined";
|
||||||
|
errorOutput.append (errorMessage);
|
||||||
|
log.error (errorMessage);
|
||||||
|
result = null;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Build the web page.
|
||||||
|
result = Presenter.doXid (this.doc, datas, tagsData, this.webappPath, errorOutput);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return (result);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Xid a file with data.
|
||||||
|
*/
|
||||||
|
static public StringBuffer doXid (Document doc, IdsDataById datas, String webappPath, StringBuffer errorOutput)
|
||||||
|
{
|
||||||
|
return (doXid (doc, datas, null, webappPath, errorOutput));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Xid a file with data.
|
||||||
|
*/
|
||||||
|
static public StringBuffer doXid (Document doc, IdsDataById datas, TagsDataById tagsData, String webappPath, StringBuffer errorOutput)
|
||||||
|
{
|
||||||
|
StringBuffer result;
|
||||||
|
|
||||||
|
result = Presenter.process (doc, datas, tagsData, webappPath, errorOutput);
|
||||||
|
|
||||||
|
//
|
||||||
|
return (result);
|
||||||
|
}
|
||||||
|
}
|
170
src/xid/FilePresenter.java
Normal file
170
src/xid/FilePresenter.java
Normal file
|
@ -0,0 +1,170 @@
|
||||||
|
package xid;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import java.io.*;
|
||||||
|
import javax.xml.parsers.*;
|
||||||
|
import javax.xml.transform.stream.StreamSource;
|
||||||
|
import javax.xml.validation.Schema;
|
||||||
|
import org.xml.sax.*;
|
||||||
|
import org.w3c.dom.*;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class FilePresenter extends DomPresenter
|
||||||
|
{
|
||||||
|
static protected org.apache.log4j.Logger log;
|
||||||
|
static
|
||||||
|
{
|
||||||
|
log = org.apache.log4j.Logger.getLogger (FilePresenter.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String sourceFileName;
|
||||||
|
protected long sourceFileTime;
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public FilePresenter ()
|
||||||
|
{
|
||||||
|
this.webappPath = Presenter.staticRootPath;
|
||||||
|
this.sourceFileName = null;
|
||||||
|
this.sourceFileTime = 0;
|
||||||
|
this.doc = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public FilePresenter (String fileName)
|
||||||
|
{
|
||||||
|
this.webappPath = Presenter.staticRootPath;
|
||||||
|
this.sourceFileName = fileName;
|
||||||
|
this.sourceFileTime = 0;
|
||||||
|
this.doc = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public FilePresenter (String webappPath, String fileName)
|
||||||
|
{
|
||||||
|
if ((webappPath == null) || (webappPath.equals ("")))
|
||||||
|
{
|
||||||
|
this.webappPath = Presenter.staticRootPath;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.webappPath = webappPath;
|
||||||
|
}
|
||||||
|
this.sourceFileName = fileName;
|
||||||
|
this.sourceFileTime = 0;
|
||||||
|
this.doc = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public void setSource (String fileName)
|
||||||
|
{
|
||||||
|
this.sourceFileName = fileName;
|
||||||
|
this.sourceFileTime = 0;
|
||||||
|
this.doc = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public String getSource ()
|
||||||
|
{
|
||||||
|
String result;
|
||||||
|
|
||||||
|
result = this.sourceFileName;
|
||||||
|
|
||||||
|
//
|
||||||
|
return (result);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public StringBuffer doXid (Data datas, StringBuffer errorOutput)
|
||||||
|
{
|
||||||
|
return (doXid (datas.getIdsDataById (), datas.getTagsDataById (), errorOutput));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public StringBuffer doXid (IdsDataById datas, TagsDataById tagsData, StringBuffer errorOutput)
|
||||||
|
{
|
||||||
|
StringBuffer result;
|
||||||
|
|
||||||
|
String sourceFilePath = this.webappPath + File.separator + this.sourceFileName;
|
||||||
|
|
||||||
|
// Get the good tree.
|
||||||
|
File source = new File (sourceFilePath);
|
||||||
|
|
||||||
|
if (source == null)
|
||||||
|
{
|
||||||
|
String errorMessage = "source file not defined";
|
||||||
|
errorOutput.append (errorMessage);
|
||||||
|
log.error (errorMessage);
|
||||||
|
result = null;
|
||||||
|
}
|
||||||
|
else if (!source.exists ())
|
||||||
|
{
|
||||||
|
String errorMessage = "source file defined but not found (" + sourceFilePath + ")";
|
||||||
|
errorOutput.append (errorMessage);
|
||||||
|
log.error (errorMessage);
|
||||||
|
result = null;
|
||||||
|
}
|
||||||
|
else if ((this.doc == null) ||
|
||||||
|
(this.sourceFileTime != source.lastModified ()))
|
||||||
|
{
|
||||||
|
this.sourceFileTime = source.lastModified ();
|
||||||
|
this.doc = Presenter.fileToTree (sourceFilePath, errorOutput);
|
||||||
|
|
||||||
|
if (this.doc != null)
|
||||||
|
{
|
||||||
|
Presenter.addMetaTag (doc, "generator", "XID 0.0");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Build the web page.
|
||||||
|
result = Presenter.doXid (doc, datas, tagsData, this.webappPath, errorOutput);
|
||||||
|
|
||||||
|
//
|
||||||
|
return (result);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Xid a file without data.
|
||||||
|
*/
|
||||||
|
static public StringBuffer doXid (String fileName, String webappPath, StringBuffer errorOutput)
|
||||||
|
{
|
||||||
|
StringBuffer result;
|
||||||
|
|
||||||
|
Document doc = Presenter.fileToTree (fileName, errorOutput);
|
||||||
|
|
||||||
|
if (doc == null)
|
||||||
|
{
|
||||||
|
result = null;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Presenter.addMetaTag (doc, "generator", "XID 0.0");
|
||||||
|
|
||||||
|
result = Presenter.doXid (doc, null, null, webappPath, errorOutput);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return (result);
|
||||||
|
}
|
||||||
|
}
|
198
src/xid/StringPresenter.java
Normal file
198
src/xid/StringPresenter.java
Normal file
|
@ -0,0 +1,198 @@
|
||||||
|
package xid;
|
||||||
|
|
||||||
|
import java.util.*;
|
||||||
|
import java.io.*;
|
||||||
|
import javax.xml.parsers.*;
|
||||||
|
import javax.xml.transform.stream.StreamSource;
|
||||||
|
import javax.xml.validation.Schema;
|
||||||
|
import org.xml.sax.*;
|
||||||
|
import org.w3c.dom.*;
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class StringPresenter extends DomPresenter
|
||||||
|
{
|
||||||
|
static protected org.apache.log4j.Logger log;
|
||||||
|
static
|
||||||
|
{
|
||||||
|
log = org.apache.log4j.Logger.getLogger (StringPresenter.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String html;
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public StringPresenter ()
|
||||||
|
{
|
||||||
|
super ();
|
||||||
|
this.webappPath = Presenter.staticRootPath;
|
||||||
|
this.doc = null;
|
||||||
|
this.html = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public StringPresenter (String html)
|
||||||
|
{
|
||||||
|
this.webappPath = Presenter.staticRootPath;
|
||||||
|
this.doc = null;
|
||||||
|
this.html = html;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public StringPresenter (String webappPath, String html)
|
||||||
|
{
|
||||||
|
if ((webappPath == null) || (webappPath.equals ("")))
|
||||||
|
{
|
||||||
|
this.webappPath = Presenter.staticRootPath;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.webappPath = webappPath;
|
||||||
|
}
|
||||||
|
this.doc = null;
|
||||||
|
this.html = html;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public void setSource (String html)
|
||||||
|
{
|
||||||
|
this.html = html;
|
||||||
|
this.doc = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public String getSource ()
|
||||||
|
{
|
||||||
|
String result;
|
||||||
|
|
||||||
|
result = this.html;
|
||||||
|
|
||||||
|
//
|
||||||
|
return (result);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public StringBuffer doXid (Data datas, StringBuffer errorOutput)
|
||||||
|
{
|
||||||
|
return (doXid (datas.getIdsDataById (), datas.getTagsDataById (), errorOutput));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public StringBuffer doXid (IdsDataById datas, TagsDataById tagsData, StringBuffer errorOutput)
|
||||||
|
{
|
||||||
|
StringBuffer result;
|
||||||
|
|
||||||
|
if (this.doc == null)
|
||||||
|
{
|
||||||
|
// Build doc from this.html.
|
||||||
|
String htmlSource;
|
||||||
|
if ((this.html.startsWith ("<!DOCTYPE")) ||
|
||||||
|
(this.html.startsWith ("<!doctype")) ||
|
||||||
|
(this.html.startsWith ("<html>")) ||
|
||||||
|
(this.html.startsWith ("<HTML>")))
|
||||||
|
{
|
||||||
|
htmlSource = html;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
htmlSource = "<html><head></head><body>\n" + html + "</body></html>";
|
||||||
|
}
|
||||||
|
|
||||||
|
// StringBufferInputStream is deprecated so we use another solution.
|
||||||
|
// (see http://www.developpez.net/forums/archive/index.php/t-14101.html).
|
||||||
|
doc = buildTree (new ByteArrayInputStream (htmlSource.getBytes ()), errorOutput);
|
||||||
|
}
|
||||||
|
|
||||||
|
StringBuffer htmlTarget;
|
||||||
|
htmlTarget = Presenter.doXid (doc, datas, tagsData, this.webappPath, errorOutput);
|
||||||
|
|
||||||
|
if (htmlTarget == null)
|
||||||
|
{
|
||||||
|
result = null;
|
||||||
|
}
|
||||||
|
else if ((this.html.startsWith ("<!DOCTYPE")) ||
|
||||||
|
(this.html.startsWith ("<!doctype")) ||
|
||||||
|
(this.html.startsWith ("<html>")) ||
|
||||||
|
(this.html.startsWith ("<HTML>")))
|
||||||
|
{
|
||||||
|
result = htmlTarget;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
String bodyContent = extractBodyContent (htmlTarget);
|
||||||
|
|
||||||
|
if (bodyContent == null)
|
||||||
|
{
|
||||||
|
result = null;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
result = new StringBuffer (bodyContent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return (result);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static public StringBuffer doXid (String html, Data datas, StringBuffer errorOutput)
|
||||||
|
{
|
||||||
|
return (doXid (html, datas.getIdsDataById (), datas.getTagsDataById (), "", errorOutput));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
static public StringBuffer doXid (String html, Data datas, String webappPath, StringBuffer errorOutput)
|
||||||
|
{
|
||||||
|
return (doXid (html, datas.getIdsDataById (), datas.getTagsDataById (), webappPath, errorOutput));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Xid a string with html in.
|
||||||
|
*/
|
||||||
|
static public StringBuffer doXid (String html, IdsDataById datas, String webappPath, StringBuffer errorOutput)
|
||||||
|
{
|
||||||
|
return (doXid (html, datas, null, webappPath, errorOutput));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Xid a string with html in.
|
||||||
|
*/
|
||||||
|
static public StringBuffer doXid (String html, IdsDataById datas, TagsDataById tagsData, String webappPath, StringBuffer errorOutput)
|
||||||
|
{
|
||||||
|
StringBuffer result;
|
||||||
|
|
||||||
|
StringPresenter presenter = new StringPresenter (webappPath, html);
|
||||||
|
|
||||||
|
result = presenter.doXid (datas, tagsData, errorOutput);
|
||||||
|
|
||||||
|
//
|
||||||
|
return (result);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue