/*
** This file is part of Filius, a network construction and simulation software.
**
** Originally created at the University of Siegen, Institute "Didactics of
** Informatics and E-Learning" by a students' project group:
** members (2006-2007):
** André Asschoff, Johannes Bade, Carsten Dittich, Thomas Gerding,
** Nadja Haßler, Ernst Johannes Klebert, Michell Weyer
** supervisors:
** Stefan Freischlad (maintainer until 2009), Peer Stechert
** Project is maintained since 2010 by Christian Eibl <filius@c.fameibl.de>
** and Stefan Freischlad
** Filius 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) version 3.
**
** Filius 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 Filius. If not, see <http://www.gnu.org/licenses/>.
*/
package filius.gui.quelltextsicht;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.HashMap;
import java.util.ListIterator;
import java.util.Vector;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ListSelectionModel;
import javax.swing.border.EtchedBorder;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableColumnModel;
import filius.Main;
import filius.rahmenprogramm.I18n;
import filius.rahmenprogramm.Information;
public class PanelVerwaltung extends JPanel implements I18n {
private static final long serialVersionUID = 1L;
private ButtonGroup buttonGroupModus, buttonGroupAnwendungstyp;
private JButton buttonLoeschen, buttonSpeichern;
private JTable tabelle;
private JTextField anwendungsName, klassenName;
public PanelVerwaltung() {
super();
setPreferredSize(new Dimension(700, 460));
setMaximumSize(new Dimension(700, 460));
initKomponenten();
}
public String[] holeAnwendung() {
String[] array;
array = new String[2];
if (buttonGroupModus.getSelection().getActionCommand().equals("neu")) {
array[0] = anwendungsName.getText().trim();
array[1] = klassenName.getText().trim();
if (!array[0].equals("") && !array[1].equals("")) {
return array;
}
else {
return null;
}
}
else {
if (tabelle.getSelectedRow() == -1) {
return null;
}
else {
array[0] = (String) tabelle.getValueAt(
tabelle.getSelectedRow(), 0);
array[1] = (String) tabelle.getValueAt(
tabelle.getSelectedRow(), 1);
}
if (!array[0].equals("") && !array[1].equals("")) {
array[1] = array[1].substring(array[1].lastIndexOf(".")+1);
return array;
}
else {
return null;
}
}
}
public String[] initQuelltextDateien() {
String quelltext = "";
String[] dateien = null;
String klasse;
File file;
String fs;
fs = System.getProperty("file.separator");
if (buttonGroupModus.getSelection().getActionCommand().equals("neu")) {
klasse = klassenName.getText();
if (buttonGroupAnwendungstyp.getSelection().getActionCommand()
.equals("client")) {
dateien = new String[2];
dateien[0] = Information.getInformation()
.getAnwendungenPfad()
+ "filius"+fs+"software"+fs+"clientserver"+fs+""
+ klasse + ".java";
quelltext = ladeQuelltext(Information.getInformation().getProgrammPfad()
+ "config"+fs+"quelltext_vorlagen"+fs+"client.txt");
quelltext = quelltext.replaceAll("ClientBaustein", klasse);
speicherQuelltext(quelltext, dateien[0]);
dateien[1] = Information.getInformation()
.getAnwendungenPfad()
+ "filius"+fs+"gui"+fs+"anwendungssicht"+fs+"GUIApplication"
+ klasse + "Window.java";
quelltext = ladeQuelltext(Information.getInformation().getProgrammPfad()
+ "config"+fs+"quelltext_vorlagen"+fs+"client_gui.txt");
quelltext = quelltext.replaceAll("ClientBaustein", klasse);
speicherQuelltext(quelltext, dateien[1]);
}
else {
dateien = new String[3];
dateien[0] = Information.getInformation()
.getAnwendungenPfad()
+ "filius"+fs+"software"+fs+"clientserver"+fs+""
+ klasse + "Mitarbeiter.java";
quelltext = ladeQuelltext(Information.getInformation().getProgrammPfad()
+ "config"+fs+"quelltext_vorlagen"+fs+"server_mitarbeiter.txt");
quelltext = quelltext.replaceAll("ServerBaustein", klasse);
speicherQuelltext(quelltext, dateien[0]);
dateien[1] = Information.getInformation()
.getAnwendungenPfad()
+ "filius"+fs+"software"+fs+"clientserver"+fs+""
+ klasse + ".java";
quelltext = ladeQuelltext(Information.getInformation().getProgrammPfad()
+ "config"+fs+"quelltext_vorlagen"+fs+"server.txt");
quelltext = quelltext.replaceAll("ServerBaustein", klasse);
speicherQuelltext(quelltext, dateien[1]);
dateien[2] = Information.getInformation()
.getAnwendungenPfad()
+ "filius"+fs+"gui"+fs+"anwendungssicht"+fs+"GUIApplication"
+ klasse + "Window.java";
quelltext = ladeQuelltext(Information.getInformation().getProgrammPfad()
+ "config"+fs+"quelltext_vorlagen"+fs+"server_gui.txt");
quelltext = quelltext.replaceAll("ServerBaustein", klasse);
speicherQuelltext(quelltext, dateien[2]);
}
}
else if (tabelle.getSelectedRow() != -1) {
klasse = (String) tabelle.getValueAt(
tabelle.getSelectedRow(), 1);
klasse = klasse.substring(klasse.lastIndexOf(".")+1);
file = new File(Information.getInformation()
.getAnwendungenPfad()
+ "filius"+fs+"software"+fs+"clientserver"+fs+""
+ klasse + "Mitarbeiter.java");
if (file.exists()) {
dateien = new String[3];
dateien[0] = Information.getInformation()
.getAnwendungenPfad()
+ "filius"+fs+"software"+fs+"clientserver"+fs+""
+ klasse + "Mitarbeiter.java";
dateien[1] = Information.getInformation()
.getAnwendungenPfad()
+ "filius"+fs+"software"+fs+"clientserver"+fs+""
+ klasse + ".java";
dateien[2] = Information.getInformation()
.getAnwendungenPfad()
+ "filius"+fs+"gui"+fs+"anwendungssicht"+fs+"GUIApplication"
+ klasse + "Window.java";
}
else {
dateien = new String[2];
dateien[0] = Information.getInformation()
.getAnwendungenPfad()
+ "filius"+fs+"software"+fs+"clientserver"+fs+""
+ klasse + ".java";
dateien[1] = Information.getInformation()
.getAnwendungenPfad()
+ "filius"+fs+"gui"+fs+"anwendungssicht"+fs+"GUIApplication"
+ klasse + "Window.java";
}
}
return dateien;
}
private String ladeQuelltext(String datei) {
String quellText = "";
RandomAccessFile quellDatei = null;
try {
quellDatei = new RandomAccessFile(datei, "r");
for (String line; (line = quellDatei.readLine()) != null;) {
quellText += line + "\n";
}
}
catch (Exception e1) {
e1.printStackTrace(Main.debug);
}
finally {
try {
quellDatei.close();
}
catch (Exception e) {
e.printStackTrace(Main.debug);
}
}
return quellText;
}
/**
* Methode zum Speichern aller bearbeiteten bzw. neu erstellten Quelltexte
*/
private void speicherQuelltext(String quelltext, String datei) {
FileWriter writer;
File file;
String verzeichnis;
verzeichnis = datei.substring(0, datei.lastIndexOf(System.getProperty("file.separator")));
file = new File(verzeichnis);
file.mkdirs();
try {
writer = new FileWriter(datei, false);
writer.write(quelltext);
writer.close();
}
catch (IOException e2) {
e2.printStackTrace(Main.debug);
}
}
private void initKomponenten() {
JRadioButton radioButton;
JLabel label;
JScrollPane scrollPane;
GridBagConstraints gbc;
GridBagLayout gridBag;
JPanel panel, tmp;
JTextField text;
this.setLayout(new BorderLayout());
panel = new JPanel();
panel.setPreferredSize(new Dimension(700, 160));
panel.setMaximumSize(new Dimension(700, 160));
panel.setMinimumSize(new Dimension(700, 160));
gridBag = new GridBagLayout();
panel.setLayout(gridBag);
panel.setBorder(new EtchedBorder());
buttonGroupModus = new ButtonGroup();
buttonGroupAnwendungstyp = new ButtonGroup();
radioButton = new JRadioButton();
radioButton.setText(messages.getString("panelverwaltung_msg1"));
radioButton.setActionCommand("neu");
radioButton.setSelected(true);
radioButton.setAlignmentX(0f);
buttonGroupModus.add(radioButton);
gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.gridwidth = 2;
gbc.insets = new Insets(5,5,5,5);
gbc.anchor = GridBagConstraints.NORTHWEST;
gridBag.setConstraints(radioButton, gbc);
panel.add(radioButton);
label = new JLabel();
label.setPreferredSize(new Dimension(10,0));
gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 1;
gbc.insets = new Insets(5,5,5,5);
gbc.anchor = GridBagConstraints.NORTHWEST;
gridBag.setConstraints(label, gbc);
panel.add(label);
radioButton = new JRadioButton();
radioButton.setText(messages.getString("panelverwaltung_msg2"));
radioButton.setActionCommand("client");
radioButton.setSelected(true);
buttonGroupAnwendungstyp.add(radioButton);
gbc = new GridBagConstraints();
gbc.gridx = 1;
gbc.gridy = 1;
gbc.insets = new Insets(5,5,5,5);
gbc.anchor = GridBagConstraints.NORTHWEST;
gridBag.setConstraints(radioButton, gbc);
panel.add(radioButton);
radioButton = new JRadioButton();
radioButton.setText(messages.getString("panelverwaltung_msg3"));
radioButton.setActionCommand("server");
radioButton.setSelected(false);
buttonGroupAnwendungstyp.add(radioButton);
gbc = new GridBagConstraints();
gbc.gridx = 2;
gbc.gridwidth = 2;
gbc.gridy = 1;
gbc.insets = new Insets(5,5,5,5);
gbc.anchor = GridBagConstraints.NORTHWEST;
gridBag.setConstraints(radioButton, gbc);
panel.add(radioButton);
label = new JLabel(messages.getString("panelverwaltung_msg4"));
label.setPreferredSize(new Dimension(150, 20));
gbc = new GridBagConstraints();
gbc.gridx = 1;
gbc.gridy = 2;
gbc.insets = new Insets(5,5,5,5);
gbc.anchor = GridBagConstraints.NORTHWEST;
gridBag.setConstraints(label, gbc);
panel.add(label);
anwendungsName = new JTextField();
anwendungsName.setPreferredSize(new Dimension(200, 20));
gbc = new GridBagConstraints();
gbc.gridx = 2;
gbc.gridwidth = 2;
gbc.gridy = 2;
gbc.insets = new Insets(5,5,5,5);
gbc.anchor = GridBagConstraints.NORTHWEST;
gridBag.setConstraints(anwendungsName, gbc);
panel.add(anwendungsName);
label = new JLabel(messages.getString("panelverwaltung_msg5"));
label.setPreferredSize(new Dimension(150, 20));
gbc = new GridBagConstraints();
gbc.gridx = 1;
gbc.gridy = 3;
gbc.insets = new Insets(5,5,5,5);
gbc.anchor = GridBagConstraints.NORTHWEST;
gridBag.setConstraints(label, gbc);
panel.add(label);
text = new JTextField("filius.software.clientserver.");
text.setEditable(false);
gbc = new GridBagConstraints();
gbc.gridx = 2;
gbc.gridy = 3;
gbc.insets = new Insets(5,5,5,0);
gbc.anchor = GridBagConstraints.NORTHWEST;
gridBag.setConstraints(text, gbc);
panel.add(text);
klassenName = new JTextField();
klassenName.setPreferredSize(new Dimension(200, 20));
gbc = new GridBagConstraints();
gbc.gridx = 3;
gbc.gridy = 3;
gbc.insets = new Insets(5,5,0,5);
gbc.anchor = GridBagConstraints.NORTHWEST;
gridBag.setConstraints(klassenName, gbc);
panel.add(klassenName);
this.add(panel, BorderLayout.NORTH);
label = new JLabel();
label.setPreferredSize(new Dimension(680,0));
gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 7;
gbc.gridwidth = 5;
gridBag.setConstraints(label, gbc);
panel.add(label);
panel = new JPanel();
panel.setPreferredSize(new Dimension(700, 300));
panel.setMaximumSize(new Dimension(700, 300));
panel.setMinimumSize(new Dimension(700, 300));
gridBag = new GridBagLayout();
panel.setLayout(gridBag);
panel.setBorder(new EtchedBorder());
radioButton = new JRadioButton();
radioButton.setText(messages.getString("panelverwaltung_msg7"));
radioButton.setActionCommand("modifizieren");
radioButton.setSelected(false);
radioButton.setAlignmentX(0f);
buttonGroupModus.add(radioButton);
gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridwidth = 2;
gbc.gridy = 4;
gbc.insets = new Insets(5,5,5,5);
gbc.anchor = GridBagConstraints.NORTHWEST;
gridBag.setConstraints(radioButton, gbc);
panel.add(radioButton);
label = new JLabel();
label.setPreferredSize(new Dimension(10,0));
gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 1;
gbc.insets = new Insets(5,5,5,5);
gbc.anchor = GridBagConstraints.NORTHWEST;
gridBag.setConstraints(label, gbc);
panel.add(label);
initTabelle();
scrollPane = new JScrollPane(tabelle);
scrollPane.setPreferredSize(new Dimension(620, 180));
gbc = new GridBagConstraints();
gbc.gridx = 1;
gbc.gridwidth = 3;
gbc.gridy = 5;
gbc.insets = new Insets(5,5,5,5);
gbc.anchor = GridBagConstraints.NORTHWEST;
gridBag.setConstraints(scrollPane, gbc);
panel.add(scrollPane);
tmp = new JPanel();
tmp.setLayout(new FlowLayout());
buttonLoeschen = new JButton(messages.getString("panelverwaltung_msg8"));
buttonLoeschen.setPreferredSize(new Dimension(200, 30));
buttonLoeschen.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
if (tabelle.getSelectedRow() != -1) {
((DefaultTableModel) tabelle.getModel()).removeRow(tabelle
.getSelectedRow());
tabelleSpeichern();
updateTabelle();
}
}
});
tmp.add(buttonLoeschen);
buttonSpeichern = new JButton(messages.getString("panelverwaltung_msg9"));
buttonSpeichern.setPreferredSize(new Dimension(200, 30));
buttonSpeichern.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
tabelleSpeichern();
updateTabelle();
}
});
tmp.add(buttonSpeichern);
gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridwidth = 4;
gbc.gridy = 6;
gbc.insets = new Insets(5,5,5,5);
gbc.anchor = GridBagConstraints.CENTER;
gridBag.setConstraints(tmp, gbc);
panel.add(tmp);
label = new JLabel();
label.setPreferredSize(new Dimension(680,0));
gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 7;
gbc.gridwidth = 6;
gridBag.setConstraints(label, gbc);
panel.add(label);
this.add(panel, BorderLayout.SOUTH);
updateTabelle();
}
private void tabelleSpeichern() {
FileWriter fw = null;
String[] zeile;
DefaultTableModel dtm;
String dateiname;
dtm = (DefaultTableModel) tabelle.getModel();
dateiname = Information.getInformation().getAnwendungenPfad()
+ "EigeneAnwendungen.txt";
try {
fw = new FileWriter(dateiname, false);
for (int i = 0; i < dtm.getRowCount(); i++) {
zeile = new String[4];
for (int j = 0; j < zeile.length; j++) {
zeile[j] = (String) dtm.getValueAt(i, j);
}
fw.write(zeile[0] + ";" + zeile[1] + ";" + zeile[2] + ";"
+ zeile[3] + "\n");
}
}
catch (IOException e) {
e.printStackTrace(Main.debug);
}
finally {
if (fw != null) try {
fw.close();
}
catch (IOException e) {}
}
}
private void initTabelle() {
DefaultTableModel model;
TableColumnModel tcm;
model = new DefaultTableModel(0, 4);
tabelle = new AnwendungsTabelle(model);
tabelle.setDragEnabled(false);
tabelle.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
tabelle.setIntercellSpacing(new Dimension(10, 10));
tabelle.setRowHeight(30);
tabelle.setShowGrid(false);
tabelle.setFillsViewportHeight(true);
tabelle.setBackground(Color.WHITE);
tabelle.setShowHorizontalLines(true);
tcm = tabelle.getColumnModel();
tcm.getColumn(0).setHeaderValue(messages.getString("panelverwaltung_msg10"));
tcm.getColumn(0).setPreferredWidth(100);
tcm.getColumn(1).setHeaderValue(messages.getString("panelverwaltung_msg11"));
tcm.getColumn(1).setPreferredWidth(100);
tcm.getColumn(2).setHeaderValue(messages.getString("panelverwaltung_msg12"));
tcm.getColumn(2).setPreferredWidth(100);
tcm.getColumn(3).setHeaderValue(messages.getString("panelverwaltung_msg13"));
tcm.getColumn(3).setPreferredWidth(100);
}
private void updateTabelle() {
HashMap map;
ListIterator it;
Vector<String> zeile;
DefaultTableModel dtm;
dtm = (DefaultTableModel) tabelle.getModel();
dtm.setRowCount(0);
try {
it = Information.getInformation().ladePersoenlicheProgrammListe().listIterator();
while (it.hasNext()) {
map = (HashMap) it.next();
zeile = new Vector<String>();
zeile.addElement((String)map.get("Anwendung"));
zeile.addElement((String)map.get("Klasse"));
zeile.addElement((String)map.get("GUI-Klasse"));
zeile.addElement((String)map.get("gfxFile"));
dtm.addRow(zeile);
}
}
catch (IOException e) {
e.printStackTrace(Main.debug);
}
tabelle.updateUI();
}
}