001: /*
002: * WebSphinx web-crawling toolkit
003: *
004: * Copyright (c) 1998-2002 Carnegie Mellon University. All rights
005: * reserved.
006: *
007: * Redistribution and use in source and binary forms, with or without
008: * modification, are permitted provided that the following conditions
009: * are met:
010: *
011: * 1. Redistributions of source code must retain the above copyright
012: * notice, this list of conditions and the following disclaimer.
013: *
014: * 2. Redistributions in binary form must reproduce the above copyright
015: * notice, this list of conditions and the following disclaimer in
016: * the documentation and/or other materials provided with the
017: * distribution.
018: *
019: * THIS SOFTWARE IS PROVIDED BY CARNEGIE MELLON UNIVERSITY ``AS IS'' AND
020: * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
021: * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
022: * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY
023: * NOR ITS EMPLOYEES BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
024: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
025: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
026: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
027: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
028: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
029: * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
030: *
031: */
032:
033: package websphinx.workbench;
034:
035: import websphinx.*;
036: import java.awt.*;
037: import rcm.awt.Constrain;
038: import rcm.awt.PopupDialog;
039:
040: public class ClassifierListEditor extends Panel {
041:
042: List classifierList;
043: Button newClassifierButton;
044: Button loadClassifierButton;
045: Button removeClassifierButton;
046:
047: Crawler crawler;
048: Classifier[] classifiers;
049:
050: public ClassifierListEditor() {
051: setLayout(new GridBagLayout());
052:
053: Constrain.add(this , new Label("Classifiers:"), Constrain
054: .labelLike(0, 0));
055: Constrain.add(this , classifierList = new List(5, false),
056: Constrain.areaLike(0, 1));
057:
058: Panel panel = new Panel();
059: Constrain.add(this , panel, Constrain.fieldLike(0, 2));
060:
061: panel.add(newClassifierButton = new Button("New..."));
062: panel.add(loadClassifierButton = new Button("Load..."));
063: loadClassifierButton.disable();
064: panel.add(removeClassifierButton = new Button("Remove"));
065: removeClassifierButton.disable();
066: }
067:
068: public boolean handleEvent(Event event) {
069: if (event.target == classifierList) {
070: if (classifierList.getSelectedIndex() != -1)
071: removeClassifierButton.enable();
072: else
073: removeClassifierButton.disable();
074: } else if (event.id == Event.ACTION_EVENT) {
075: if (event.target == newClassifierButton)
076: newClassifier(null);
077: else if (event.target == loadClassifierButton)
078: ; // NIY
079: else if (event.target == removeClassifierButton)
080: removeSelectedClassifier();
081: else
082: return super .handleEvent(event);
083: } else
084: return super .handleEvent(event);
085:
086: return true;
087: }
088:
089: public void setCrawler(Crawler crawler) {
090: this .crawler = crawler;
091: scan();
092: }
093:
094: public Crawler getCrawler() {
095: return crawler;
096: }
097:
098: private void newClassifier(String className) {
099: if (className == null || className.length() == 0) {
100: className = PopupDialog.ask(this , "New Classifier",
101: "Create an instance of class:");
102: if (className == null)
103: return;
104: }
105:
106: try {
107: Class classifierClass = (Class) Class.forName(className);
108: Classifier cl = (Classifier) classifierClass.newInstance();
109: crawler.addClassifier(cl);
110: } catch (Exception e) {
111: PopupDialog.warn(this , "Error", e.toString());
112: }
113:
114: scan();
115: }
116:
117: private void removeSelectedClassifier() {
118: int i = classifierList.getSelectedIndex();
119: if (i < 0 || i >= classifiers.length) {
120: removeClassifierButton.disable();
121: return;
122: }
123:
124: crawler.removeClassifier(classifiers[i]);
125: scan();
126: }
127:
128: private void scan() {
129: classifiers = crawler.getClassifiers();
130: classifierList.clear();
131: for (int i = 0; i < classifiers.length; ++i)
132: classifierList.addItem(classifiers[i].getClass().getName());
133: }
134: }
|