6 Commits

Author SHA1 Message Date
Servicepoint
ecb496f35b #13 solved: Exceptions, die nicht direkt behandelt werden können,
werden, bis auf wenige Ausnahmen, an die Main-Klasse weitergereicht, um
dort aufgefangen zu werden.
Die Software hat jetzt einen eigenen Logger und Util-Funktionen, für das
einfache Werfen von Fehlermeldungen.
2014-12-16 17:29:50 +01:00
Servicepoint
102a46428b closes #2: PDF-Dokument wird nun bei einer Ausleihe automatisch erzeugt,
in einem tmp-Ordner erstellt und geöffnet.
Wenn das Programm beendet wird, wird der tmp-Ordner geleert.
2014-12-10 17:33:21 +01:00
Servicepoint
831d3bda09 Erste Arbeiten an einer PDF-Export-Funktion. 2014-12-09 17:29:18 +01:00
Servicepoint
428806c5b9 Wenn ein Benutzer gelöscht wird, wird nun vorher geprüft, ob dieser
Benutzer mit Ausleihen verknüpft ist. Ist dies der Fall, kann über einen
Auswahldialog ein Benutzer ausgewählt werden, auf den die Ausleihen
übertragen werden sollen. closes issue #2
2014-12-09 16:19:29 +01:00
Servicepoint
6dae70df05 Arbeite an issue #2: Wenn ein Benutzer gelöscht wird, soll vorher
geprüft werden, ob es eine Ausleihe gibt, in der dieser Benutzer
vorhandne ist. Wenn das der Fall ist, soll in einem JDialog ein User
ausgewählt werden können, auf den alle betroffenen Ausleihen
umgeschrieben werden. Anschließend soll noch einmal geprüft werden, ob
der zu löschende User in Benutzung ist (Rekursion).
2014-12-03 17:39:38 +01:00
Servicepoint
0d02edec31 lblArticleNamen in ArticleInspectFrame vergrößert. 2014-12-03 17:00:49 +01:00
22 changed files with 607 additions and 120 deletions

View File

@@ -6,5 +6,6 @@
<classpathentry kind="lib" path="lib/mysql-connector-java-5.1.32-bin.jar"/>
<classpathentry kind="lib" path="lib/sqlite-jdbc-3.7.2.jar"/>
<classpathentry kind="lib" path="lib/swingx-all-1.6.4.jar"/>
<classpathentry kind="lib" path="lib/pdfbox-app-1.8.7.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>

View File

