Package org.w3c.jigsaw.pics

Source Code of org.w3c.jigsaw.pics.LabelBureauResource

// 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.html

package 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());
    }

}
TOP

Related Classes of org.w3c.jigsaw.pics.LabelBureauResource

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.