📄 configresourceindexer.java
字号:
// ConfigResourceIndexer.java// $Id: ConfigResourceIndexer.java,v 1.3 2000/07/13 09:49:00 ylafon Exp $// (c) COPYRIGHT MIT,INRIA and Keio, 2000.// Please first read the full copyright statement in file COPYRIGHT.htmlpackage org.w3c.jigsaw.indexer;import java.io.File;import java.io.BufferedInputStream;import java.io.FileInputStream;import java.util.Enumeration;import java.util.Hashtable;import org.w3c.tools.resources.Resource;import org.w3c.tools.resources.ResourceFrame;import org.w3c.tools.resources.ContainerResource;import org.w3c.tools.resources.RequestInterface;import org.w3c.tools.resources.indexer.SampleResourceIndexer;import org.w3c.www.mime.MimeParser;import org.w3c.www.http.MimeParserMessageFactory;import org.w3c.www.http.HttpEntityMessage;import org.w3c.www.http.HeaderDescription;import org.w3c.jigsaw.frames.HTTPFrame;import org.w3c.www.mime.MimeType;/** * This indexer allow to add a configuration file * to overwrite the computed configuration * for now, ./foo.html will have its configuration file in * ./.meta/foo.html.meta * but it can be extended to match other filename. */public class ConfigResourceIndexer extends SampleResourceIndexer { /** * compute and return the file containing the configuration */ private File getConfigFile(File directory, String name) { File configdir = new File(directory, ".meta"); if (configdir.exists() && configdir.isDirectory()) { File config = new File(configdir, name + ".meta"); if (config.exists() && !config.isDirectory()) return config; } return null; } /** * Try to create a resource for the given file. * This method makes its best efforts to try to build a default * resource out of a file. * @param directory The directory the file is in. * @param name The name of the file. * @param defs Any default attribute values that should be provided * to the created resource at initialization time. * @return A Resource instance, or <strong>null</strong> if the given * file can't be truned into a resource given our configuration * database. */ public Resource createResource(ContainerResource container, RequestInterface request, File directory, String name, Hashtable defs) { Resource r = super.createResource(container, request, directory, name, defs); Class proto = null; try { proto = Class.forName("org.w3c.jigsaw.frames.HTTPFrame"); } catch (Exception ex) { // fatal error! return r; } if (r == null) return r; HTTPFrame frame = null; ResourceFrame rf[] = r.collectFrames(proto); if (rf != null) { frame = (HTTPFrame) rf[0]; } if (frame == null) { return r; } File config = getConfigFile(directory, name); if (config != null) { // we found a configuration file, do some more processing! try { // first, extract and parse the config file BufferedInputStream buf; buf = new BufferedInputStream(new FileInputStream(config)); MimeParser p = new MimeParser(buf, new MimeParserMessageFactory()); HttpEntityMessage msg = (HttpEntityMessage) p.parse(); Enumeration e = msg.enumerateHeaderDescriptions(); // then override some configuration while ( e.hasMoreElements() ) { // use some well known descriptions HeaderDescription d = (HeaderDescription) e.nextElement(); if ( d.isHeader(HttpEntityMessage.H_CONTENT_TYPE)) { MimeType mtype = null; try { mtype = msg.getContentType(); } catch (Exception ex) { // ok by default use something binary mtype = MimeType.APPLICATION_OCTET_STREAM; } if (mtype.hasParameter("charset")) { String charset =mtype.getParameterValue("charset"); MimeType m = new MimeType(mtype.getType(), mtype.getSubtype()); frame.setValue("content-type", m); frame.setValue("charset", charset); } else { frame.setValue("content-type", mtype); } continue; } if ( d.isHeader(HttpEntityMessage.H_CONTENT_LANGUAGE)) { String lang[] = msg.getContentLanguage(); if (lang.length > 0 ) { frame.setValue("content-language", lang[0]); } continue; } if ( d.isHeader(HttpEntityMessage.H_CONTENT_ENCODING)) { String enc[] = msg.getContentEncoding(); if (enc.length > 0 ) { frame.setValue("content-encoding", enc[0]); } continue; } } } catch (Exception ex) { // do nothing, keep configured as it was // by the super indexer ex.printStackTrace(); } } return r; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -