/* Class: CTex_TextFieldTab
*
* Autoren: Sven, Dimi, Stefan, Lars
*
* Funktion: Stellt die EingabeFelder, fuer das Editieren von
* Datenbank Eintraege. Die Classe bestehen aus 2
* Tabs "Requeds Field" u. "Optional Fields"
*
*/
package gui;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Desktop;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.io.IOException;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JToolBar;
import javax.swing.KeyStroke;
import javax.swing.event.UndoableEditEvent;
import javax.swing.event.UndoableEditListener;
import javax.swing.table.TableColumn;
import javax.swing.undo.CompoundEdit;
import javax.swing.undo.UndoManager;
import javax.swing.undo.UndoableEdit;
import com.mysql.jdbc.PacketTooBigException;
import java.util.Iterator;
import java.util.Vector;
import container.ContainerAttribute;
import container.ContainerFile;
import container.ContainerObject;
import container.ContainerType;
import ctex.Main;
import gui.dialog.FileDialog;
import database.Db;
public class EntryPanel extends JTabbedPane implements KeyListener{
private static final long serialVersionUID = 1L;
// Undo Manager fuer "Requeds Field" u. "Optional Fields"
public UndoManager myReqField = new UndoManager();
public UndoManager myOptField = new UndoManager();
/*
// dummy Compounds fuer zwischenspeichern der Inhalt
// "Requeds Field" u. "Optional Fields"
*/
public CompoundEdit myReqCompound = new CompoundEdit();
public CompoundEdit myOptCompound = new CompoundEdit();
// boolean Fleck fuer den aktuellen Undo Manager
private boolean ReqOROpt = true;
// this TextField Tab
private EntryPanel myTabPane;
// ScrollPane fuer "Requeds Field" u. "Optional Fields"
private JScrollPane jScrollPaneReq = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
private JScrollPane jScrollPaneOpt = new JScrollPane(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
// Vectoren fuer "Requeds Field" u. "Optional Fields"
private Vector<TextArea> ReqField = new Vector<TextArea>();
private Vector<TextArea> OptField = new Vector<TextArea>();
// boolean Fleck true fuer "Req" u. false fuer "Opt"
private boolean isRequired = false;
// fuer Tab Button betetigung Id von TextArea
private int ReqAreaId = 0;
private int OptAreaId = 0;
// boolean Fleck true fuer den new Entry sonst alten Eintrag editieren
private boolean isNewEntry = false;
// String of entryType
private final String entryTypeString;
// Key of entryType
private final String entryTypeKeyVar = Main.entryTypeKeyFild;
// Datenbank entryType
private ContainerType entryType;
// Datenbank
private Db theDb;
// Object of Datenbank
private ContainerObject obj;
private TabPanel tableTab;
private JButton apply = new JButton(Main.myLang.getString("button.apply"));
/* to generate entry Key */
private TextArea autor = null;
private TextArea year = null;
private JTable fileTable;
private JPopupMenu tablePopupMenu;
private ContainerFile rightClickedElement;
private FileTableModel fileModel;
private final Frame myFrame;
/**
* Construktor:
* Initialisiert CTex_TextFieldTab mit dem uebergebnen Objekt
* aus dem Datenbank
*
* @return gui.CTex_TextFieldTab
*/
EntryPanel(Db theDb, TabPanel inTab, final Undomanager manager, ContainerObject obj, Frame frame) {
tableTab = inTab;
isNewEntry = false;
this.obj = obj;
this.theDb = theDb;
this.myTabPane = this;
this.myFrame = frame;
this.entryTypeString = theDb.convTypeIdToTypeName(obj.getTypeId());
this.entryType = theDb.getType(entryTypeString);
// Close dialog when pressing ESC
tableTab.registerKeyboardAction(new ActionListener() {
public void actionPerformed(ActionEvent e) {
tableTab.showPreviewPane();
}
}, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_IN_FOCUSED_WINDOW);
// Auf Tab Mous Listner Legen.
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
// Tab Nummer holen
int tabNumber = getUI().tabForCoordinate(EntryPanel.this, e.getX(), e.getY());
// Wenn Tab 0 dann Requiedfield sonst OptionsField
if(tabNumber == 0){
// Manager auf ReqField den feld setzen
ReqOROpt = true;
ReqAreaId = 0;
manager.setActivManager(myReqField, myOptField, null, myReqCompound, myOptCompound, null, ReqOROpt, false);
// Area Tab Einstellungen
ReqField.get(ReqAreaId).setCaretPosition(0);
ReqField.get(ReqAreaId).requestFocus(true);
/* set Color of new Area */
//ReqField.get(ReqAreaId).setFocusBackground();
} else if (tabNumber == 1) {
ReqOROpt = false;
OptAreaId = 1;
// Manager auf OptField setzen
manager.setActivManager(myReqField, myOptField, null, myReqCompound, myOptCompound, null, ReqOROpt, false);
// Area Tab Einstellungen
OptField.get(OptAreaId).setCaretPosition(0);
OptField.get(OptAreaId).requestFocus(true);
/* set Color of new Area */
//OptField.get(OptAreaId).setFocusBackground();
}
}
});
// Manager auf selekted Tab setzen
manager.setActivManager(myReqField, myOptField, null, myReqCompound, null, myOptCompound, ReqOROpt, false);
// "Requeds Field" u. "Optional Fields" Tabs einfuegen
this.addTab("Required fields", getReqTextField(manager));
this.addTab("Optional fields", getOptTextField(manager));
this.ReqAreaId = 0;
this.OptAreaId = 0;
this.ReqOROpt = true;
}
/**
* Construktor:
* Initialisiert CTex_TextFieldTab mit neuem Entry Type
*
* @return gui.CTex_TextFieldTab
*/
EntryPanel(Db theDb, TabPanel inTab, String entryTypeString, final Undomanager manager, Frame frame) {
tableTab = inTab;
isNewEntry = true;
this.obj = null;
this.theDb = theDb;
this.myTabPane = this;
this.myFrame = frame;
this.entryTypeString = entryTypeString;
this.entryType = theDb.getType(entryTypeString);
// Close dialog when pressing ESC
tableTab.registerKeyboardAction(new ActionListener() {
public void actionPerformed(ActionEvent e) {
tableTab.showPreviewPane();
}
}, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_IN_FOCUSED_WINDOW);
// Auf Tab Mous Listner Legen.
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
// Tab Nummer hollen
int tabNumber = getUI().tabForCoordinate(EntryPanel.this, e.getX(), e.getY());
// Wenn Tab 0 dann Requiedfield sonst OptionsField
if(tabNumber == 0){
// Manager auf ReqField den feld setzen
ReqOROpt = true;
ReqAreaId = 0;
manager.setActivManager(myReqField, myOptField, null, myReqCompound, myOptCompound, null, ReqOROpt, false);
// Area Tab Einstellungen
ReqField.get(ReqAreaId).setCaretPosition(0);
ReqField.get(ReqAreaId).requestFocus(true);
/* set Color of new Area */
//ReqField.get(ReqAreaId).setFocusBackground();
} else if (tabNumber == 1) {
ReqOROpt = false;
OptAreaId = 1;
// Manager auf OptField setzen
manager.setActivManager(myReqField, myOptField, null, myReqCompound, myOptCompound, null, ReqOROpt, false);
// Area Tab Einstellungen
OptField.get(OptAreaId).setCaretPosition(0);
OptField.get(OptAreaId).requestFocus(true);
/* set Color of new Area */
//OptField.get(OptAreaId).setFocusBackground();
}
}
});
// Manager auf selekted Tab setzen
manager.setActivManager(myReqField, myOptField, null, myReqCompound, null, myOptCompound, ReqOROpt, false);
// "Requeds Field" u. "Optional Fields" Tabs einfuegen
this.addTab("Required fields", getReqTextField(manager));
this.addTab("Optional fields", getOptTextField(manager));
this.ReqAreaId = 0;
this.OptAreaId = 0;
this.ReqOROpt = true;
}
/**
* Diese Methode initialisiert die RequedField Panel
* und fuegt die benuetigte Text Areas ein
*
* @return javax.swing.JPanel
*/
private JPanel getReqTextField(Undomanager manager) {
// Requed Field Pane
JPanel myReq = new JPanel();
JPanel jPanelReq = new JPanel();
myReq.setLayout(new BorderLayout());
isRequired = true;
// Skalierung in Y - Richtung
jPanelReq.setLayout(new BoxLayout(jPanelReq, BoxLayout.Y_AXIS));
// Entry Type Key Feld einfuegen
jPanelReq.add(getTextPanel(entryTypeKeyVar, manager));
// Restliche Felder einfuegen
for (int i = 0; i < entryType.getRequiredFields().size(); i++){
jPanelReq.add(getTextPanel(entryType.getRequiredFields().get(i), manager));
}
jScrollPaneReq.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
jScrollPaneReq.getVerticalScrollBar().setUnitIncrement(12);
jScrollPaneReq.setViewportView(jPanelReq);
myReq.add(getTypePanel(), BorderLayout.WEST);
myReq.add(jScrollPaneReq, BorderLayout.CENTER);
myReq.add(getBottomPanel(), BorderLayout.PAGE_END);
return myReq;
}
public void setFocus(){
ReqField.get(ReqAreaId).setCaretPosition(0);
ReqField.get(ReqAreaId).requestFocusInWindow();
}
/**
* Diese Methode initialisiert die OptionalFields Panel
* und fuegt die benuetigte Text Areas ein
*
* @return javax.swing.JPanel
*/
private JPanel getOptTextField(Undomanager manager) {
// Optional Field Pane
JPanel myOpt = new JPanel();
JPanel jPanelOpt = new JPanel();
myOpt.setLayout(new BorderLayout());
jPanelOpt = new JPanel();
isRequired = false;
// Skalierung in Y - Richtung
jPanelOpt.setLayout(new BoxLayout(jPanelOpt, BoxLayout.Y_AXIS));
// Felder einfuegen
jPanelOpt.add(getFilePanel(Main.fileField, manager));
for (int i = 1; i < entryType.getOptionalFields().size(); i++){
if(!entryType.getOptionalFields().get(i).equals("pdfField")){
jPanelOpt.add(getTextPanel(entryType.getOptionalFields().get(i), manager));
}
}
jScrollPaneOpt.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
jScrollPaneOpt.getVerticalScrollBar().setUnitIncrement(12);
jScrollPaneOpt.setViewportView(jPanelOpt);
myOpt.add(getTypePanel(), BorderLayout.WEST);
myOpt.add(jScrollPaneOpt, BorderLayout.CENTER);
myOpt.add(getBottomPanel(), BorderLayout.PAGE_END);
return myOpt;
}
private JPanel getFilePanel(String typeName, Undomanager manager) {
//PopupMenu init
tablePopupMenu = new JPopupMenu();
JMenuItem tableOpenItem = new JMenuItem("Open");
tableOpenItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
openFile(rightClickedElement);
}
});
tablePopupMenu.add(tableOpenItem);
//Main Panel init
JPanel textFieldPanel = new JPanel();
JLabel typeLabel = new JLabel(typeName, JLabel.CENTER);
typeLabel.setPreferredSize(new Dimension(150, 35));
//Tabel Init
if (isNewEntry == false){
fileTable = new JTable (new FileTableModel(theDb.getAllFiles(obj.getId())));
} else {
fileTable = new JTable (new FileTableModel(new Vector<ContainerFile>()));
}
fileModel = (FileTableModel) fileTable.getModel();
fileTable.getTableHeader().setReorderingAllowed(false);
TableColumn col = fileTable.getColumnModel().getColumn(0);
col.setMinWidth(25);
col.setMaxWidth(50);
col.setPreferredWidth(25);
col = fileTable.getColumnModel().getColumn(3);
col.setMinWidth(35);
col.setMaxWidth(50);
col.setPreferredWidth(35);
//Listener f�r clicks on file Table
// Double-Click => Open Edit Fild
// Right-Click => Context Menu => Open
fileTable.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
if (e.getButton() == MouseEvent.BUTTON3 && fileTable.rowAtPoint(e.getPoint()) != -1) {
rightClickedElement = (ContainerFile) fileModel.getDataAt(fileTable.rowAtPoint(e.getPoint()));
tablePopupMenu.show(e.getComponent(), e.getX(), e.getY());
}
else if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 2 && fileTable.rowAtPoint(e.getPoint()) != -1) {
new FileDialog (fileModel,
(ContainerFile) fileModel.getDataAt(fileTable.rowAtPoint(e.getPoint())),
fileTable.rowAtPoint(e.getPoint()),
myFrame);
}
}
});
//Scrollpane init
JScrollPane scrollPane = new javax.swing.JScrollPane();
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
scrollPane.setViewportView(fileTable);
scrollPane.setPreferredSize(new Dimension(0, 100));
//Button init
JButton add = new JButton(new ImageIcon(getClass().getClassLoader().getResource("images/add.png")));
add.setToolTipText(Main.myLang.getString("button.add"));
add.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
new FileDialog(fileModel, ((Component)myFrame));
}
});
JButton del = new JButton(new ImageIcon("images/delete.png"));
del.setToolTipText(Main.myLang.getString("button.delete"));
del.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int selectedRow = fileTable.getSelectedRow();
if (selectedRow != -1) {
fileModel.removeData(selectedRow);
//TODO:
}
fileModel.fireTableDataChanged();
fileTable.repaint();
}
});
JButton open = new JButton(new ImageIcon(getClass().getClassLoader().getResource("images/folder.png")));
open.setToolTipText(Main.myLang.getString("button.open"));
open.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (fileTable.getSelectedRow() != -1){
openFile(((ContainerFile) fileModel.getDataAt(fileTable.getSelectedRow())));
}
}
});
//Toolbar init
JToolBar buttonBar = new JToolBar();
buttonBar.setOrientation(VERTICAL);
buttonBar.setFloatable(false);
buttonBar.add(add);
buttonBar.add(del);
buttonBar.add(open);
//Zusammenf�gen
textFieldPanel.setLayout(new BoxLayout(textFieldPanel, BoxLayout.LINE_AXIS));
textFieldPanel.setBorder(BorderFactory.createRaisedBevelBorder());
textFieldPanel.add(typeLabel);
textFieldPanel.add(scrollPane);
textFieldPanel.add(buttonBar);
textFieldPanel.validate();
return textFieldPanel;
}
/**
* Die Methode initialisiert die Text Panel
* mit bestimten Text Areas
*
* Besteht: aus Label, Text Area und Toolbar mit 2 Button "addObject, addCondition"
*
* @return javax.swing.JPanel
*/
private JPanel getTextPanel(String typeName, Undomanager manager) {
// Button init
JButton addObject = new JButton(new ImageIcon(getClass().getClassLoader().getResource("images/table_relationship.png")));
JButton addCondition = new JButton(new ImageIcon(getClass().getClassLoader().getResource("images/script.png")));
addObject.setToolTipText(Main.myLang.getString("textArea.addObject"));
addCondition.setToolTipText(Main.myLang.getString("textArea.addCondition"));
// Label init
JLabel typeLabel = new JLabel(typeName, JLabel.CENTER);
typeLabel.setPreferredSize(new Dimension(150, 40));
// Text Area in Text Panel einfuegen
JScrollPane scrol = new JScrollPane();
scrol = getTextScroll(typeName, manager, addObject, addCondition);
// Fuer Entry Type Key keine Button erzeugen
if (typeName == entryTypeKeyVar){
addObject.setVisible(false);
addCondition.setVisible(false);
}
// ButtonBar init
JToolBar buttonBar = new JToolBar();
buttonBar.setOrientation(HORIZONTAL);
buttonBar.setFloatable(false);
// Bottun on Toolbar einfuegen
buttonBar.add(addObject);
buttonBar.add(addCondition);
// Label in Panel einfuegen & zusammenf�hren
JPanel textFieldPanel = new JPanel();
textFieldPanel.setLayout(new BoxLayout(textFieldPanel, BoxLayout.LINE_AXIS));
textFieldPanel.setPreferredSize(new Dimension(0, 40));
textFieldPanel.add(typeLabel);
textFieldPanel.add(scrol);
textFieldPanel.add(buttonBar);
textFieldPanel.setBorder(BorderFactory.createRaisedBevelBorder());
textFieldPanel.validate();
return textFieldPanel;
}
private JPanel getTypePanel(){
JLabel label = new JLabel(this.entryTypeString, JLabel.CENTER);
label.setFont(new Font("Serif", Font.BOLD, 20));
label.setUI(new VerticalLabelUI());
JPanel panel = new JPanel();
panel.add(label);
panel.setPreferredSize(new Dimension (30, 150));
return panel;
}
/**
* Die Methode initialisiert die ScrollPane
* fuer Text Areas
*
* @return javax.swing.JScrollPane
*/
private JScrollPane getTextScroll(String typeName, Undomanager manager, JButton addObject, JButton addCondition) {
JScrollPane jScrollPane = new JScrollPane();
jScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
jScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
jScrollPane.setViewportView(getTextArea(isRequired, typeName, manager, addObject, addCondition));
return jScrollPane;
}
/**
* Die Methode initialisiert Text Areas
*
* @return gui.CTex_TextArea
*/
private TextArea getTextArea(boolean isRequired, final String typeName, Undomanager manager, final JButton addObject, final JButton addCondition) {
final TextArea TextArea;
ContainerAttribute e = null;
Vector<ContainerAttribute> attV = new Vector<ContainerAttribute>();
if (obj != null){
// wenn ein aus Objekt
if (entryTypeKeyVar == typeName){
attV.add(new ContainerAttribute(-1, -1, obj.getKey(), false, new Vector<ContainerAttribute>()));
TextArea = new TextArea(theDb, entryTypeKeyVar, attV, this);
} else {
Vector<ContainerAttribute> v = obj.getAttributes();
Iterator<ContainerAttribute> i = v.iterator();
// load Attribute
attV.clear();
while(i.hasNext()){
e = i.next();
if (theDb.convTypeIdToTypeName(e.getObjectTypeId()).equals(typeName)){
attV.add(e);
}
}
//if has Value or not
if (attV.size() != 0){
TextArea = new TextArea(theDb, theDb.convTypeIdToTypeName(attV.get(0).getObjectTypeId()), attV, this);
} else {
attV.add(new ContainerAttribute(-1, theDb.convTypeNameToTypeId(typeName), "", false, new Vector<ContainerAttribute>()));
TextArea = new TextArea(theDb, typeName, attV, this);
}
}
} else {
TextArea = new TextArea(theDb, typeName, attV, this);
}
// action of addObject "Objecte werden Gelb markiert und Links Weis"
addObject.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent obj) {
TextArea.setObject();
}
});
// action of addCondition "Condition werden Grun markiert"
addCondition.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent con) {
TextArea.addCondition();
}
});
if (! isRequired) {
OptField.add(TextArea);
addTextFieldOpt(OptField.get(OptField.size() - 1), manager);
this.OptAreaId++;
} else {
ReqField.add(TextArea);
addTextFieldReq(ReqField.get(ReqField.size() - 1), manager);
this.ReqAreaId++;
}
//Save TextAreas for AutoGeneration Key
if (typeName.equals("author")) {
this.autor = TextArea;
} else if (typeName.equals("year")) {
this.year = TextArea;
}
return TextArea;
}
/**
* Die Methode initialisiert Button Toolbar
*
* @return java.swing.JToolBar
*/
private JPanel getBottomPanel(){
JPanel toolBar = new JPanel(new FlowLayout());
// Button save, applay, close
JButton save = new JButton(Main.myLang.getString("button.ok"));
JButton closeAll = new JButton(Main.myLang.getString("button.cancel"));
// an Toolbar einfuegen
apply = new JButton(Main.myLang.getString("button.apply"));
toolBar.add(save);
toolBar.add(apply);
toolBar.add(closeAll);
// Schliessen
closeAll.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// Tab loeschen
myTabPane.removeAll();
tableTab.showPreviewPane();
}
});
// Anderungen uebernehmen
apply.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (addToDB()) {
// Model u. Tabel update
((Model)tableTab.getTheModel()).setChanged(true);
((Model)tableTab.getTheModel()).refreshModel(obj);
((Model)tableTab.getTheModel()).fireTableDataChanged();
}
}
});
// Anderungen uebernehmen und Schliessen
save.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (addToDB()) {
// Tab loeschen
myTabPane.removeAll();
tableTab.removeBottomComponentofSplitPane();
// Model u. Tabel updait
((Model)tableTab.getTheModel()).setChanged(true);
((Model)tableTab.getTheModel()).refreshModel(obj);
((Model)tableTab.getTheModel()).fireTableStructureChanged();
((Model)tableTab.getTheModel()).fireTableDataChanged();
}
}
});
return toolBar;
}
/**
* Die Methode speichert den Inhalt des Text Felder in die Datenbank
*
*/
private boolean addToDB() {
myFrame.setCursorWait();
Vector<ContainerAttribute> myAtt = new Vector<ContainerAttribute>();
String objKey = ReqField.get(0).getText();
if (objKey.isEmpty() == false){
for (int i = 1; i < ReqField.size(); i++){
if (ReqField.get(i).getAtt().size() != 0 && ReqField.get(i).getText().isEmpty() == false){
myAtt.addAll(ReqField.get(i).getAtt());
}
}
for (int i = 0; i < OptField.size(); i++){
if (OptField.get(i).getAtt().size() != 0 && OptField.get(i).getText().isEmpty() == false){
myAtt.addAll(OptField.get(i).getAtt());
}
}
int ret = -1;
//New Entry
if (isNewEntry == true) {
if(theDb.getObject(objKey) == null){
ret = theDb.setObject(new ContainerObject(-1,
theDb.convTypeNameToTypeId(this.entryTypeString),
objKey,
myAtt));
} else {
JOptionPane.showMessageDialog(null,
Main.myLang.getString(Main.myLang.getString("textFildTab.existingkey.message")),
Main.myLang.getString(Main.myLang.getString("textFildTab.existingkey.title")),
JOptionPane.ERROR_MESSAGE);
}
}
//Edit Entry
else {
if (theDb.getObject(objKey) != null) {
} else {
JOptionPane.showMessageDialog(null,
Main.myLang.getString(Main.myLang.getString("textFildTab.changedkey.message")),
Main.myLang.getString(Main.myLang.getString("textFildTab.changedkey.title")),
JOptionPane.WARNING_MESSAGE);
}
ret = theDb.setObject(new ContainerObject(obj.getId(),
theDb.convTypeNameToTypeId(this.entryTypeString),
objKey,
myAtt));
}
//file into DB
if (ret != -1){
try {
theDb.setAllFiles (this.fileModel.getData(), ret);
obj = theDb.getObject(ret);
myFrame.setCursorNormal();
return true;
} catch (PacketTooBigException e) {
JOptionPane.showMessageDialog(null,
Main.myLang.getString(Main.myLang.getString("textFildTab.FileSizeToSmall.message")),
Main.myLang.getString(Main.myLang.getString("textFildTab.FileSizeToSmall.title")),
JOptionPane.ERROR_MESSAGE);
myFrame.setCursorNormal();
}
}
myFrame.setCursorNormal();
return false;
}
else {
JOptionPane.showMessageDialog(null,
Main.myLang.getString(Main.myLang.getString("textFildTab.missingKey.message")),
Main.myLang.getString(Main.myLang.getString("textFildTab.missingKey.title")),
JOptionPane.ERROR_MESSAGE);
myFrame.setCursorNormal();
return false;
}
}
/**
* Die Methode ueberwacht die Actionen in Requed Text Felder und speichert
* die Anderungen dummy Compound
*
*/
private void addTextFieldReq(final JTextArea myField, final Undomanager manager){
myField.addKeyListener(this);
myField.getDocument().addUndoableEditListener(new UndoableEditListener() {
public void undoableEditHappened(UndoableEditEvent e) {
UndoableEdit ue = e.getEdit();
if (!myReqCompound.isInProgress()){
myReqCompound = new CompoundEdit();
}
myReqCompound.addEdit(ue);
manager.setActivManager(myReqField, myOptField, null, myReqCompound, myOptCompound, null, true, false);
manager.updateButtons();
}
});
}
/**
* Die Methode ueberwacht die Actionen in Optional Text Felder und speichert
* die Anderungen dummy Compound
*
*/
private void addTextFieldOpt(final JTextArea myField,final Undomanager manager){
myField.addKeyListener(this);
myField.getDocument().addUndoableEditListener(new UndoableEditListener() {
public void undoableEditHappened(UndoableEditEvent e) {
UndoableEdit ue = e.getEdit();
if (!myOptCompound.isInProgress()){
myOptCompound = new CompoundEdit();
}
myOptCompound.addEdit(ue);
manager.setActivManager(myReqField, myOptField, null, myReqCompound, myOptCompound, null, false, false);
manager.updateButtons();
}
});
}
/**
* Die Methode schliest den dummy Compound
* falls es ein "Space oder Enter" gedrueckt wird
*
*/
public void keyTyped(KeyEvent e) {
char keyChar = e.getKeyChar();
if (keyChar == ' ' || keyChar == '\n') {
// Falls Req Req Compound schliessen und an
// Req Manager uebergeben
if (ReqOROpt) {
if (myReqCompound.isInProgress()) {
myReqCompound.end();
myReqField.addEdit(myReqCompound);
}
// sonst Opt Compound schliessen und an
// Opt Manager uebergeben
} else {
if (myOptCompound.isInProgress()) {
myOptCompound.end();
myOptField.addEdit(myOptCompound);
}
}
}
}
private void openFile(ContainerFile f){
Desktop desktop = null;
if (Desktop.isDesktopSupported()) {
desktop = Desktop.getDesktop();
}
try {
desktop.open(new File(theDb.getFile(f.getId()).getAbsolutePath()));
} catch (Exception ioe) {
try {
desktop.open(new File(f.getLink()));
} catch (IOException e) {
// TODO File ist gelaescht worden
}
}
}
public ContainerObject getObject(){
return obj;
}
public JButton getapplayButton(){
return apply;
}
/*
* @Proceder: genetrate the Entry Key in abhangigkeit Von Autor Name + Jahr
*/
public void generateKey(){
String author = this.autor.getText().concat(" ");
String year = this.year.getText();
String dummy = null;
Vector <String> Vornamen = new Vector <String>();
Vector <String> Namen = new Vector <String>();
int count = 0;
/*
* analysieren vom TextArea of author
* sortieren Nach Name und Vorname
*/
while (author.length() != 0){
dummy = author.substring(0, author.indexOf(" "));
if (dummy.length() > 3){
if (count % 2 == 0){
Vornamen.add(dummy);
} else {
Namen.add(dummy);
}
count++;
}
author = author.substring(author.indexOf(" ") + 1);
}
/*
* generieren vom Key
*/
if(Namen.size() > 1) {
this.ReqField.get(0).setText("");
// falls mehrere Authoren, die ersten Buchstaben von der Name nehmen
for(int i = 0; i < Namen.size(); i++){
this.ReqField.get(0).setText(this.ReqField.get(0).getText() + Namen.get(i).charAt(0));
}
this.ReqField.get(0).setText(this.ReqField.get(0).getText() + year);
} else if (Namen.size() == 1) {
// falls 1 Authoren, die Name nehmen
this.ReqField.get(0).setText("");
this.ReqField.get(0).setText(this.ReqField.get(0).getText() + Namen.get(0) + year);
} else {
// sonst was im Feld steht
this.ReqField.get(0).setText("");
this.ReqField.get(0).setText(this.ReqField.get(0).getText() + this.autor.getText() + this.year.getText());
}
}
/*
* legt die Funktion auf die Tab button
* Corsor spring zu nachsten Text Area
*/
public void keyPressed(KeyEvent key) {
/* mit strg + g autogenerate Key */
// TODO:
if(key.getKeyCode() == 71 && key.getModifiersEx() == 128){
generateKey();
}
/* mit Tab TextArea vorwaerts gehen */
if (key.getKeyCode() == 9 && key.getModifiersEx() == 0){
setNextArea();
//closeCompoundEdit();
}
/* mit shift+Tab TextArea rueckwaerts gehen */
if(key.getKeyCode() == 9 && key.getModifiersEx() == 64){
setBackArea();
//closeCompoundEdit();
}
}
/*
* Setzt den Cursor auf nachsten Text Area
*/
private void setNextArea(){
// Actives Tab Req oder Opt
if (this.ReqOROpt){
// wenn es letzte Area ist dann zum ersten
if (this.ReqAreaId == this.ReqField.size() - 1) {
this.ReqAreaId = 0;
this.jScrollPaneReq.getVerticalScrollBar().setValue(0);
// sonst NextArea
} else {
this.ReqAreaId++;
this.jScrollPaneReq.getVerticalScrollBar().setValue(this.jScrollPaneReq.getVerticalScrollBar().getValue() + 35);
}
// Area setzen
ReqField.get(this.ReqAreaId).setCaretPosition(0);
ReqField.get(this.ReqAreaId).requestFocus(true);
if (this.ReqField.get(this.ReqAreaId).getBackground() != Color.WHITE){
setNextArea();
}
/* set Color of new Area */
//OptField.get(this.OptAreaId).setFocusBackground();
} else {
// wenn es letzte Area ist dann zum ersten
if (this.OptAreaId == this.OptField.size() - 1) {
this.OptAreaId = 1;
this.jScrollPaneOpt.getVerticalScrollBar().setValue(0);
// sonst NextArea
} else {
this.OptAreaId++;
this.jScrollPaneOpt.getVerticalScrollBar().setValue(this.jScrollPaneOpt.getVerticalScrollBar().getValue() + 35);
}
// Area setzen
OptField.get(this.OptAreaId).setCaretPosition(0);
OptField.get(this.OptAreaId).requestFocus(true);
if (this.OptField.get(this.OptAreaId).getBackground() != Color.WHITE){
setNextArea();
}
/* set Color of new Area */
//OptField.get(this.OptAreaId).setFocusBackground();
}
}
/*
* Setzt den Cursor auf vorherigen Text Area
*/
private void setBackArea(){
// Actives Tab Req oder Opt
if (this.ReqOROpt){
// wenn es erste Area ist dann zum letzen
if (this.ReqAreaId == 0) {
this.ReqAreaId = this.ReqField.size() - 1;
this.jScrollPaneReq.getVerticalScrollBar().setValue(this.jScrollPaneReq.getVerticalScrollBar().getValue() + this.ReqField.size()*35);
// sonst NextArea
} else {
this.ReqAreaId--;
this.jScrollPaneReq.getVerticalScrollBar().setValue(this.jScrollPaneReq.getVerticalScrollBar().getValue() - 35);
}
// Area setzen
ReqField.get(this.ReqAreaId).setCaretPosition(0);
ReqField.get(this.ReqAreaId).requestFocus(true);
if (this.ReqField.get(this.ReqAreaId).getBackground() != Color.WHITE){
setBackArea();
}
/* set Color of new Area */
//OptField.get(this.OptAreaId).setFocusBackground();
} else {
// wenn es erste Area ist dann zum letzen
if (this.OptAreaId == 1) {
this.OptAreaId = this.OptField.size() - 1;
this.jScrollPaneOpt.getVerticalScrollBar().setValue(this.jScrollPaneOpt.getVerticalScrollBar().getValue() + this.OptField.size()*35);
// sonst NextArea
} else {
this.OptAreaId--;
this.jScrollPaneOpt.getVerticalScrollBar().setValue(this.jScrollPaneOpt.getVerticalScrollBar().getValue() - 35);
}
// Area setzen
OptField.get(this.OptAreaId).setCaretPosition(0);
OptField.get(this.OptAreaId).requestFocus(true);
if (this.OptField.get(this.OptAreaId).getBackground() != Color.WHITE){
setBackArea();
}
}
}
@Override
public void keyReleased(KeyEvent e) {}
}