01: // SampleLabelBureau.java
02: // $Id: SampleLabelBureau.java,v 1.5 2000/08/16 21:37:43 ylafon Exp $
03: // (c) COPYRIGHT MIT and INRIA, 1996.
04: // Please first read the full copyright statement in file COPYRIGHT.html
05:
06: package org.w3c.jigsaw.pics;
07:
08: import java.io.File;
09:
10: import java.util.Hashtable;
11:
12: /**
13: * This class implements a label bureau.
14: * The database for labels is provided by the underlying file system. The
15: * organisation is as follows:
16: * <p>The LabelBureau is attached to some directory <strong>D</strong>. For
17: * each service it handles, you have to create a subdirectory, according
18: * to the service name (its identifying URL). So for example, if you want to
19: * provide ratings as <strong>www.rating.com</strong>, you will have to create
20: * a <strong>D/www.rating.com</strong> directory.
21: * <p>Uner this <em>service</em> directory, for each site you want to label,
22: * you have to create a sub-directory. In our example, if our rating service
23: * wants to label www.w3.org, you will have to create a
24: * <strong>D/www.rating.com/www.w3.org</strong> directory. This directory
25: * should reflect the space of the labeled server (ie having the same file
26: * hierarchy), and each file should be the label itself (as transmited).
27: * <p>In our example, if the LabelBureau wants to find the label by
28: * www.rating.com for http://www.w3.org/pub/WWW/Overview.html, it will look
29: * for the file
30: * <strong>D/www.rating.com/http/www.w3.org/pub/WWW/Overview.html-label
31: * </strong>.
32: * <p>So, we really use the underlying file system as a database for labels.
33: * <p>FIXME: the LabelBureau should be an interface, same stands for the
34: * LabelService and Label classes.
35: */
36:
37: public class SampleLabelBureau implements LabelBureauInterface {
38: File directory = null;
39: Hashtable services = null;
40:
41: /**
42: * Get this label bureau directory.
43: */
44:
45: public String getIdentifier() {
46: return directory.getAbsolutePath();
47: }
48:
49: /**
50: * Lookup for the given service in this bureau.
51: * @param name The service name.
52: * @return A LabelService instance, or <strong>null</strong> if none
53: * was found.
54: */
55:
56: public LabelServiceInterface getLabelService(String url) {
57: // le service est deja en memoire
58: LabelServiceInterface s = (LabelServiceInterface) services
59: .get(url);
60: if (s == null) { // il faut recuperer le service
61: try {
62: s = new SampleLabelService(this , url);
63: } catch (UnknownServiceException e) {
64: return null;
65: }
66: services.put(url, s);
67: }
68: return s;
69: }
70:
71: /**
72: * Create a new LabelBureau.
73: * The configuration files from the label bureau (the place were it takes
74: * its labels from), is given by the provided directory.
75: * @param directory This bureau root directory.
76: * @see org.w3c.jigsaw.pics.LabelServiceInterface
77: */
78:
79: public SampleLabelBureau(File directory) {
80: this .directory = directory;
81: this .services = new Hashtable();
82: }
83:
84: }
|