📄 labelbureauresource.java
字号:
// LabelBureauResource.java// $Id: LabelBureauResource.java,v 1.13 2000/08/16 21:37:43 ylafon Exp $// (c) COPYRIGHT MIT and INRIA, 1996.// Please first read the full copyright statement in file COPYRIGHT.htmlpackage org.w3c.jigsaw.pics ;import java.io.File;import java.io.PrintStream;import java.net.MalformedURLException;import java.net.URL;import org.w3c.tools.resources.Attribute;import org.w3c.tools.resources.AttributeHolder;import org.w3c.tools.resources.AttributeRegistry;import org.w3c.tools.resources.BooleanAttribute;import org.w3c.tools.resources.FileAttribute;import org.w3c.tools.resources.FramedResource;import org.w3c.tools.resources.Resource;import org.w3c.tools.resources.StringArrayAttribute;import org.w3c.www.http.HTTP;import org.w3c.www.http.HttpEntityMessage;import org.w3c.www.http.HttpMessage;import org.w3c.jigsaw.forms.URLDecoder;import org.w3c.jigsaw.forms.URLDecoderException;import org.w3c.jigsaw.http.HTTPException;import org.w3c.jigsaw.http.Reply;import org.w3c.jigsaw.http.Request;/** * An HTTP interface to query a Label bureau. * This conforms to the * <a href="http://www.w3.org/hypertext/WWW/PICS/labels.html">PICS * protocol specification</a>. * <p>This entity defines the following parameter:</p> * <table border> * <caption>The list of parameters</caption> * <tr> * <th align=left>Parameter name</th> * <th align=left>Semantics</th> * <th align=left>Default value</th> * <th align=left>Type</th> * </tr> * <tr> * <th align=left>bureau</th> * <th align=left>Name of the LabelBureau database</th> * <th align=left><em>none</em></th> * <th align=left>java.lang.String</th> * </tr> * </table> * <p>This entity also inherits the parameters from the PostableResource.</p> */public class LabelBureauResource extends FramedResource { /** * Attribute index - Our label bureau identifier. */ protected static int ATTR_BUREAU_IDENTIFIER = -1 ; /** * Attribute index - Our label bureau identifier. */ protected static int ATTR_BUREAU_SERVICES = -1 ; /** * Attribute index - debug flag. */ protected static int ATTR_BUREAU_DEBUG = -1 ; static { Attribute a = null ; Class cls = null ; try { cls = Class.forName("org.w3c.jigsaw.pics.LabelBureauResource"); } catch (Exception ex) { ex.printStackTrace() ; System.exit(1) ; } // The bureau identifier (a file attribute): a = new FileAttribute("bureau" , null , Attribute.EDITABLE|Attribute.MANDATORY); ATTR_BUREAU_IDENTIFIER = AttributeRegistry.registerAttribute(cls, a) ; // The services ... to fix a IE bug with PICS :( a = new StringArrayAttribute("services", null, Attribute.EDITABLE); ATTR_BUREAU_SERVICES = AttributeRegistry.registerAttribute(cls, a) ; // The debug flag a = new BooleanAttribute("debug", Boolean.FALSE, Attribute.EDITABLE); ATTR_BUREAU_DEBUG = AttributeRegistry.registerAttribute(cls, a) ; } /** * Our loaded label bureau: */ protected LabelBureauInterface bureau = null ; /** * Get our label bureau identifier. */ public File getBureauIdentifier() { return (File) getValue(ATTR_BUREAU_IDENTIFIER, null) ; } /** * Get the service list */ public String[] getServices() { return (String[]) getValue(ATTR_BUREAU_SERVICES, null); } /** * */ public boolean getDebugFlag() { return getBoolean(ATTR_BUREAU_DEBUG, false); } /** * Check that we have loaded our bureau, or load it. */ protected final void acquireBureau() { if ( bureau != null ) return ; File repository = getBureauIdentifier() ; if ( repository != null ) bureau = LabelBureauFactory.getLabelBureau(getBureauIdentifier()) ; return ; } /** * Build a PICS reply out of the given content. * @param request The request to reply to. * @param sb The StringBuffer containing the content to send back. */ protected Reply makePICSReply (Request request, StringBuffer buffer) { String content = buffer.toString() ; Reply reply = request.makeReply(HTTP.OK) ; reply.setHeaderValue(reply.H_CONTENT_TYPE, PICS.APPLICATION_PICSLABEL); reply.setContent (content) ; if (getDebugFlag()) { System.out.println("********* PICS REPLY *********"); System.out.println(content); System.out.println("******************************"); } return reply ; } protected Reply makePICSErrorReply(Request request, String msg) { Reply reply = request.makeReply(HTTP.OK) ; reply.setHeaderValue(reply.H_CONTENT_TYPE, PICS.APPLICATION_PICSLABEL); String content = "("+PICS.PICS_PROTOCOL_ID+" error "+ "("+msg+"))"; reply.setContent(content); if (getDebugFlag()) { System.out.println("********* PICS REPLY *********"); System.out.println(content); System.out.println("******************************"); } return reply; } /** * Get the generic labels for a set of service and a set of urls. * @param request the incomminmg request * @param format the pics format * @param urls the urls to label * @param services the services to ask * @param data the URLDecoder * @return A Reply instance * @exception HTTPException if processing the request failed. */ protected Reply getGenericLabels (Request request, int format, String urls[], String services[], URLDecoder data) throws HTTPException { StringBuffer sb = new StringBuffer (128) ; sb.append ("("+PICS.PICS_PROTOCOL_ID) ; // Go through each service: sloop: for (int is = 0; is < services.length ; is++) { LabelServiceInterface s = bureau.getLabelService (services[is]) ; if ( s == null ) { sb.append (" error " + "(no-ratings \"unknown service\")") ; continue sloop ; } s.dump (sb, format) ; sb.append (" labels ") ; try { uloop: for (int iu = 0 ; iu < urls.length ; iu++) { LabelInterface l = s.getGenericLabel (new URL(urls[iu])) ; if ( l == null ) { sb.append (" error "+"(not-labeled \""+urls[iu]+"\")"); continue uloop ; } if ( iu != 0 ) sb.append (" ") ; l.dump (sb, format) ; } } catch (MalformedURLException e) { Reply error = request.makeReply(HTTP.BAD_REQUEST) ; error.setContent ("You are requesting an invalid URL,") ; throw new HTTPException (error) ; } } sb.append (")") ; return makePICSReply (request, sb) ; } /** * Get the normal (generic or specific) labels. * @param request the incomminmg request * @param format the pics format * @param urls the urls to label * @param services the services to ask * @param data the URLDecoder * @return A Reply instance * @exception HTTPException if processing the request failed. */ protected Reply getNormalLabels (Request request, int format, String urls[], String services[], URLDecoder data) throws HTTPException { StringBuffer sb = new StringBuffer (128) ; sb.append ("("+PICS.PICS_PROTOCOL_ID) ; // Go through each service: sloop: for (int is = 0; is < services.length ; is++) { LabelServiceInterface s = bureau.getLabelService (services[is]) ; if ( s == null ) { sb.append (" error " + "(no-ratings \"unknown service\")") ; continue sloop ; } s.dump (sb, format) ; sb.append (" labels ") ; try { uloop: for (int iu = 0 ; iu < urls.length ; iu++) { URL u = new URL (urls[iu]) ; LabelInterface l = s.getSpecificLabel (u) ; if ((l == null) && ((l = s.getGenericLabel(u)) == null)) { sb.append (" error "+"(not-labeled \""+urls[iu]+"\")"); continue uloop ; } if (iu != 0) sb.append (" ") ; l.dump (sb, format) ; } } catch (MalformedURLException e) { Reply error = request.makeReply(HTTP.BAD_REQUEST) ; error.setContent ("You are requesting an invalid URL.") ; throw new HTTPException (error) ; } } sb.append (")") ; return makePICSReply (request, sb) ; } /** * Get tree labels. * @param request the incomminmg request * @param format the pics format * @param urls the urls to label * @param services the services to ask * @param data the URLDecoder * @return A Reply instance * @exception HTTPException if processing the request failed. */ protected Reply getTreeLabels (Request request, int format, String urls[], String services[], URLDecoder data) throws HTTPException { StringBuffer sb = new StringBuffer (128) ; sb.append ("("+PICS.PICS_PROTOCOL_ID) ; // Go through each service: sloop: for (int is = 0; is < services.length ; is++) { LabelServiceInterface s = bureau.getLabelService (services[is]) ; if ( s == null ) { sb.append (" error " + "(no-ratings \"unknown service\")") ; continue sloop ; } s.dump (sb, format) ; sb.append (" labels ") ; try { uloop: for (int iu = 0 ; iu < urls.length ; iu++) { boolean spaced = false ; LabelInterface l[] = s.getTreeLabels(new URL(urls[iu])); if ( l == null ) { sb.append (" error "+"(not-labeled \""+urls[iu]+"\")"); continue uloop ; } sb.append ((iu == 0) ? "(" : " (") ; for (int il = 0 ; il < l.length ; il++) { if ( il != 0 ) sb.append (" ") ; l[il].dump (sb, format) ; } sb.append (")") ; } } catch (MalformedURLException e) { Reply error = request.makeReply(HTTP.BAD_REQUEST) ; error.setContent ("You are requesting an invalid URL.") ; throw new HTTPException (error) ; } } sb.append (")") ; return makePICSReply (request, sb) ; } /** * Get generic tree labels. * @param request the incomminmg request * @param format the pics format * @param urls the urls to label * @param services the services to ask * @param data the URLDecoder * @return A Reply instance * @exception HTTPException if processing the request failed. */ protected Reply getGenericTreeLabels (Request request, int format, String urls[], String services[], URLDecoder data) throws HTTPException { StringBuffer sb = new StringBuffer (128) ; sb.append ("("+PICS.PICS_PROTOCOL_ID) ; // Go through each service: sloop: for (int is = 0; is < services.length ; is++) { LabelServiceInterface s = bureau.getLabelService (services[is]) ; if ( s == null ) { sb.append (" error " + "(no-ratings \"unknown service\")") ; continue sloop ; } s.dump (sb, format) ; sb.append (" labels ") ; try { uloop: for (int iu = 0 ; iu < urls.length ; iu++) { URL u = new URL (urls[iu]) ; LabelInterface l[] = s.getGenericTreeLabels(u) ; if ( l == null ) { sb.append (" error "+"(not-labeled \""+urls[iu]+"\")"); continue uloop ; } sb.append ((iu == 0) ? "(" : " (") ; for (int il = 0 ; il < l.length ; il++) { if ( il != 0 ) sb.append (" ") ; l[il].dump (sb, format) ; } sb.append (")") ; } } catch (MalformedURLException e) { Reply error = request.makeReply(HTTP.BAD_REQUEST) ; error.setContent ("You are requesting an invalid URL.") ; throw new HTTPException (error) ; } } sb.append (")") ; return makePICSReply (request, sb) ; } public void setValue(int idx, Object value) { super.setValue(idx, value); if (idx == ATTR_BUREAU_DEBUG) { PICS.setDebug(getDebugFlag()); } } public void initialize(Object values[]) { super.initialize(values) ; acquireBureau() ; try { registerFrameIfNone("org.w3c.jigsaw.pics.LabelBureauFrame", "label-bureau-frame"); } catch (Exception ex) { ex.printStackTrace(); } PICS.setDebug(getDebugFlag()); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -