ciao andbin.
si hai ragione mi spiego meglio.
ho una lista di file messa dentro una JTable.
al doppio click lancio il parsing passando il path completo del file.
a quel punto apro un'altra finestra, dove:
- nella parte di sinistra ho i metadata
- nella parte destra il JPanel cambia a seconda del tipo di file (se è una immagine la visualizza, se è un documento di testo mostra il contenuto, ecc).
quindi questa la classe ParseFile completa:
codice:
public class ParseFile {
private File file;
private BodyContentHandler handler;
private Metadata metadata;
private ParseContext context;
private FileInputStream inputstream;
private StringBuilder sb;
private String[] metadataNames;
private String content;
public ParseFile(File file) throws FileNotFoundException {
this.file = file;
handler = new BodyContentHandler();
metadata = new Metadata();
context = new ParseContext();
inputstream = new FileInputStream(file);
sb = new StringBuilder();
}
public void genericParser() throws IOException, SAXException, TikaException {
Parser parser = new AutoDetectParser();
parser.parse(inputstream, handler, metadata, context);
setContent(handler.toString());
setMetadataNames(metadata.names());
}
public void jpegParser() throws IOException, SAXException, TikaException {
JpegParser parser = new JpegParser();
parser.parse(inputstream, handler, metadata, context);
setMetadataNames(metadata.names());
}
public void ooXmlParser() throws IOException, SAXException, TikaException {
OOXMLParser parser = new OOXMLParser();
parser.parse(inputstream, handler, metadata, context);
setContent(handler.toString());
setMetadataNames(metadata.names());
}
public void msOfficeParser() throws IOException, SAXException, TikaException {
OfficeParser parser = new OfficeParser();
parser.parse(inputstream, handler, metadata, context);
setContent(handler.toString());
setMetadataNames(metadata.names());
}
public void pdfParser() throws IOException, SAXException, TikaException {
PDFParser parser = new PDFParser();
parser.parse(inputstream, handler, metadata, context);
setContent(handler.toString());
setMetadataNames(metadata.names());
}
public void rtfParser() throws IOException, SAXException, TikaException {
RTFParser parser = new RTFParser();
parser.parse(inputstream, handler, metadata, context);
setContent(handler.toString());
setMetadataNames(metadata.names());
}
public void xmlParser() throws IOException, SAXException, TikaException {
XMLParser parser = new XMLParser();
parser.parse(inputstream, handler, metadata, context);
setContent(handler.toString());
setMetadataNames(metadata.names());
}
public void htmlParser() throws IOException, SAXException, TikaException {
HtmlParser parser = new HtmlParser();
parser.parse(inputstream, handler, metadata, context);
setContent(handler.toString());
setMetadataNames(metadata.names());
}
public void openDocParser() throws IOException, SAXException, TikaException {
OpenDocumentParser parser = new OpenDocumentParser();
parser.parse(inputstream, handler, metadata, context);
setContent(handler.toString());
setMetadataNames(metadata.names());
}
public void oggParser() throws IOException, TikaException, SAXException {
VorbisParser parser = new VorbisParser();
parser.parse(inputstream, handler, metadata, context);
setContent(handler.toString());
setMetadataNames(metadata.names());
}
public void mp3Parser() throws IOException, TikaException, SAXException {
Mp3Parser parser = new Mp3Parser();
parser.parse(inputstream, handler, metadata, context);
setContent(handler.toString());
setMetadataNames(metadata.names());
}
private void setContent(String content) {
this.content = content;
}
public String getContent() {
return content;
}
private void setMetadataNames(String[] metadataNames) {
this.metadataNames = metadataNames;
for (String name : metadataNames) {
sb.append(name).append(": ").append(metadata.get(name)).append("\n");
}
}
public String getMetadataNames() {
return sb.toString();
}
}
questo l'evento al doppio click sulla JTable:
codice:
File f = new File(strFile);
String type = strType;
ParseFile pf = new ParseFile(f);
WindowDetail wd = null;
switch (type) {
case "image/jpeg":
case "image/jpg":
pf.jpegParser();
wd = new WindowDetail(f, new PanelDetail(pf.getMetadataNames()), new PanelImage(f));
break;
case "application/vnd.ms-excel":
case "application/msword":
case "plication/vnd.ms-powerpoint":
pf.msOfficeParser();
wd = new WindowDetail(f, new PanelDetail(pf.getMetadataNames()), new PanelDetail(pf.getContent()));
break;
case "application/vnd.openxmlformats-officedocument.wordprocessingml.document":
case "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":
case "application/vnd.openxmlformats-officedocument.presentationml.presentation":
pf.ooXmlParser();
wd = new WindowDetail(f, new PanelDetail(pf.getMetadataNames()), new PanelDetail(pf.getContent()));
break;
case "application/rtf":
pf.rtfParser();
wd = new WindowDetail(f, new PanelDetail(pf.getMetadataNames()), new PanelDetail(pf.getContent()));
break;
case "application/xml":
pf.xmlParser();
wd = new WindowDetail(f, new PanelDetail(pf.getMetadataNames()), new PanelDetail(pf.getContent()));
break;
case "text/html":
pf.htmlParser();
wd = new WindowDetail(f, new PanelDetail(pf.getMetadataNames()), new PanelDetail(pf.getContent()));
break;
case "application/vnd.oasis.opendocument.text":
case "application/vnd.oasis.opendocument.spreadsheet":
case "application/vnd.oasis.opendocument.presentation":
pf.openDocParser();
wd = new WindowDetail(f, new PanelDetail(pf.getMetadataNames()), new PanelDetail(pf.getContent()));
break;
case "application/pdf":
pf.pdfParser();
wd = new WindowDetail(f, new PanelDetail(pf.getMetadataNames()), new PanelDetail(pf.getContent()));
break;
case "application/ogg":
pf.oggParser();
wd = new WindowDetail(f, new PanelDetail(pf.getMetadataNames()), new PanelDetail(pf.getContent()));
break;
case "audio/mpeg":
pf.mp3Parser();
wd = new WindowDetail(f, new PanelDetail(pf.getMetadataNames()), new PanelDetail(pf.getContent()));
break;
default:
pf.genericParser();
wd = new WindowDetail(f, new PanelDetail(pf.getMetadataNames()), new PanelDetail(pf.getContent()));
break;
}
wd.setVisible(true);
WindowDetail è un JFrame a cui passo i JPanel da visualizzare, ed il realtivo contenuto (metadati, immagine, ecc).
solo che così mi sembra un pò tutto un accrocco.