@@ -13,3 +13,6 @@ This software uses the Oracle MySQL Java Connector (http://dev.mysql.com/downloa
### Tango Desktop Project
This software also uses icons provided by the Tango Desktop Project (http://tango.freedesktop.org/).
License will follow!
### Apache PDFBox
This software uses the Apache PDFBox (https://pdfbox.apache.org/) package which is published under Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0);

BIN
lib/pdfbox-app-1.8.7.jar Normal file

Binary file not shown.

View File

@@ -0,0 +1,49 @@
package de.katho.kBorrow;
import java.io.File;
import java.io.IOException;
import java.util.logging.FileHandler;
import java.util.logging.Formatter;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;
public class KLogger {
private static Logger logger;
private Handler fileHandler;
private Formatter plainText;
private KLogger() throws IOException {
logger = Logger.getLogger(Util.class.getName());
String fDir = System.getProperty("user.home")+"/kBorrow";
String fName = "kBorrow.log";
File dir = new File(fDir);
File file = new File(fDir+"/"+fName);
if(!dir.isDirectory()) dir.mkdir();
if(!file.isFile()) file.createNewFile();
fileHandler = new FileHandler(fDir+"/"+fName, true);
plainText = new SimpleFormatter();
fileHandler.setFormatter(plainText);
logger.addHandler(fileHandler);
}
private static Logger getLogger(){
if(logger == null){
try{
new KLogger();
} catch(IOException e){
Util.showError(e);
}
}
return logger;
}
public static void log(Level pLevel, String pMsg, Exception e){
getLogger().log(pLevel, pMsg, e);
System.out.println(pMsg);
}
}

View File

@@ -15,13 +15,13 @@ public class Settings {
private String filePath;
private String fileName;
public Settings() {
this.properties = new Properties();
this.filePath = System.getProperty("user.home")+"/kBorrow";
this.fileName = "Settings.cfg";
public Settings() throws Exception {
properties = new Properties();
filePath = System.getProperty("user.home")+"/kBorrow";
fileName = "Settings.cfg";
if(!this.filePathHasValidConfig()){
this.createDefaultConfig();
if(!filePathHasValidConfig()){
createDefaultConfig();
}
}
@@ -31,14 +31,14 @@ public class Settings {
*/
private boolean filePathHasValidConfig(){
try {
InputStream in = new FileInputStream(this.filePath+"/"+this.fileName);
this.properties = new Properties();
InputStream in = new FileInputStream(filePath+"/"+fileName);
properties = new Properties();
this.properties.load(in);
properties.load(in);
// Check if the properties file holds certain keys and values.
if( (this.properties.containsKey("dBType") && this.properties.containsValue("sqlite") && this.properties.containsKey("sqlitePath")) ||
(this.properties.contains("dbType") && this.properties.containsValue("mysql") && this.properties.containsKey("mysqlDB") && this.properties.containsKey("mysqlHost") && this.properties.containsKey("mysqlUser") && this.properties.containsKey("mysqlPass"))) {
if( (properties.containsKey("dBType") && properties.containsValue("sqlite") && properties.containsKey("sqlitePath")) ||
(properties.contains("dbType") && properties.containsValue("mysql") && properties.containsKey("mysqlDB") && properties.containsKey("mysqlHost") && properties.containsKey("mysqlUser") && properties.containsKey("mysqlPass"))) {
in.close();
return true;
@@ -49,21 +49,23 @@ public class Settings {
}
} catch (FileNotFoundException e) {
Util.showWarning(new Exception("Kann die Settingsdatei nicht finden. Versuche, eine neue zu erzeugen.", e));
return false;
} catch (IOException e){
e.printStackTrace();
Util.showWarning(e);
return false;
}
}
/**
* Writes a default config to the config file.
* @throws Exception
*
*/
private void createDefaultConfig() {
private void createDefaultConfig() throws Exception {
try {
File dir = new File(this.filePath);
File file = new File(this.filePath+"/"+this.fileName);
File dir = new File(filePath);
File file = new File(filePath+"/"+fileName);
if(!dir.isDirectory()) dir.mkdir();
if(!file.isFile()) file.createNewFile();
else {
@@ -73,39 +75,40 @@ public class Settings {
OutputStream os = new FileOutputStream(this.filePath+"/"+this.fileName);
this.properties.put("dBType", "sqlite");
this.properties.put("sqlitePath",System.getProperty("user.home").replace("\\", "/")+"/kBorrow/kBorrow.db" );
this.properties.store(os, null);
properties.put("dBType", "sqlite");
properties.put("sqlitePath",System.getProperty("user.home").replace("\\", "/")+"/kBorrow/kBorrow.db" );
properties.store(os, null);
os.close();
} catch (FileNotFoundException e) {
System.out.println("I couldn't find the specified properties file while trying to create a default config.");
e.printStackTrace();
throw new Exception("I couldn't find the specified properties file while trying to create a default config.", e);
} catch (IOException e) {
System.out.println("I had problems, writing to the properties file while trying to create a default config.");
e.printStackTrace();
throw new Exception("I had problems writing to the properties file while trying to create a default config.", e);
}
}
public String getProperty(String pKey){
return this.properties.getProperty(pKey);
if(properties.containsKey(pKey)) return properties.getProperty(pKey);
return "";
}
public void setProperty(String pKey, String pValue){
this.properties.put(pKey, pValue);
public void setProperty(String pKey, String pValue) throws IOException{
properties.put(pKey, pValue);
OutputStream os;
try {
os = new FileOutputStream(this.filePath+"/"+this.fileName);
this.properties.store(os, null);
properties.store(os, null);
os.close();
} catch (FileNotFoundException e) {
System.out.println("I couldn't find the specified properties file while trying to write the config.");
e.printStackTrace();
throw new FileNotFoundException("I couldn't find the specified properties file while trying to write the config.");
} catch (IOException e) {
System.out.println("I had problems, writing to the properties file while saving a setting.");
e.printStackTrace();
throw new IOException("I had problems, writing to the properties file while saving a setting.");
}
}
public String getSettingsDir(){
return filePath;
}
}

View File

@@ -1,13 +1,52 @@
package de.katho.kBorrow;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import java.util.logging.Level;
import javax.swing.JFrame;
import org.jdesktop.swingx.JXErrorPane;
import org.jdesktop.swingx.error.ErrorInfo;
public final class Util {
private static JFrame mainwindow;
public class Util {
public static String getCurrentDate(){
DateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
Date date = new Date();
return dateFormat.format(date);
}
public static String generateRandomString(int length) {
char[] chars = "abcdefghijklmnopqrstuvwxyz".toCharArray();
StringBuilder sb = new StringBuilder();
Random random = new Random();
for (int i = 0; i < length; i++) {
char c = chars[random.nextInt(chars.length)];
sb.append(c);
}
return sb.toString();
}
public static void showWarning(Exception e){
KLogger.log(Level.WARNING, e.getMessage(), e);
ErrorInfo info = new ErrorInfo("Warnung", e.getMessage(), null, null, e, Level.WARNING, null);
JXErrorPane.showDialog(mainwindow, info);
}
public static void showError(Exception e){
KLogger.log(Level.SEVERE, e.getMessage(), e);
ErrorInfo info = new ErrorInfo("Fehler", e.getMessage(), null, null, e, Level.SEVERE, null);
JXErrorPane.showDialog(mainwindow, info);
}
public static void setMainWindow(JFrame p){
mainwindow = p;
}
}

View File

@@ -1,12 +1,28 @@
package de.katho.kBorrow.controller;
import org.apache.pdfbox.exceptions.COSVisitorException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.edit.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import java.awt.Desktop;
import java.io.File;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import de.katho.kBorrow.Settings;
import de.katho.kBorrow.Util;
import de.katho.kBorrow.data.KArticle;
import de.katho.kBorrow.data.KLender;
import de.katho.kBorrow.data.KLending;
import de.katho.kBorrow.data.KUser;
import de.katho.kBorrow.db.DbConnector;
import de.katho.kBorrow.models.ArticleTableModel;
import de.katho.kBorrow.models.FreeArticleTableModel;
@@ -21,14 +37,16 @@ public class NewLendingController {
private FreeArticleTableModel freeArticleModel;
private LendingTableModel lendingTableModel;
private ArticleTableModel articleTableModel;
private Settings settings;
public NewLendingController(DbConnector pDbCon, HashMap<String, Object> pModels){
public NewLendingController(DbConnector pDbCon, HashMap<String, Object> pModels, final Settings pSettings){
dbCon = pDbCon;
userListModel = (UserListModel)pModels.get("userlistmodel");
lenderModel = (LenderModel)pModels.get("lendermodel");
freeArticleModel = (FreeArticleTableModel)pModels.get("freearticletablemodel");
articleTableModel = (ArticleTableModel)pModels.get("articletablemodel");
lendingTableModel = (LendingTableModel)pModels.get("lendingtablemodel");
settings = pSettings;
}
/**
@@ -41,8 +59,9 @@ public class NewLendingController {
* 4: Die gegebene Kombination aus Lender-Name, -Surname und -Studentnumber
* existiert mehrmals in der Datenbank. Das darf nicht sein und wirft daher einen Fehler!
* 5: Matrikelnummer muss eine Zahl sein!
* @throws Exception
*/
public int newLending(int pArtId, String pLName, String pLSurname, String pLSN, String pStartDate, Date pEstEndDate, String pUsername){
public int newLending(int pArtId, String pLName, String pLSurname, String pLSN, String pStartDate, Date pEstEndDate, String pUsername) throws Exception{
if(pArtId == -1 || pStartDate.isEmpty() || pEstEndDate == null || pLName.isEmpty() || pLSurname.isEmpty() || pUsername.isEmpty()) return 2;
if(pEstEndDate.before(new Date())) return 3;
if(!pLSN.matches("[0-9]+")) return 5;
@@ -62,16 +81,114 @@ public class NewLendingController {
KLender lender = lenders.get(0);
int uId = userListModel.getIdByFullname(pUsername);
DateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
int result = dbCon.createNewLending(pArtId, uId, lender.getId(), pStartDate, dateFormat.format(pEstEndDate));
if(result == 0){
int[] result = dbCon.createNewLending(pArtId, uId, lender.getId(), pStartDate, dateFormat.format(pEstEndDate));
if(result[0] == 0){
freeArticleModel.updateModel();
articleTableModel.updateModel();
lendingTableModel.updateModel();
return result;
createPdfFile(result[1]);
return result[0];
}
else return result;
else return result[0];
}
return 4;
}
private void createPdfFile(int pLendingId) throws Exception {
KLending lending = lendingTableModel.getLendingById(pLendingId);
KArticle article = articleTableModel.getArticleById(lending.getArticleId());
KUser user = userListModel.getUserById(lending.getUserId());
KLender lender = lenderModel.getLenderById(lending.getLenderId());
PDDocument doc = new PDDocument();
PDPage page = new PDPage(PDPage.PAGE_SIZE_A4);
PDRectangle rect = page.getMediaBox();
doc.addPage(page);
PDFont fontNormal = PDType1Font.HELVETICA;
PDFont fontBold = PDType1Font.HELVETICA_BOLD;
String[] text = {
"Artikel: ",
"Verliehen von: ",
"Ausgeliehen an: ",
"Start der Ausleihe: ",
"Voraussichtliche R<>ckgabe: "
};
String[] vars = {
article.getName(),
user.getName()+" "+user.getSurname(),
lender.getName()+" "+lender.getSurname()+" ("+lender.getStudentnumber()+")",
lending.getStartDate(),
lending.getExpectedEndDate()
};
try {
File file = createRandomFile();
PDPageContentStream cos = new PDPageContentStream(doc, page);
cos.beginText();
cos.moveTextPositionByAmount(100, rect.getHeight() - 100);
cos.setFont(fontBold, 16);
cos.drawString("Ausleihe #"+lending.getId());
cos.endText();
int i = 0;
while (i < text.length){
cos.beginText();
cos.moveTextPositionByAmount(100, rect.getHeight() - 25*(i+2) - 100 );
cos.setFont(fontBold, 12);
cos.drawString(text[i]);
cos.moveTextPositionByAmount(rect.getWidth() / 2 - 100, 0);
cos.setFont(fontNormal, 12);
cos.drawString(vars[i]);
cos.endText();
i++;
}
i = i+2;
cos.setLineWidth(1);
cos.addLine(100, rect.getHeight() - 25*(i+2) - 100, 300, rect.getHeight() - 25*(i+2) - 100);
cos.closeAndStroke();
i++;
cos.beginText();
cos.moveTextPositionByAmount(100, rect.getHeight() - 25*(i+2) - 100);
cos.setFont(fontNormal, 12);
cos.drawString("Unterschrift "+lender.getName()+" "+lender.getSurname());
cos.endText();
cos.close();
doc.save(file);
doc.close();
if(Desktop.isDesktopSupported()){
Desktop desktop = Desktop.getDesktop();
if(desktop.isSupported(Desktop.Action.OPEN)){
desktop.open(file);
}
}
} catch (IOException | COSVisitorException e) {
throw new Exception("Problem bei der Erstellung der PDF-Datei.", e);
}
}
private File createRandomFile() throws IOException{
File dir = new File(settings.getSettingsDir()+"/tmp");
File file = new File(settings.getSettingsDir()+"/tmp/"+Util.generateRandomString(8)+".pdf");
if(!dir.isDirectory()) dir.mkdir();
if(!file.isFile()) file.createNewFile();
else {
file.delete();
file.createNewFile();
}
return file;
}
}

View File

@@ -0,0 +1,16 @@
package de.katho.kBorrow.controller;
import de.katho.kBorrow.db.DbConnector;
public class RewriteToNewUserController {
private DbConnector dbCon;
public RewriteToNewUserController(DbConnector pDbCon){
dbCon = pDbCon;
}
public boolean rewriteToNewUser(int pOldId, int pNewId){
return dbCon.rewriteToNewUser(pOldId, pNewId);
}
}

View File

@@ -1,8 +1,12 @@
package de.katho.kBorrow.controller;
import java.util.ArrayList;
import java.util.HashMap;
import de.katho.kBorrow.data.KLending;
import de.katho.kBorrow.db.DbConnector;
import de.katho.kBorrow.gui.RewriteToNewUserDialog;
import de.katho.kBorrow.models.LendingTableModel;
import de.katho.kBorrow.models.UserTableModel;
import de.katho.kBorrow.models.UserListModel;
@@ -11,11 +15,13 @@ public class UserController {
private DbConnector dbCon;
private UserTableModel userTableModel;
private UserListModel userListModel;
private LendingTableModel lendingTableModel;
public UserController(DbConnector pDbCon, HashMap<String, Object> pModels) {
dbCon = pDbCon;
userTableModel = (UserTableModel)pModels.get("usertablemodel");
userListModel = (UserListModel)pModels.get("userlistmodel");
lendingTableModel = (LendingTableModel)pModels.get("lendingtablemodel");
}
public int createUser(String pName, String pSurname){
@@ -38,16 +44,39 @@ public class UserController {
return status;
}
public boolean deleteUser(int pRow){
public boolean deleteUser(int pRow) {
int id = userTableModel.getUserByRow(pRow).getId();
boolean isOccupied = false;
ArrayList<KLending> lendingList = lendingTableModel.getLendingList();
for(KLending elem : lendingList){
if(elem.getUserId() == id){
isOccupied = true;
break;
}
}
if(isOccupied){
RewriteToNewUserDialog dialog = new RewriteToNewUserDialog(id, dbCon);
if(dialog.getResult() == 0){
lendingTableModel.updateModel();
userTableModel.updateModel();
userListModel.updateModel();
return deleteUser(pRow);
}
else return false;
}
else {
if(dbCon.deleteUser(id)){
userTableModel.updateModel();
userListModel.updateModel();
lendingTableModel.updateModel();
return true;
}
return false;
}
}
}

View File

@@ -7,22 +7,22 @@ public class KArticle {
private boolean isFree;
public KArticle(int pId, String pName, boolean pFree, String pDesc) {
this.id = pId;
this.name = pName;
this.description = pDesc;
id = pId;
name = pName;
description = pDesc;
isFree = pFree;
}
public int getId() {
return this.id;
return id;
}
public String getName() {
return this.name;
return name;
}
public String getDescription() {
return this.description;
return description;
}
public boolean getIsFree(){
@@ -30,11 +30,11 @@ public class KArticle {
}
public void setName(String pName){
this.name = pName;
name = pName;
}
public void setDescription(String pDesc){
this.description = pDesc;
description = pDesc;
}
public void setIsFree(boolean pFree){

View File

@@ -19,9 +19,11 @@ public interface DbConnector {
public int editArticle(int pId, String pName, String pDesc);
public ArrayList<KArticle> getFreeArticleList();
public ArrayList<KLender> getLenderList();
public int createNewLending(int pArtId, int pUId, int pLId, String pStartDate, String pEstEndDate);
public int[] createNewLending(int pArtId, int pUId, int pLId, String pStartDate, String pEstEndDate);
public int createNewLender(String pLName, String pLSurname, String pLSN);
public ArrayList<KLending> getActiveLendingList();
public int returnLending(int lendingId, int artId, String string);
public ArrayList<KLending> getLendingListForArticle(int pArtId);
public ArrayList<KUser> getRewriteUserList(int id);
public boolean rewriteToNewUser(int pOldId, int pNewId);
}

View File

@@ -75,10 +75,10 @@ public class SqlConnector implements DbConnector{
}
@Override
public int createNewLending(int pArtId, int pUId, int pLId,
public int[] createNewLending(int pArtId, int pUId, int pLId,
String pStartDate, String pEstEndDate) {
// TODO Auto-generated method stub
return 0;
return new int[2];
}
@Override
@@ -105,4 +105,16 @@ public class SqlConnector implements DbConnector{
return null;
}
@Override
public ArrayList<KUser> getRewriteUserList(int id) {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean rewriteToNewUser(int pOldId, int pNewId) {
// TODO Auto-generated method stub
return false;
}
}

View File

@@ -12,6 +12,7 @@ import java.util.ArrayList;
import java.util.Hashtable;
import java.util.Map.Entry;
import de.katho.kBorrow.Util;
import de.katho.kBorrow.data.KArticle;
import de.katho.kBorrow.data.KLender;
import de.katho.kBorrow.data.KLending;
@@ -92,7 +93,7 @@ public class SqliteConnector implements DbConnector {
return true;
} catch (SQLException e) {
e.printStackTrace();
Util.showWarning(e);
return false;
}
}
@@ -108,7 +109,7 @@ public class SqliteConnector implements DbConnector {
return true;
}
catch (SQLException e){
e.printStackTrace();
Util.showWarning(e);
return false;
}
}
@@ -201,7 +202,27 @@ public class SqliteConnector implements DbConnector {
return userArr;
}
catch (SQLException e){
e.printStackTrace();
Util.showWarning(e);
return null;
}
}
public ArrayList<KUser> getRewriteUserList(int id) {
ArrayList<KUser> userArr = new ArrayList<KUser>();
try {
Statement st = this.connection.createStatement();
String query = "SELECT id, name, surname FROM user WHERE id != "+id;
ResultSet rs = st.executeQuery(query);
while (rs.next()){
userArr.add(new KUser(rs.getInt("id"), rs.getString("name"), rs.getString("surname")));
}
return userArr;
}
catch (SQLException e){
Util.showWarning(e);
return null;
}
}
@@ -221,7 +242,7 @@ public class SqliteConnector implements DbConnector {
return artArr;
}
catch (SQLException ex){
ex.printStackTrace();
Util.showWarning(ex);
return null;
}
}
@@ -241,7 +262,7 @@ public class SqliteConnector implements DbConnector {
return artArr;
}
catch(SQLException ex){
ex.printStackTrace();
Util.showWarning(ex);
return null;
}
}
@@ -261,7 +282,7 @@ public class SqliteConnector implements DbConnector {
return lendArr;
}
catch(SQLException ex){
ex.printStackTrace();
Util.showWarning(ex);
return null;
}
}
@@ -282,7 +303,7 @@ public class SqliteConnector implements DbConnector {
return lendingArr;
}
catch(SQLException e){
e.printStackTrace();
Util.showWarning(e);
return lendingArr;
}
}
@@ -303,7 +324,7 @@ public class SqliteConnector implements DbConnector {
return lendingArr;
}
catch(SQLException e){
e.printStackTrace();
Util.showWarning(e);
return lendingArr;
}
}
@@ -325,7 +346,7 @@ public class SqliteConnector implements DbConnector {
return 0;
} catch (SQLException e) {
e.printStackTrace();
Util.showWarning(e);
return 1;
}
}
@@ -341,7 +362,7 @@ public class SqliteConnector implements DbConnector {
return 0;
}
catch(SQLException e){
e.printStackTrace();
Util.showWarning(e);
return 1;
}
}
@@ -357,7 +378,7 @@ public class SqliteConnector implements DbConnector {
return true;
}
catch (SQLException e){
e.printStackTrace();
Util.showWarning(e);
return false;
}
}
@@ -373,7 +394,7 @@ public class SqliteConnector implements DbConnector {
return 0;
} catch (SQLException e) {
e.printStackTrace();
Util.showWarning(e);
return 1;
}
}
@@ -388,7 +409,7 @@ public class SqliteConnector implements DbConnector {
return 0;
}
catch (SQLException e){
e.printStackTrace();
Util.showWarning(e);
return 1;
}
}
@@ -404,18 +425,26 @@ public class SqliteConnector implements DbConnector {
return 0;
}
catch(SQLException e){
e.printStackTrace();
Util.showWarning(e);
return 1;
}
}
/**
* Erstellt eine neue Ausleihe.
*
* @return Status-Code:
* 0: Erfolg
* 1: SQL-Fehler
*
* @return R<>ckgabewert ist ein Array mit zwei Werten.
*
* Index 0: Enth<74>lt den R<>ckgabestatus:
* - Status 0: Alles in Ordnung
* - Status 1: SQL-Fehler
*
* Index 1: Enth<74>lt die ID der gerade erzeugten Tabellenzeile
*/
public int createNewLending(int pArtId, int pUId, int pLId, String pStartDate, String pEstEndDate) {
public int[] createNewLending(int pArtId, int pUId, int pLId, String pStartDate, String pEstEndDate) {
int[] result = new int[2];
try{
Statement st = connection.createStatement();
String query = "INSERT INTO lending (article_id, user_id, lender_id, start_date, expected_end_date ) "
@@ -424,27 +453,33 @@ public class SqliteConnector implements DbConnector {
st.executeUpdate(query);
return 0;
query = "SELECT id FROM lending ORDER BY id DESC LIMIT 1;";
ResultSet rs = st.executeQuery(query);
result[1] = rs.getInt("id");
result[0] = 0;
return result;
}
catch(SQLException e){
e.printStackTrace();
return 1;
Util.showWarning(e);
return new int[]{1,0};
}
}
public int createNewLender(String pLName, String pLSurname, String pLSN) {
try{
public boolean rewriteToNewUser(int pOldId, int pNewId) {
try {
Statement st = connection.createStatement();
String query = "INSERT into lender (name, surname, student_number) "
+ "VALUES ('"+pLName+"', '"+pLSurname+"', '"+pLSN+"')";
String query = "UPDATE lending SET user_id = '"+pNewId+"' WHERE user_id = '"+pOldId+"'";
st.executeUpdate(query);
return 0;
return true;
}
catch(SQLException e){
e.printStackTrace();
return 1;
Util.showWarning(e);
return false;
}
}
@@ -459,10 +494,26 @@ public class SqliteConnector implements DbConnector {
return 0;
}
catch(SQLException e){
e.printStackTrace();
Util.showWarning(e);
return 1;
}
}
public int createNewLender(String pLName, String pLSurname, String pLSN) {
try{
Statement st = connection.createStatement();
String query = "INSERT into lender (name, surname, student_number) "
+ "VALUES ('"+pLName+"', '"+pLSurname+"', '"+pLSN+"')";
st.executeUpdate(query);
return 0;
}
catch(SQLException e){
Util.showWarning(e);
return 1;
}
}
}

View File

@@ -61,7 +61,7 @@ public class ArticleInspectFrame extends JFrame {
lblNewLabel_1.setBounds(10, 21, 100, 20);
lblNewLabel_2.setBounds(10, 47, 100, 20);
lblArticleName.setBounds(120, 21, 100, 20);
lblArticleName.setBounds(120, 21, 250, 20);
taArticleDesc.setBounds(120, 45, 250, 78);
taArticleDesc.setEditable(false);

View File

@@ -5,16 +5,13 @@ import javax.swing.JTabbedPane;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import org.jdesktop.swingx.JXErrorPane;
import org.jdesktop.swingx.error.ErrorInfo;
import java.awt.BorderLayout;
import java.io.File;
import java.io.IOException;
import java.sql.SQLException;
import java.util.HashMap;
import de.katho.kBorrow.Settings;
import de.katho.kBorrow.Util;
import de.katho.kBorrow.db.DbConnector;
import de.katho.kBorrow.db.SqlConnector;
import de.katho.kBorrow.db.SqliteConnector;
@@ -46,14 +43,25 @@ public class MainWindow {
* @throws ClassNotFoundException
* @throws IOException
*/
public MainWindow() throws IOException {
set = new Settings();
public MainWindow() {
// Delete all files in tmp-dir
Runtime.getRuntime().addShutdownHook(new Thread(){
public void run(){
File dir = new File(set.getSettingsDir()+"/tmp/");
if(dir.isDirectory()){
for(File file : dir.listFiles()) file.delete();
}
}
});
try {
frame = new JFrame();
frame.setResizable(false);
frame.setBounds(100, 100, 600, 500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Util.setMainWindow(frame);
set = new Settings();
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
if(set.getProperty("dBType").equals("sqlite")){
@@ -72,23 +80,22 @@ public class MainWindow {
models.put("lendingtablemodel", new LendingTableModel(dbCon, models));
tabbedPane = new JTabbedPane(JTabbedPane.TOP);
frame.getContentPane().add(this.tabbedPane, BorderLayout.CENTER);
tabbedPane.addTab("Neue Ausleihe", new NewLendingPanel(this.dbCon, models));
frame.getContentPane().add(tabbedPane, BorderLayout.CENTER);
tabbedPane.addTab("Neue Ausleihe", new NewLendingPanel(this.dbCon, models, set));
tabbedPane.addTab("Ausleihen verwalten", new ManageLendingsPanel(this.dbCon, models));
tabbedPane.addTab("Artikel verwalten", new ArticlePanel(this.dbCon, models));
tabbedPane.addTab("Benutzer verwalten", new UserPanel(this.dbCon, models));
}
catch(ClassNotFoundException | InstantiationException | IllegalAccessException | IOException | UnsupportedLookAndFeelException | SQLException e) {
ErrorInfo info = new ErrorInfo("Exception", e.getMessage(), null, null, e, null, null);
JXErrorPane.showDialog(frame, info);
catch(Exception e) {
Util.showError(e);
System.exit(1);
}
this.frame.setVisible(true);
frame.setVisible(true);
}
public static void main(String[] args) throws IOException{
public static void main(String[] args) {
new MainWindow();
}
}

View File

@@ -28,6 +28,7 @@ import javax.swing.border.TitledBorder;
import org.jdesktop.swingx.JXDatePicker;
import org.jdesktop.swingx.autocomplete.AutoCompleteDecorator;
import de.katho.kBorrow.Settings;
import de.katho.kBorrow.Util;
import de.katho.kBorrow.controller.NewLendingController;
import de.katho.kBorrow.converter.LenderNameConverter;
@@ -70,7 +71,7 @@ public class NewLendingPanel extends JPanel implements ActionListener, FocusList
* @param dbCon
* @throws IOException
*/
public NewLendingPanel(final DbConnector dbCon, HashMap<String, Object> pModel) throws IOException {
public NewLendingPanel(final DbConnector dbCon, HashMap<String, Object> pModel, final Settings pSettings) throws IOException {
setLayout(null);
articleId = -1;
@@ -78,7 +79,7 @@ public class NewLendingPanel extends JPanel implements ActionListener, FocusList
freeArticleTableModel = (FreeArticleTableModel)pModel.get("freearticletablemodel");
userListModel = (UserListModel)pModel.get("userlistmodel");
lenderModel = (LenderModel)pModel.get("lendermodel");
newLendingController = new NewLendingController(dbCon, pModel);
newLendingController = new NewLendingController(dbCon, pModel, pSettings);
JTable freeArticleTable = new JTable(freeArticleTableModel);
freeArticleTable.setRowHeight(30);
@@ -217,7 +218,7 @@ public class NewLendingPanel extends JPanel implements ActionListener, FocusList
tfStudentNumber.setText("");
}
private void saveButtonPressed(){
private void saveButtonPressed() throws Exception {
String pLName = tfName.getText();
String pLSurname = tfSurname.getText();
String startDate = lblStartDate.getText();
@@ -266,7 +267,11 @@ public class NewLendingPanel extends JPanel implements ActionListener, FocusList
}
if(pEvent.getSource() == btnSave){
try {
saveButtonPressed();
} catch (Exception e) {
Util.showError(e);
}
}
}
@@ -287,7 +292,12 @@ public class NewLendingPanel extends JPanel implements ActionListener, FocusList
}
public void keyPressed(KeyEvent pKeyPress) {
if(pKeyPress.getKeyCode() == KeyEvent.VK_ENTER) saveButtonPressed();
if(pKeyPress.getKeyCode() == KeyEvent.VK_ENTER)
try {
saveButtonPressed();
} catch (Exception e) {
Util.showError(e);
}
}

View File

@@ -0,0 +1,105 @@
package de.katho.kBorrow.gui;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JComboBox;
import de.katho.kBorrow.controller.RewriteToNewUserController;
import de.katho.kBorrow.db.DbConnector;
import de.katho.kBorrow.models.RewriteUserModel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JLabel;
public class RewriteToNewUserDialog extends JDialog implements ActionListener {
/**
*
*/
private static final long serialVersionUID = -6002073589194176368L;
private final JPanel contentPanel = new JPanel();
private JButton okButton;
private JButton cancelButton;
private RewriteUserModel rwusermodel;
private RewriteToNewUserController rwcontroller;
private int result = 1;
private int oldId;
/**
* Create the dialog.
*/
public RewriteToNewUserDialog(int pOldId, DbConnector pDbCon) {
setTitle("Ausleihe umschreiben");
setModal(true);
setModalityType(ModalityType.APPLICATION_MODAL);
setResizable(false);
setBounds(100, 100, 229, 156);
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
JPanel contentPane = new JPanel();
setContentPane(contentPane);
contentPane.setLayout(new BorderLayout());
oldId = pOldId;
rwusermodel = new RewriteUserModel(pDbCon, oldId);
rwcontroller = new RewriteToNewUserController(pDbCon);
// Content Panel
contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPanel.setLayout(null);
JComboBox<String> comboBox = new JComboBox<String>(rwusermodel);
comboBox.setBounds(11, 52, 200, 30);
contentPanel.add(comboBox);
// Button Panel
JPanel buttonPane = new JPanel();
buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
okButton = new JButton("OK");
cancelButton = new JButton("Cancel");
okButton.addActionListener(this);
cancelButton.addActionListener(this);
buttonPane.add(okButton);
buttonPane.add(cancelButton);
contentPane.add(buttonPane, BorderLayout.SOUTH);
contentPane.add(contentPanel, BorderLayout.CENTER);
JLabel lblBenutzerAuswhlenAuf = new JLabel("<html>Benutzer ausw\u00E4hlen, auf den <br /> Ausleihen umgeschrieben werden sollen.</html>");
lblBenutzerAuswhlenAuf.setBounds(11, 11, 200, 30);
contentPanel.add(lblBenutzerAuswhlenAuf);
setVisible(true);
}
public void actionPerformed(ActionEvent e) {
// OK Button pressed
if(e.getSource() == okButton ) {
int newId = rwusermodel.getIdByFullname(rwusermodel.getSelectedItem());
if(rwcontroller.rewriteToNewUser(oldId, newId)){
result = 0;
}
dispose();
}
// Cancel Button pressed
if(e.getSource() == cancelButton ) {
dispose();
}
}
public int getResult(){
return result;
}
}

View File

@@ -205,6 +205,10 @@ public class UserPanel extends JPanel implements ActionListener, KeyListener {
}
}
public void setStatusLabel(String pText){
lblUserStatus.setText(pText);
}
@Override
public void keyPressed(KeyEvent pKeyPress) {
if(pKeyPress.getKeyCode() == KeyEvent.VK_ENTER) saveButtonPressed();

View File

@@ -30,7 +30,9 @@ public class UserDeleteTableButton extends TableButton {
int row = pTable.getSelectedRow();
pController.deleteUser(row);
if(pController.deleteUser(row)) pPanel.setStatusLabel("Benutzer erfolgreich gel<65>scht.");
else pPanel.setStatusLabel("Beuntzer konnte nicht gel<65>scht werden.");
pPanel.resetModeEditUser();
}
});

View File

@@ -79,7 +79,6 @@ public class LendingTableModel extends AbstractTableModel {
}
}
// Die Funktion muss differenzierter werden
public boolean isCellEditable(int row, int col){
if (col > 4) return true;
return false;
@@ -101,4 +100,8 @@ public class LendingTableModel extends AbstractTableModel {
return null;
}
public ArrayList<KLending> getLendingList(){
return data;
}
}

View File

@@ -0,0 +1,27 @@
package de.katho.kBorrow.models;
import de.katho.kBorrow.db.DbConnector;
public class RewriteUserModel extends UserListModel {
/**
*
*/
private static final long serialVersionUID = -78927566018961799L;
private int id;
public RewriteUserModel(DbConnector pDbCon, int pId) {
super(pDbCon);
id = pId;
updateModel();
}
public void updateModel(){
data = dbCon.getRewriteUserList(id);
if(data.size() > 0) setSelectedItem(data.get(0).getName()+" "+data.get(0).getSurname());
fireIntervalAdded(this, 0, data.size()-1);
}
}

View File

@@ -14,9 +14,9 @@ public class UserListModel extends AbstractListModel<String> implements ComboBox
*
*/
private static final long serialVersionUID = -8653066929273274524L;
private DbConnector dbCon;
private ArrayList<KUser> data;
private String selectedItem = null;
protected DbConnector dbCon;
protected ArrayList<KUser> data;
protected String selectedItem = null;
public UserListModel(DbConnector pDbCon){
super();
@@ -72,6 +72,13 @@ public class UserListModel extends AbstractListModel<String> implements ComboBox
return -1;
}
public KUser getUserById(int pId){
for (KUser elem : data){
if(elem.getId() == pId) return elem;
}
return null;
}
}