dims 01/06/19 05:07:28
Modified: src/org/apache/cocoon Tag: cocoon_20_branch Main.java
src/org/apache/cocoon/transformation Tag: cocoon_20_branch
TraxTransformer.java
Log:
Patches from Vadim for command-line generation.
Revision Changes Path
No revision
No revision
1.4.2.1 +122 -48 xml-cocoon2/src/org/apache/cocoon/Main.java
Index: Main.java
===================================================================
RCS file: /home/cvs/xml-cocoon2/src/org/apache/cocoon/Main.java,v
retrieving revision 1.4
retrieving revision 1.4.2.1
diff -u -r1.4 -r1.4.2.1
--- Main.java 2001/05/31 17:37:31 1.4
+++ Main.java 2001/06/19 12:07:27 1.4.2.1
@@ -16,6 +16,7 @@
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.MalformedURLException;
+import java.util.HashSet;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
@@ -47,7 +48,7 @@
* Command line entry point.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Stefano Mazzocchi</a>
- * @version CVS $Revision: 1.4 $ $Date: 2001/05/31 17:37:31 $
+ * @version CVS $Revision: 1.4.2.1 $ $Date: 2001/06/19 12:07:27 $
*/
public class Main {
@@ -118,7 +119,7 @@
switch (option.getId()) {
case 0:
- targets.add(option.getArgument());
+ targets.add(NetUtils.normalize(option.getArgument()));
break;
case Main.HELP_OPT:
@@ -299,6 +300,9 @@
private File destDir;
private File context;
private Map attributes;
+ private HashMap empty;
+ private Map allProcessedLinks;
+ private Map allTranslatedLinks;
/**
* Creates the Main class
@@ -308,6 +312,9 @@
this.context = context;
this.destDir = destDir;
this.attributes = new HashMap();
+ this.empty = new HashMap();
+ this.allProcessedLinks = new HashMap();
+ this.allTranslatedLinks = new HashMap();
}
/**
@@ -326,13 +333,24 @@
public int process(Collection uris, boolean xspOnly) throws Exception {
int nCount = 0;
log.info("...ready, let's go:");
- Iterator i = uris.iterator();
- while (i.hasNext()) {
- if(xspOnly)
- this.processXSP(NetUtils.normalize((String) i.next()));
- else
- this.processURI(NetUtils.normalize((String) i.next()), 0);
+
+ HashSet links = new HashSet();
+ links.addAll(uris);
+ while (links.size() > 0) {
+ Iterator i = links.iterator();
+ String url = (String)i.next();
+ if(allProcessedLinks.get(url) == null){
+ if(xspOnly){
+ this.processXSP(url);
+ }else{
+ links.addAll(this.processURI(url));
+ }
+ }
+ links.remove(url);
nCount++;
+
+System.err.println(" Memory: " +
(Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory()));
+System.err.println(" Processed, Translated & Left: " + allProcessedLinks.size() +
", " + allTranslatedLinks.size() + ", " + links.size());
}
return nCount;
}
@@ -361,61 +379,107 @@
}
/**
- * Processes the given URI in a recursive way. The algorithm followed by
- * this method is the following:
+ * Processes the given URI and return all links. The algorithm is the following:
*
* <ul>
- * <li>the link view of the given URI is called and the resources linked
- * to the requested one are obtained.</li>
- * <li>for each link, this method is recursively called and returns
- * the file used to save the resource on disk.</li>
+ * <li>file name for the URI is generated. URI MIME type is checked for
+ * consistency with the URI and, if the extension is inconsistent
+ * or absent, the file name is changed</li>
+ * <li>the link view of the given URI is called and the file names for linked
+ * resources are generated and stored.</li>
+ * <li>for each link, absolute file name is translated to relative path.</li>
* <li>after the complete list of links is translated, the link-translating
* view of the resource is called to obtain a link-translated version
* of the resource with the given link map</li>
- * <li>the resource is saved on disk and the URI MIME type is checked for
- * consistency with the URI and, if the extension is inconsistent
- * or absent, the file is renamed</li>
- * <li>then the file name of the translated URI is returned</li>
+ * <li>list of absolute URI is returned, for every URI which is not yet
+ * present in list of all translated URIs</li>
* </ul>
*/
- public String processURI(String uri, int level) throws Exception {
- log.info("Processing URI: " + leaf(level) + uri);
+ public Collection processURI(String uri) throws Exception {
+ log.info("Processing URI: " + uri);
+
+ // Get parameters, deperameterized URI and path from URI
+ final HashMap parameters = new HashMap();
+ parameters.put("user-agent", Constants.COMPLETE_NAME);
+ parameters.put("accept", "*");
+ final String deparameterizedURI = NetUtils.deparameterize(uri, parameters);
+ final String path = NetUtils.getPath(uri);
+
+ // Get file name from URI (without path)
+ String pageURI = deparameterizedURI;
+ if(pageURI.indexOf("/") != -1){
+ pageURI = pageURI.substring(pageURI.lastIndexOf("/") + 1);
+ if(pageURI.length() == 0) pageURI = "./";
+ }
+
+ String filename = (String)allTranslatedLinks.get(uri);
+ if(filename == null){
+ filename = mangle(uri);
+ final String type = getType(deparameterizedURI, parameters);
+ final String ext = NetUtils.getExtension(filename);
+ final String defaultExt = MIMEUtils.getDefaultExtension(type);
+ if ((ext == null) || (!ext.equals(defaultExt))) {
+ filename += defaultExt;
+ }
+ allTranslatedLinks.put(uri, filename);
+ }
+
+ // Store processed URI list to avoid eternal loop
+ allProcessedLinks.put(uri, filename);
- Collection links = this.getLinks(uri);
- Map translatedLinks = new HashMap(links.size());
- Iterator i = links.iterator();
+ // Process links
+ final ArrayList absoluteLinks = new ArrayList();
+ final HashMap translatedLinks = new HashMap();
+ final Iterator i = this.getLinks(deparameterizedURI, parameters).iterator();
while (i.hasNext()) {
- log.info(tree(level));
- String path = NetUtils.getPath(uri);
String relativeLink = (String) i.next();
- String absoluteLink = NetUtils.normalize(NetUtils.absolutize(path,
relativeLink));
- String translatedAbsoluteLink = this.processURI(absoluteLink, level +
1);
- String translatedRelativeLink = NetUtils.relativize(path,
translatedAbsoluteLink);
+ // Fix relative links starting with "?"
+ if(relativeLink.startsWith("?")){
+ relativeLink = pageURI + relativeLink;
+ }
+
+ final String absoluteLink =
NetUtils.normalize(NetUtils.absolutize(path, relativeLink));
+ String translatedAbsoluteLink =
(String)allTranslatedLinks.get(absoluteLink);
+ if(translatedAbsoluteLink == null){
+ translatedAbsoluteLink = this.translateURI(absoluteLink);
+ log.info(" Link translated: " + absoluteLink);
+ allTranslatedLinks.put(absoluteLink, translatedAbsoluteLink);
+ absoluteLinks.add(absoluteLink);
+ }
+
+ final String translatedRelativeLink = NetUtils.relativize(path,
translatedAbsoluteLink);
translatedLinks.put(relativeLink, translatedRelativeLink);
}
- String filename = mangle(uri);
+ // Process URI
File file = IOUtils.createFile(destDir, filename);
OutputStream output = new BufferedOutputStream(new FileOutputStream(file));
- String type = getPage(uri, translatedLinks, output);
+ String type = getPage(deparameterizedURI, parameters, translatedLinks,
output);
output.close();
+ if (type == null) {
+ log.warn(" [broken link]--> " + filename);
+ resourceUnavailable(file);
+ } else {
+ log.info(" [" + type + "]--> " + filename);
+ }
+
+ return absoluteLinks;
+ }
+
+ public String translateURI(String uri) throws Exception {
+ HashMap parameters = new HashMap();
+ parameters.put("user-agent", Constants.COMPLETE_NAME);
+ parameters.put("accept", "*");
+ String deparameterizedURI = NetUtils.deparameterize(uri, parameters);
+
+ String path = NetUtils.getPath(uri);
+ String filename = mangle(uri);
+ String type = getType(deparameterizedURI, parameters);
String ext = NetUtils.getExtension(filename);
String defaultExt = MIMEUtils.getDefaultExtension(type);
-
if ((ext == null) || (!ext.equals(defaultExt))) {
filename += defaultExt;
- File newFile = IOUtils.createFile(destDir, filename);
- file.renameTo(newFile);
- file = newFile;
- }
- log.info(tree(level));
-
- if (type == null) {
- log.warn(leaf(level + 1) + "[broken link]--> " + filename);
- resourceUnavailable(file);
- } else {
- log.info(leaf(level + 1) + "[" + type + "]--> " + filename);
}
return filename;
@@ -455,17 +519,27 @@
return buffer.toString();
}
- Collection getLinks(String uri) throws Exception {
- HashMap parameters = new HashMap();
- String deparameterizedURI = NetUtils.deparameterize(uri, parameters);
+ Collection getLinks(String deparameterizedURI, Map parameters) throws Exception
{
LinkSamplingEnvironment env = new
LinkSamplingEnvironment(deparameterizedURI, context, attributes, parameters);
cocoon.process(env);
return env.getLinks();
}
- String getPage(String uri, Map links, OutputStream stream) throws Exception {
- HashMap parameters = new HashMap();
- FileSavingEnvironment env = new FileSavingEnvironment(uri, context,
attributes, parameters, links, stream);
+ String getPage(String deparameterizedURI, Map parameters, Map links,
OutputStream stream) throws Exception {
+ FileSavingEnvironment env = new FileSavingEnvironment(deparameterizedURI,
context, attributes, parameters, links, stream);
+ cocoon.process(env);
+ return env.getContentType();
+ }
+
+ static class NullOutputStream extends OutputStream
+ {
+ public void write(int b) throws IOException { }
+ public void write(byte b[]) throws IOException { }
+ public void write(byte b[], int off, int len) throws IOException { }
+ }
+
+ String getType(String deparameterizedURI, Map parameters) throws Exception {
+ FileSavingEnvironment env = new FileSavingEnvironment(deparameterizedURI,
context, attributes, parameters, empty, new NullOutputStream());
cocoon.process(env);
return env.getContentType();
}
No revision
No revision
1.15.2.2 +3 -3
xml-cocoon2/src/org/apache/cocoon/transformation/TraxTransformer.java
Index: TraxTransformer.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/org/apache/cocoon/transformation/TraxTransformer.java,v
retrieving revision 1.15.2.1
retrieving revision 1.15.2.2
diff -u -r1.15.2.1 -r1.15.2.2
--- TraxTransformer.java 2001/06/07 09:20:11 1.15.2.1
+++ TraxTransformer.java 2001/06/19 12:07:27 1.15.2.2
@@ -100,7 +100,7 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Davanum Srinivas</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Giacomo Pati</a>
- * @version CVS $Id: TraxTransformer.java,v 1.15.2.1 2001/06/07 09:20:11 cziegeler
Exp $
+ * @version CVS $Id: TraxTransformer.java,v 1.15.2.2 2001/06/19 12:07:27 dims Exp $
*/
public class TraxTransformer extends ContentHandlerWrapper
implements Transformer, Composable, Recyclable, Configurable, Cacheable,
Disposable, URIResolver {
@@ -483,9 +483,9 @@
accept = request.getHeader("accept");
/* Get the user agent; it's needed to get the browser type. */
- String agent = request.getParameter("user-Agent");
+ String agent = request.getParameter("user-agent");
if (agent == null)
- agent = request.getHeader("user-Agent");
+ agent = request.getHeader("user-agent");
/* add the accept param */
map.put("accept", accept);
----------------------------------------------------------------------
In case of troubles, e-mail: [EMAIL PROTECTED]
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]