/********************************************************************
* Copyright (c) 1999 TECFA.
* All Rights Reserved.
*
* (with a lot taken from The Bean Factory, LLC)
*
*******************************************************************/
import org.w3c.dom.*;
import org.apache.xerces.parsers.DOMParser;
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
import java.util.*;
import java.io.*;
import java.net.*;
/********************************************************************
FicheModel2 implémente le modèle de table. Ce modèle crée
un objet DOM à partir d'un document XML et extrait de l'information de
l'objet DOM.
Voici le DTD pour le document XML qui contient l'information effective :
]>
@version : 1.0
@author : S.M.M & D.K.S
@see XmlUtils
********************************************************************/
public class FicheModel2 implements TableModel{
//CONSTANTES
public static final String URL =
"http://tecfa.unige.ch/guides/java/staf2x/ex/xml/fiches/Fiches2.xml";
//META DONNEES DE LA TABLE
public static final String ROOT_ELEMENT_TAG = "Entry";
public static final String[] TheItemNames ={
"Title",
"Creator",
"Description",
"Keywords",
"Location",
"MetaDocumentAuthor",
"MainType",
"SubType",
"Topic",
"SubTopic"
};
public static final Class[] TheItemClasses ={
String.class,
String.class,
String.class,
String.class,
String.class,
String.class,
String.class,
String.class,
String.class,
String.class
};
//DONNEES
//objet DOM pour contenir les informations du document XML
protected Document TheDocument;
//utilisé pour contenir une liste de TableModelListeners
protected java.util.List tableModelListeners =
new ArrayList();
/**
methode main
*/
public static void main(String []args){
new FicheModel2();
}
/**
Constructeur - crée un DOM
*/
public FicheModel2(){
try {
//crée le document xml
DOMParser parser = new DOMParser();
parser.parse(URL);
TheDocument = parser.getDocument();
}
catch( Exception e ){
System.out.println(e);
}
}
//
// implémentation du TableModel
//
/**
Rend le nombre de colonnes pour le modèle.
@return le nombre de colonnes dans le modèle
*/
public int getColumnCount() {
return TheItemClasses.length;
}
/**
Rend le nombre de fiches dans une document XML
@return le nombre de lignes dans le modèle
*/
public int getRowCount() {
return TheDocument.getDocumentElement().getElementsByTagName(ROOT_ELEMENT_TAG).getLength();
}
/**
Rend une donnée XML en fonction de sa position
@param r la ligne correspondant à la valeur recherchée
@param c la colonne correspondant à la valeur recherchée
@return la valeur de l'objet à l'emplacement spécifié
*/
public Object getValueAt(int r, int c) {
String TheStringResult;
Object TheResult;
TheStringResult = new String("");
Element TheCurrentFile = (Element) TheDocument.getDocumentElement().getElementsByTagName(ROOT_ELEMENT_TAG).item(r);
NodeList TheCurrentList = TheCurrentFile.getElementsByTagName(TheItemNames[c]);
int TheCurrentListItems = TheCurrentList.getLength();
for (int k=0; k1)&&(k