/*
* This file is part of Caliph & Emir.
*
* Caliph & Emir is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* Caliph & Emir is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Caliph & Emir; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Copyright statement:
* --------------------
* (c) 2002-2005 by Mathias Lux (mathias@juggle.at)
* http://www.juggle.at, http://caliph-emir.sourceforge.net
*/
package at.lux.fotoannotation.panels;
import at.lux.fotoannotation.AgentComboBoxModel;
import at.lux.fotoannotation.AnnotationFrame;
import at.lux.fotoannotation.CreationTableModel;
import at.lux.fotoannotation.mpeg7.Mpeg7CreationInformation;
import at.lux.fotoannotation.mpeg7.Mpeg7MediaFormat;
import at.lux.fotoannotation.utils.TextChangesListener;
import org.jdom.Element;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Iterator;
import java.util.Vector;
public class CreationPanel extends JPanel implements AnnotationPanel {
JComboBox agents;
AgentComboBoxModel model;
private JTable datatable;
private CreationTableModel ctm;
public CreationPanel(AgentComboBoxModel model) {
super(new BorderLayout());
this.model = model;
init();
}
private void init() {
agents = new JComboBox(model);
agents.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
stateChanged(event);
}
});
agents.addActionListener(TextChangesListener.getInstance());
ctm = new CreationTableModel();
datatable = new JTable(ctm);
datatable.setShowGrid(false);
datatable.setEnabled(false);
datatable.setTableHeader(null);
datatable.setBorder(BorderFactory.createEmptyBorder(0,3,0,3));
JPanel apanel = new JPanel(new BorderLayout());
apanel.add(new JLabel("Who took the photo: "), BorderLayout.WEST);
apanel.add(agents, BorderLayout.CENTER);
JPanel tablePanel = new JPanel(new BorderLayout());
tablePanel.add(new JScrollPane(datatable), BorderLayout.CENTER);
datatable.getColumnModel().getColumn(0).setMaxWidth(120);
datatable.getColumnModel().getColumn(0).setMinWidth(80);
datatable.addKeyListener(TextChangesListener.getInstance());
this.add(ComponentFactory.createTitledPanel("Creator of the image:",apanel), BorderLayout.NORTH);
this.add(ComponentFactory.createTitledPanel("Creation, EXIF & technical information:", tablePanel), BorderLayout.CENTER);
this.add(new JSeparator(JSeparator.HORIZONTAL), BorderLayout.WEST);
}
private void stateChanged(ActionEvent event) {
// debug("state changed: " + (agents.getSelectedIndex() + 1) + ". item selected");
if (agents.getSelectedIndex() + 1 == agents.getModel().getSize()) {
// debug("a new agent shall be created!");
model.createNewAgent();
} else
model.reReadAgents();
}
public Element createXML() {
if (agents.getSelectedIndex() + 1 < agents.getModel().getSize()) {
Element e = (Element) AgentComboBoxModel.getAgents().get(agents.getSelectedIndex());
Vector settings = new Vector();
// Eigenschaften ab 7 werden als Settings f�rs Tool ausgelesen (EXIF-Tags) :)
// ist keines gesetzt, so wird der Vector wieder auf null gesetzt :)
boolean atLeastOneSettingDefined = false;
Iterator itVals = ctm.getValues().iterator();
int tempCount = 0;
for (Object o : ctm.getKeys()) {
String tempKey = (String) o;
String tempVal = (String) itVals.next();
if (tempVal.length() > 0 && tempCount > 5) { // Wenn Wert da und wenns keiner der ersten 6 std werte is
settings.add(tempKey + "=" + tempVal);
atLeastOneSettingDefined = true;
}
tempCount++;
}
if (!atLeastOneSettingDefined)
settings = null;
String time = null;
if (datatable.getValueAt(0, 1).toString().length() > 0)
time = datatable.getValueAt(0, 1).toString();
String tool = null;
int count = 0;
for (Object o1 : ctm.getKeys()) {
String s = (String) o1;
if (s.equals("Make")) {
if (tool == null) tool = new String();
tool = ctm.getValues().get(count) + " " + tool;
}
if (s.equals("Model")) {
if (tool == null) tool = new String();
tool = tool + ctm.getValues().get(count);
}
count++;
}
Mpeg7CreationInformation m7ci = new Mpeg7CreationInformation(e, tool, settings, time);
// Getting data ....
String bits = null, fformat = null, fsize = null, ih = null, iw = null;
if (datatable.getValueAt(1, 1).toString().length() > 0) fformat = datatable.getValueAt(1, 1).toString();
if (datatable.getValueAt(2, 1).toString().length() > 0) fsize = datatable.getValueAt(2, 1).toString();
if (datatable.getValueAt(4, 1).toString().length() > 0) ih = datatable.getValueAt(4, 1).toString();
if (datatable.getValueAt(3, 1).toString().length() > 0) iw = datatable.getValueAt(3, 1).toString();
if (datatable.getValueAt(5, 1).toString().length() > 0) bits = datatable.getValueAt(5, 1).toString();
Mpeg7MediaFormat m7mf = new Mpeg7MediaFormat(bits, fformat, fsize, ih, iw);
Element mediaFormat = m7mf.createDocument();
Element ret = new Element("return", mediaFormat.getNamespace()).addContent(mediaFormat);
ret.addContent(m7ci.createDocument().detach());
return ret;
} else {
return null;
}
}
public void setAgent(String agentName) {
int index = 0;
debug("scanning " + agents.getItemCount() + " agents");
for (int i = 0; i < agents.getItemCount(); i++) {
if (agents.getItemAt(i).toString().equals(agentName)) {
index = i;
debug("matched " + agentName);
} else {
debug("not matched " + agentName);
}
}
agents.setSelectedIndex(index);
}
private void debug(String message) {
if (AnnotationFrame.DEBUG) System.out.println("[at.lux.fotoannotation.MetadataDescriptionPanel] " + message);
}
// public void setInstrument(String size) {
// datatable.setValueAt(size, 0, 1);
// }
public void setTime(String time) {
datatable.setValueAt(time, 0, 1);
}
// public void setExposure(String size) {
// datatable.setValueAt(size, 2, 1);
// }
//
// public void setFlash(String size) {
// datatable.setValueAt(size, 3, 1);
// }
//
// public void setFocalLength(String size) {
// datatable.setValueAt(size, 4, 1);
// }
//
// public void setAparture(String size) {
// datatable.setValueAt(size, 5, 1);
// }
//
// public void setBrightness(String size) {
// datatable.setValueAt(size, 6, 1);
// }
//
// public void setDistance(String size) {
// datatable.setValueAt(size, 7, 1);
// }
public void setFileFormat(String fileformat) {
datatable.setValueAt(fileformat, 1, 1);
}
public void setFileSize(String size) {
datatable.setValueAt(size, 2, 1);
}
public void setImageSize(String x, String y) {
datatable.setValueAt(x, 3, 1);
datatable.setValueAt(y, 4, 1);
}
public void setBitsPerPixel(String x) {
datatable.setValueAt(x, 5, 1);
// datatable.setValueAt(y, 11, 1);
}
public void addKeyValuePair(String key, String value) {
ctm.addKeyValuePair(key, value);
}
public void updateTable() {
ctm.fireTableDataChanged();
}
public void resetTable() {
ctm.resetValues();
}
}