initial dojo generator. moving to dojo nightly build and checking in the widget libraries as well.

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/WCM-DEV2/root@3488 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Ariel Backenroth
2006-08-12 15:37:09 +00:00
parent 0a29ff4f5e
commit 129728f447
715 changed files with 79028 additions and 5781 deletions

View File

@@ -23,5 +23,5 @@ public interface TemplateInputMethod
public String getInputURL(final Document xmlContent,
final TemplateType tt);
public String getSchemaInputURL(final TemplateType tt);
// public String getSchemaInputURL(final TemplateType tt);
}

View File

@@ -76,15 +76,27 @@ public class TemplatingService
return new TemplateTypeImpl(name, schema);
}
public void writeXML(final Node d, final File output)
public Document newDocument()
throws ParserConfigurationException,
SAXException,
IOException
{
final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
dbf.setValidating(false);
final DocumentBuilder db = dbf.newDocumentBuilder();
return db.newDocument();
}
public void writeXML(final Node n, final Writer output)
{
try
{
System.out.println("writing out a document for " + d.getNodeName() +
System.out.println("writing out a document for " + n.getNodeName() +
" to " + output);
final TransformerFactory tf = TransformerFactory.newInstance();
final Transformer t = tf.newTransformer();
t.transform(new DOMSource(d), new StreamResult(output));
t.transform(new DOMSource(n), new StreamResult(output));
}
catch (TransformerException te)
{
@@ -93,6 +105,13 @@ public class TemplatingService
}
}
public void writeXML(final Node n, final File output)
throws IOException
{
this.writeXML(n, new FileWriter(output));
}
public Document parseXML(final String source)
throws ParserConfigurationException,
SAXException,

View File

@@ -0,0 +1,76 @@
/*
* Copyright (C) 2005 Alfresco, Inc.
*
* Licensed under the Mozilla Public License version 1.1
* with a permitted attribution clause. You may obtain a
* copy of the License at
*
* http://www.alfresco.org/legal/license.txt
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the specific
* language governing permissions and limitations under the
* License.
*/
package org.alfresco.web.templating.xforms;
import org.chiba.tools.xslt.UIGenerator;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import java.io.Writer;
import java.util.HashMap;
import java.util.Iterator;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import org.chiba.xml.xforms.exception.XFormsException;
public class DojoGenerator
implements UIGenerator
{
private Node inputNode;
private final HashMap parameters = new HashMap();
private final HttpServletRequest request;
private final HttpServletResponse response;
public DojoGenerator(HttpServletRequest request,
HttpServletResponse response)
{
this.request = request;
this.response = response;
}
public void setInputNode(final Node inputNode)
{
this.inputNode = inputNode;
}
public void setParameter(final String key, final Object value)
{
this.parameters.put(key, value);
}
public void setOutput(Object output)
{
// this.output = output;
}
public void generate()
throws XFormsException
{
try
{
request.setAttribute("xform", this.inputNode);
final RequestDispatcher rd = request.getRequestDispatcher("/jsp/content/xforms/dojo-generator.jsp");
rd.include(request, response);
}
catch (Exception e)
{
throw new XFormsException(e);
}
}
}

View File

@@ -24,6 +24,8 @@ import org.alfresco.util.TempFileProvider;
import org.alfresco.web.templating.*;
import org.alfresco.web.templating.xforms.schemabuilder.*;
import org.chiba.xml.util.DOMUtil;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
@@ -31,6 +33,7 @@ import org.w3c.dom.Node;
public class XFormsInputMethod
implements TemplateInputMethod
{
private static final Log LOGGER = LogFactory.getLog(XFormsInputMethod.class);
public XFormsInputMethod()
{
@@ -122,8 +125,15 @@ public class XFormsInputMethod
{
final TemplatingService ts = TemplatingService.getInstance();
final File schemaFile = TempFileProvider.createTempFile("alfresco", ".schema");
ts.writeXML(tt.getSchema(), schemaFile);
try
{
ts.writeXML(tt.getSchema(), schemaFile);
}
catch (IOException ioe)
{
assert false : ioe.getMessage();
LOGGER.error(ioe);
}
final FacesContext fc = FacesContext.getCurrentInstance();
final String cp =
fc.getExternalContext().getRequestContextPath();

View File

@@ -1,11 +1,13 @@
package org.alfresco.web.templating.xforms.servlet;
import org.alfresco.web.app.Application;
import org.alfresco.web.templating.xforms.DojoGenerator;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.httpclient.Cookie;
import org.chiba.adapter.ChibaAdapter;
import org.alfresco.web.templating.xforms.flux.FluxAdapter;
import org.alfresco.web.templating.TemplatingService;
import org.chiba.tools.xslt.StylesheetLoader;
import org.chiba.tools.xslt.UIGenerator;
import org.chiba.tools.xslt.XSLTGenerator;
@@ -44,7 +46,6 @@ public class ChibaServlet extends HttpServlet {
//init-params
private static Log logger = LogFactory.getLog(ChibaServlet.class);
private static final String FORM_PARAM_NAME = "form";
private static final String XSL_PARAM_NAME = "xslt";
private static final String CSS_PARAM_NAME = "css";
@@ -164,54 +165,68 @@ public class ChibaServlet extends HttpServlet {
*/
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
throws ServletException, IOException {
ChibaAdapter adapter = null;
HttpSession session = request.getSession(true);
try {
if (request.getParameter("xxx") != null)
{
response.setContentType("text/xml");
Writer out = response.getWriter();
adapter = (ChibaAdapter)session.getAttribute(CHIBA_ADAPTER);
TemplatingService.getInstance().writeXML(adapter.getXForms(), out);
out.close();
}
else
{
logger.info("--------------- new XForms session ---------------");
//kill everything that may have lived before
session.removeAttribute(CHIBA_ADAPTER);
session.removeAttribute(CHIBA_UI_GENERATOR);
logger.info("--------------- new XForms session ---------------");
try {
//kill everything that may have lived before
session.removeAttribute(CHIBA_ADAPTER);
session.removeAttribute(CHIBA_UI_GENERATOR);
// determine Form to load
String formURI = /*getRequestURI(request) +*/ request.getParameter(FORM_PARAM_NAME);
logger.info("formURI: " + formURI);
String xslFile = request.getParameter(XSL_PARAM_NAME);
String css = request.getParameter(CSS_PARAM_NAME);
String actionURL = getActionURL(request, response,true);
logger.info("setting up adapeter");
// determine Form to load
String formURI = /*getRequestURI(request) +*/ request.getParameter(FORM_PARAM_NAME);
logger.info("formURI: " + formURI);
String xslFile = request.getParameter(XSL_PARAM_NAME);
String css = request.getParameter(CSS_PARAM_NAME);
String actionURL = getActionURL(request, response,true);
logger.info("setting up adapeter");
//setup Adapter
adapter = setupAdapter(new FluxAdapter(session), session, formURI);
setContextParams(request, adapter);
storeCookies(request, adapter);
adapter.init();
//setup Adapter
adapter = setupAdapter(new FluxAdapter(session), session, formURI);
setContextParams(request, adapter);
storeCookies(request, adapter);
adapter.init();
if (load(adapter, response)) return;
if (replaceAll(adapter, response)) return;
if (load(adapter, response)) return;
if (replaceAll(adapter, response)) return;
// response.setContentType("text/html");
// PrintWriter out = response.getWriter();
response.setContentType("text/html");
PrintWriter out = response.getWriter();
logger.info("generating ui");
logger.info("generating ui");
UIGenerator uiGenerator = createUIGenerator(request,
response,
actionURL,
xslFile,
css);
uiGenerator.setInputNode(adapter.getXForms());
// uiGenerator.setOutput(out);
uiGenerator.generate();
UIGenerator uiGenerator = createUIGenerator(request, actionURL, xslFile, css);
uiGenerator.setInputNode(adapter.getXForms());
uiGenerator.setOutput(out);
uiGenerator.generate();
//store adapter in session
session.setAttribute(CHIBA_ADAPTER, adapter);
session.setAttribute(CHIBA_UI_GENERATOR,uiGenerator);
//store adapter in session
session.setAttribute(CHIBA_ADAPTER, adapter);
session.setAttribute(CHIBA_UI_GENERATOR,uiGenerator);
out.close();
logger.info("done!");
} catch (Exception e) {
// out.close();
logger.info("done!");
}
} catch (Exception e) {
e.printStackTrace();
shutdown(adapter, session, e, response, request);
}
shutdown(adapter, session, e, response, request);
}
}
/**
@@ -228,24 +243,24 @@ public class ChibaServlet extends HttpServlet {
* @return ServletAdapter
*/
protected ChibaAdapter setupAdapter(ChibaAdapter adapter,
HttpSession session,
String formPath)
HttpSession session,
String formPath)
throws XFormsException, URISyntaxException {
adapter.createXFormsProcessor();
adapter.createXFormsProcessor();
if ((configPath != null) && !(configPath.equals(""))) {
adapter.setConfigPath(configPath);
}
adapter.setXForms(new URI(formPath));
adapter.setBaseURI(formPath);
adapter.setUploadDestination(uploadDir);
if ((configPath != null) && !(configPath.equals(""))) {
adapter.setConfigPath(configPath);
}
adapter.setXForms(new URI(formPath));
adapter.setBaseURI(formPath);
adapter.setUploadDestination(uploadDir);
Map servletMap = new HashMap();
servletMap.put(ChibaAdapter.SESSION_ID, session.getId());
adapter.setContextParam(ChibaAdapter.SUBMISSION_RESPONSE, servletMap);
Map servletMap = new HashMap();
servletMap.put(ChibaAdapter.SESSION_ID, session.getId());
adapter.setContextParam(ChibaAdapter.SUBMISSION_RESPONSE, servletMap);
return adapter;
return adapter;
}
/**
@@ -257,21 +272,21 @@ public class ChibaServlet extends HttpServlet {
* @param adapter the Chiba adapter instance
*/
protected void storeCookies(HttpServletRequest request,ChibaAdapter adapter){
javax.servlet.http.Cookie[] cookiesIn = request.getCookies();
if (cookiesIn != null) {
Cookie[] commonsCookies = new org.apache.commons.httpclient.Cookie[cookiesIn.length];
for (int i = 0; i < cookiesIn.length; i += 1) {
javax.servlet.http.Cookie c = cookiesIn[i];
Cookie newCookie = new Cookie(c.getDomain(),
c.getName(),
c.getValue(),
c.getPath(),
c.getMaxAge(),
c.getSecure());
commonsCookies[i] = newCookie;
}
adapter.setContextParam(AbstractHTTPConnector.REQUEST_COOKIE,commonsCookies);
}
javax.servlet.http.Cookie[] cookiesIn = request.getCookies();
if (cookiesIn != null) {
Cookie[] commonsCookies = new org.apache.commons.httpclient.Cookie[cookiesIn.length];
for (int i = 0; i < cookiesIn.length; i += 1) {
javax.servlet.http.Cookie c = cookiesIn[i];
Cookie newCookie = new Cookie(c.getDomain(),
c.getName(),
c.getValue(),
c.getPath(),
c.getMaxAge(),
c.getSecure());
commonsCookies[i] = newCookie;
}
adapter.setContextParam(AbstractHTTPConnector.REQUEST_COOKIE,commonsCookies);
}
}
/**
@@ -285,41 +300,42 @@ public class ChibaServlet extends HttpServlet {
* @throws XFormsException
*/
protected UIGenerator createUIGenerator(HttpServletRequest request,
String actionURL,
String xslFile,
String css)
HttpServletResponse response,
String actionURL,
String xslFile,
String css)
throws XFormsException {
StylesheetLoader stylesheetLoader = new StylesheetLoader(stylesPath);
if (xslFile != null){
stylesheetLoader.setStylesheetFile(xslFile);
}
UIGenerator uiGenerator = new XSLTGenerator(stylesheetLoader);
// StylesheetLoader stylesheetLoader = new StylesheetLoader(stylesPath);
// if (xslFile != null){
// stylesheetLoader.setStylesheetFile(xslFile);
// }
UIGenerator uiGenerator = new DojoGenerator(request, response);
//set parameters
uiGenerator.setParameter("contextroot",request.getContextPath());
uiGenerator.setParameter("action-url",actionURL);
uiGenerator.setParameter("debug-enabled", String.valueOf(logger.isDebugEnabled()));
String selectorPrefix =
//set parameters
uiGenerator.setParameter("contextroot",request.getContextPath());
uiGenerator.setParameter("action-url",actionURL);
uiGenerator.setParameter("debug-enabled", String.valueOf(logger.isDebugEnabled()));
String selectorPrefix =
Config.getInstance().getProperty(HttpRequestHandler.SELECTOR_PREFIX_PROPERTY,
HttpRequestHandler.SELECTOR_PREFIX_DEFAULT);
uiGenerator.setParameter("selector-prefix", selectorPrefix);
String removeUploadPrefix =
uiGenerator.setParameter("selector-prefix", selectorPrefix);
String removeUploadPrefix =
Config.getInstance().getProperty(HttpRequestHandler.REMOVE_UPLOAD_PREFIX_PROPERTY,
HttpRequestHandler.REMOVE_UPLOAD_PREFIX_DEFAULT);
uiGenerator.setParameter("remove-upload-prefix", removeUploadPrefix);
if (css != null)
uiGenerator.setParameter("css-file", css);
String dataPrefix = Config.getInstance().getProperty("chiba.web.dataPrefix");
uiGenerator.setParameter("data-prefix", dataPrefix);
uiGenerator.setParameter("remove-upload-prefix", removeUploadPrefix);
if (css != null)
uiGenerator.setParameter("css-file", css);
String dataPrefix = Config.getInstance().getProperty("chiba.web.dataPrefix");
uiGenerator.setParameter("data-prefix", dataPrefix);
String triggerPrefix = Config.getInstance().getProperty("chiba.web.triggerPrefix");
uiGenerator.setParameter("trigger-prefix", triggerPrefix);
String triggerPrefix = Config.getInstance().getProperty("chiba.web.triggerPrefix");
uiGenerator.setParameter("trigger-prefix", triggerPrefix);
uiGenerator.setParameter("user-agent", request.getHeader("User-Agent"));
uiGenerator.setParameter("user-agent", request.getHeader("User-Agent"));
uiGenerator.setParameter("scripted","true");
// uiGenerator.setParameter("scripted","true");
return uiGenerator;
return uiGenerator;
}
/**
@@ -331,39 +347,39 @@ public class ChibaServlet extends HttpServlet {
*/
protected void setContextParams(HttpServletRequest request, ChibaAdapter chibaAdapter) {
//[1] pass user-agent to Adapter for UI-building
chibaAdapter.setContextParam(ServletAdapter.USERAGENT, request.getHeader("User-Agent"));
//[1] pass user-agent to Adapter for UI-building
chibaAdapter.setContextParam(ServletAdapter.USERAGENT, request.getHeader("User-Agent"));
//[2] read any request params that are *not* Chiba params and pass them into the context map
Enumeration params = request.getParameterNames();
while (params.hasMoreElements()) {
String s = (String) params.nextElement();
//store all request-params we don't use in the context map of ChibaBean
if (!(s.equals(FORM_PARAM_NAME) ||
s.equals(XSL_PARAM_NAME) ||
s.equals(CSS_PARAM_NAME) ||
s.equals(ACTIONURL_PARAM_NAME))) {
String value = request.getParameter(s);
//servletAdapter.setContextProperty(s, value);
chibaAdapter.setContextParam(s, value);
if (logger.isDebugEnabled()) {
logger.debug("added request param '" + s + "' added to context");
}
}
}
//[2] read any request params that are *not* Chiba params and pass them into the context map
Enumeration params = request.getParameterNames();
while (params.hasMoreElements()) {
String s = (String) params.nextElement();
//store all request-params we don't use in the context map of ChibaBean
if (!(s.equals(FORM_PARAM_NAME) ||
s.equals(XSL_PARAM_NAME) ||
s.equals(CSS_PARAM_NAME) ||
s.equals(ACTIONURL_PARAM_NAME))) {
String value = request.getParameter(s);
//servletAdapter.setContextProperty(s, value);
chibaAdapter.setContextParam(s, value);
if (logger.isDebugEnabled()) {
logger.debug("added request param '" + s + "' added to context");
}
}
}
}
/**
* @deprecated should be re-implemented using chiba events on adapter
*/
protected boolean load(ChibaAdapter adapter, HttpServletResponse response) throws XFormsException, IOException {
if (adapter.getContextParam(ChibaAdapter.LOAD_URI) != null) {
String redirectTo = (String) adapter.removeContextParam(ChibaAdapter.LOAD_URI);
adapter.shutdown();
response.sendRedirect(response.encodeRedirectURL(redirectTo));
return true;
}
return false;
if (adapter.getContextParam(ChibaAdapter.LOAD_URI) != null) {
String redirectTo = (String) adapter.removeContextParam(ChibaAdapter.LOAD_URI);
adapter.shutdown();
response.sendRedirect(response.encodeRedirectURL(redirectTo));
return true;
}
return false;
}
/**
@@ -371,79 +387,79 @@ public class ChibaServlet extends HttpServlet {
*/
protected boolean replaceAll(ChibaAdapter chibaAdapter, HttpServletResponse response)
throws XFormsException, IOException {
if (chibaAdapter.getContextParam(ChibaAdapter.SUBMISSION_RESPONSE) != null) {
Map forwardMap = (Map) chibaAdapter.removeContextParam(ChibaAdapter.SUBMISSION_RESPONSE);
if (forwardMap.containsKey(ChibaAdapter.SUBMISSION_RESPONSE_STREAM)) {
forwardResponse(forwardMap, response);
chibaAdapter.shutdown();
return true;
}
}
return false;
if (chibaAdapter.getContextParam(ChibaAdapter.SUBMISSION_RESPONSE) != null) {
Map forwardMap = (Map) chibaAdapter.removeContextParam(ChibaAdapter.SUBMISSION_RESPONSE);
if (forwardMap.containsKey(ChibaAdapter.SUBMISSION_RESPONSE_STREAM)) {
forwardResponse(forwardMap, response);
chibaAdapter.shutdown();
return true;
}
}
return false;
}
private String getActionURL(HttpServletRequest request, HttpServletResponse response, boolean scripted) {
String defaultActionURL = getRequestURI(request) + agent;
String encodedDefaultActionURL = response.encodeURL(defaultActionURL);
int sessIdx = encodedDefaultActionURL.indexOf(";jsession");
String sessionId = null;
if (sessIdx > -1) {
sessionId = encodedDefaultActionURL.substring(sessIdx);
}
String actionURL = request.getParameter(ACTIONURL_PARAM_NAME);
if (null == actionURL) {
actionURL = encodedDefaultActionURL;
} else if (null != sessionId) {
actionURL += sessionId;
}
String defaultActionURL = getRequestURI(request) + agent;
String encodedDefaultActionURL = response.encodeURL(defaultActionURL);
int sessIdx = encodedDefaultActionURL.indexOf(";jsession");
String sessionId = null;
if (sessIdx > -1) {
sessionId = encodedDefaultActionURL.substring(sessIdx);
}
String actionURL = request.getParameter(ACTIONURL_PARAM_NAME);
if (null == actionURL) {
actionURL = encodedDefaultActionURL;
} else if (null != sessionId) {
actionURL += sessionId;
}
logger.info("actionURL: " + actionURL);
// encode the URL to allow for session id rewriting
return response.encodeURL(actionURL);
logger.info("actionURL: " + actionURL);
// encode the URL to allow for session id rewriting
return response.encodeURL(actionURL);
}
private String getRequestURI(HttpServletRequest request){
StringBuffer buffer = new StringBuffer(request.getScheme());
buffer.append("://");
buffer.append(request.getServerName());
buffer.append(":");
buffer.append(request.getServerPort()) ;
buffer.append(request.getContextPath());
return buffer.toString();
StringBuffer buffer = new StringBuffer(request.getScheme());
buffer.append("://");
buffer.append(request.getServerName());
buffer.append(":");
buffer.append(request.getServerPort()) ;
buffer.append(request.getContextPath());
return buffer.toString();
}
private void forwardResponse(Map forwardMap, HttpServletResponse response) throws IOException {
// fetch response stream
InputStream responseStream = (InputStream) forwardMap.remove(ChibaAdapter.SUBMISSION_RESPONSE_STREAM);
// fetch response stream
InputStream responseStream = (InputStream) forwardMap.remove(ChibaAdapter.SUBMISSION_RESPONSE_STREAM);
// copy header information
Iterator iterator = forwardMap.keySet().iterator();
while (iterator.hasNext()) {
// copy header information
Iterator iterator = forwardMap.keySet().iterator();
while (iterator.hasNext()) {
String name = (String) iterator.next();
String name = (String) iterator.next();
if ("Transfer-Encoding".equalsIgnoreCase(name)) {
// Some servers (e.g. WebSphere) may set a "Transfer-Encoding"
// with the value "chunked". This may confuse the client since
// ChibaServlet output is not encoded as "chunked", so this
// header is ignored.
continue;
}
String value = (String) forwardMap.get(name);
response.setHeader(name, value);
}
if ("Transfer-Encoding".equalsIgnoreCase(name)) {
// Some servers (e.g. WebSphere) may set a "Transfer-Encoding"
// with the value "chunked". This may confuse the client since
// ChibaServlet output is not encoded as "chunked", so this
// header is ignored.
continue;
}
String value = (String) forwardMap.get(name);
response.setHeader(name, value);
}
// copy stream content
OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());
for (int b = responseStream.read();
b > -1;
b = responseStream.read()) {
outputStream.write(b);
}
// copy stream content
OutputStream outputStream = new BufferedOutputStream(response.getOutputStream());
for (int b = responseStream.read();
b > -1;
b = responseStream.read()) {
outputStream.write(b);
}
// close streams
responseStream.close();
outputStream.close();
// close streams
responseStream.close();
outputStream.close();
}
protected void shutdown(ChibaAdapter chibaAdapter,
@@ -452,15 +468,15 @@ public class ChibaServlet extends HttpServlet {
HttpServletResponse response,
HttpServletRequest request)
throws IOException,
ServletException {
// attempt to shutdown processor
if (chibaAdapter != null) {
try {
chibaAdapter.shutdown();
} catch (XFormsException xfe) {
xfe.printStackTrace();
}
}
ServletException {
// attempt to shutdown processor
if (chibaAdapter != null) {
try {
chibaAdapter.shutdown();
} catch (XFormsException xfe) {
xfe.printStackTrace();
}
}
Application.handleServletError(this.getServletContext(),
request,
response,