3 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
14 changed files with 350 additions and 98 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/mysql-connector-java-5.1.32-bin.jar"/>
<classpathentry kind="lib" path="lib/sqlite-jdbc-3.7.2.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/swingx-all-1.6.4.jar"/>
<classpathentry kind="lib" path="lib/pdfbox-app-1.8.7.jar"/>
<classpathentry kind="output" path="bin"/> <classpathentry kind="output" path="bin"/>
</classpath> </classpath>

View File

@@ -12,4 +12,7 @@ This software uses the Oracle MySQL Java Connector (http://dev.mysql.com/downloa
### Tango Desktop Project ### Tango Desktop Project
This software also uses icons provided by the Tango Desktop Project (http://tango.freedesktop.org/). This software also uses icons provided by the Tango Desktop Project (http://tango.freedesktop.org/).
License will follow! 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 filePath;
private String fileName; private String fileName;
public Settings() { public Settings() throws Exception {
this.properties = new Properties(); properties = new Properties();
this.filePath = System.getProperty("user.home")+"/kBorrow"; filePath = System.getProperty("user.home")+"/kBorrow";
this.fileName = "Settings.cfg"; fileName = "Settings.cfg";
if(!this.filePathHasValidConfig()){ if(!filePathHasValidConfig()){
this.createDefaultConfig(); createDefaultConfig();
} }
} }
@@ -31,14 +31,14 @@ public class Settings {
*/ */
private boolean filePathHasValidConfig(){ private boolean filePathHasValidConfig(){
try { try {
InputStream in = new FileInputStream(this.filePath+"/"+this.fileName); InputStream in = new FileInputStream(filePath+"/"+fileName);
this.properties = new Properties(); properties = new Properties();
this.properties.load(in); properties.load(in);
// Check if the properties file holds certain keys and values. // Check if the properties file holds certain keys and values.
if( (this.properties.containsKey("dBType") && this.properties.containsValue("sqlite") && this.properties.containsKey("sqlitePath")) || if( (properties.containsKey("dBType") && properties.containsValue("sqlite") && 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"))) { (properties.contains("dbType") && properties.containsValue("mysql") && properties.containsKey("mysqlDB") && properties.containsKey("mysqlHost") && properties.containsKey("mysqlUser") && properties.containsKey("mysqlPass"))) {
in.close(); in.close();
return true; return true;
@@ -49,21 +49,23 @@ public class Settings {
} }
} catch (FileNotFoundException e) { } catch (FileNotFoundException e) {
Util.showWarning(new Exception("Kann die Settingsdatei nicht finden. Versuche, eine neue zu erzeugen.", e));
return false; return false;
} catch (IOException e){ } catch (IOException e){
e.printStackTrace(); Util.showWarning(e);
return false; return false;
} }
} }
/** /**
* Writes a default config to the config file. * Writes a default config to the config file.
* @throws Exception
* *
*/ */
private void createDefaultConfig() { private void createDefaultConfig() throws Exception {
try { try {
File dir = new File(this.filePath); File dir = new File(filePath);
File file = new File(this.filePath+"/"+this.fileName); File file = new File(filePath+"/"+fileName);
if(!dir.isDirectory()) dir.mkdir(); if(!dir.isDirectory()) dir.mkdir();
if(!file.isFile()) file.createNewFile(); if(!file.isFile()) file.createNewFile();
else { else {
@@ -73,39 +75,40 @@ public class Settings {
OutputStream os = new FileOutputStream(this.filePath+"/"+this.fileName); OutputStream os = new FileOutputStream(this.filePath+"/"+this.fileName);
this.properties.put("dBType", "sqlite"); properties.put("dBType", "sqlite");
this.properties.put("sqlitePath",System.getProperty("user.home").replace("\\", "/")+"/kBorrow/kBorrow.db" ); properties.put("sqlitePath",System.getProperty("user.home").replace("\\", "/")+"/kBorrow/kBorrow.db" );
this.properties.store(os, null); properties.store(os, null);
os.close(); os.close();
} catch (FileNotFoundException e) { } catch (FileNotFoundException e) {
System.out.println("I couldn't find the specified properties file while trying to create a default config."); throw new Exception("I couldn't find the specified properties file while trying to create a default config.", e);
e.printStackTrace();
} catch (IOException e) { } catch (IOException e) {
System.out.println("I had problems, writing to the properties file while trying to create a default config."); throw new Exception("I had problems writing to the properties file while trying to create a default config.", e);
e.printStackTrace();
} }
} }
public String getProperty(String pKey){ 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){ public void setProperty(String pKey, String pValue) throws IOException{
this.properties.put(pKey, pValue); properties.put(pKey, pValue);
OutputStream os; OutputStream os;
try { try {
os = new FileOutputStream(this.filePath+"/"+this.fileName); os = new FileOutputStream(this.filePath+"/"+this.fileName);
this.properties.store(os, null); properties.store(os, null);
os.close(); os.close();
} catch (FileNotFoundException e) { } catch (FileNotFoundException e) {
System.out.println("I couldn't find the specified properties file while trying to write the config."); throw new FileNotFoundException("I couldn't find the specified properties file while trying to write the config.");
e.printStackTrace();
} catch (IOException e) { } catch (IOException e) {
System.out.println("I had problems, writing to the properties file while saving a setting."); throw new IOException("I had problems, writing to the properties file while saving a setting.");
e.printStackTrace();
} }
} }
public String getSettingsDir(){
return filePath;
}
} }

View File

@@ -1,13 +1,52 @@
package de.katho.kBorrow; package de.katho.kBorrow;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.Random;
import java.util.logging.Level;
public class Util { import javax.swing.JFrame;
import org.jdesktop.swingx.JXErrorPane;
import org.jdesktop.swingx.error.ErrorInfo;
public final class Util {
private static JFrame mainwindow;
public static String getCurrentDate(){ public static String getCurrentDate(){
DateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy"); DateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
Date date = new Date(); Date date = new Date();
return dateFormat.format(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; 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.DateFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.HashMap; 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.KLender;
import de.katho.kBorrow.data.KLending;
import de.katho.kBorrow.data.KUser;
import de.katho.kBorrow.db.DbConnector; import de.katho.kBorrow.db.DbConnector;
import de.katho.kBorrow.models.ArticleTableModel; import de.katho.kBorrow.models.ArticleTableModel;
import de.katho.kBorrow.models.FreeArticleTableModel; import de.katho.kBorrow.models.FreeArticleTableModel;
@@ -21,14 +37,16 @@ public class NewLendingController {
private FreeArticleTableModel freeArticleModel; private FreeArticleTableModel freeArticleModel;
private LendingTableModel lendingTableModel; private LendingTableModel lendingTableModel;
private ArticleTableModel articleTableModel; 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; dbCon = pDbCon;
userListModel = (UserListModel)pModels.get("userlistmodel"); userListModel = (UserListModel)pModels.get("userlistmodel");
lenderModel = (LenderModel)pModels.get("lendermodel"); lenderModel = (LenderModel)pModels.get("lendermodel");
freeArticleModel = (FreeArticleTableModel)pModels.get("freearticletablemodel"); freeArticleModel = (FreeArticleTableModel)pModels.get("freearticletablemodel");
articleTableModel = (ArticleTableModel)pModels.get("articletablemodel"); articleTableModel = (ArticleTableModel)pModels.get("articletablemodel");
lendingTableModel = (LendingTableModel)pModels.get("lendingtablemodel"); lendingTableModel = (LendingTableModel)pModels.get("lendingtablemodel");
settings = pSettings;
} }
/** /**
@@ -41,8 +59,9 @@ public class NewLendingController {
* 4: Die gegebene Kombination aus Lender-Name, -Surname und -Studentnumber * 4: Die gegebene Kombination aus Lender-Name, -Surname und -Studentnumber
* existiert mehrmals in der Datenbank. Das darf nicht sein und wirft daher einen Fehler! * existiert mehrmals in der Datenbank. Das darf nicht sein und wirft daher einen Fehler!
* 5: Matrikelnummer muss eine Zahl sein! * 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(pArtId == -1 || pStartDate.isEmpty() || pEstEndDate == null || pLName.isEmpty() || pLSurname.isEmpty() || pUsername.isEmpty()) return 2;
if(pEstEndDate.before(new Date())) return 3; if(pEstEndDate.before(new Date())) return 3;
if(!pLSN.matches("[0-9]+")) return 5; if(!pLSN.matches("[0-9]+")) return 5;
@@ -62,16 +81,114 @@ public class NewLendingController {
KLender lender = lenders.get(0); KLender lender = lenders.get(0);
int uId = userListModel.getIdByFullname(pUsername); int uId = userListModel.getIdByFullname(pUsername);
DateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy"); 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(); freeArticleModel.updateModel();
articleTableModel.updateModel(); articleTableModel.updateModel();
lendingTableModel.updateModel(); lendingTableModel.updateModel();
return result; createPdfFile(result[1]);
return result[0];
} }
else return result; else return result[0];
} }
return 4; 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

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

View File

@@ -19,7 +19,7 @@ public interface DbConnector {
public int editArticle(int pId, String pName, String pDesc); public int editArticle(int pId, String pName, String pDesc);
public ArrayList<KArticle> getFreeArticleList(); public ArrayList<KArticle> getFreeArticleList();
public ArrayList<KLender> getLenderList(); 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 int createNewLender(String pLName, String pLSurname, String pLSN);
public ArrayList<KLending> getActiveLendingList(); public ArrayList<KLending> getActiveLendingList();
public int returnLending(int lendingId, int artId, String string); public int returnLending(int lendingId, int artId, String string);

View File

@@ -75,10 +75,10 @@ public class SqlConnector implements DbConnector{
} }
@Override @Override
public int createNewLending(int pArtId, int pUId, int pLId, public int[] createNewLending(int pArtId, int pUId, int pLId,
String pStartDate, String pEstEndDate) { String pStartDate, String pEstEndDate) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return 0; return new int[2];
} }
@Override @Override

View File

@@ -12,6 +12,7 @@ import java.util.ArrayList;
import java.util.Hashtable; import java.util.Hashtable;
import java.util.Map.Entry; import java.util.Map.Entry;
import de.katho.kBorrow.Util;
import de.katho.kBorrow.data.KArticle; import de.katho.kBorrow.data.KArticle;
import de.katho.kBorrow.data.KLender; import de.katho.kBorrow.data.KLender;
import de.katho.kBorrow.data.KLending; import de.katho.kBorrow.data.KLending;
@@ -92,7 +93,7 @@ public class SqliteConnector implements DbConnector {
return true; return true;
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); Util.showWarning(e);
return false; return false;
} }
} }
@@ -108,7 +109,7 @@ public class SqliteConnector implements DbConnector {
return true; return true;
} }
catch (SQLException e){ catch (SQLException e){
e.printStackTrace(); Util.showWarning(e);
return false; return false;
} }
} }
@@ -201,7 +202,7 @@ public class SqliteConnector implements DbConnector {
return userArr; return userArr;
} }
catch (SQLException e){ catch (SQLException e){
e.printStackTrace(); Util.showWarning(e);
return null; return null;
} }
} }
@@ -221,7 +222,7 @@ public class SqliteConnector implements DbConnector {
return userArr; return userArr;
} }
catch (SQLException e){ catch (SQLException e){
e.printStackTrace(); Util.showWarning(e);
return null; return null;
} }
} }
@@ -241,7 +242,7 @@ public class SqliteConnector implements DbConnector {
return artArr; return artArr;
} }
catch (SQLException ex){ catch (SQLException ex){
ex.printStackTrace(); Util.showWarning(ex);
return null; return null;
} }
} }
@@ -261,7 +262,7 @@ public class SqliteConnector implements DbConnector {
return artArr; return artArr;
} }
catch(SQLException ex){ catch(SQLException ex){
ex.printStackTrace(); Util.showWarning(ex);
return null; return null;
} }
} }
@@ -281,7 +282,7 @@ public class SqliteConnector implements DbConnector {
return lendArr; return lendArr;
} }
catch(SQLException ex){ catch(SQLException ex){
ex.printStackTrace(); Util.showWarning(ex);
return null; return null;
} }
} }
@@ -302,7 +303,7 @@ public class SqliteConnector implements DbConnector {
return lendingArr; return lendingArr;
} }
catch(SQLException e){ catch(SQLException e){
e.printStackTrace(); Util.showWarning(e);
return lendingArr; return lendingArr;
} }
} }
@@ -323,7 +324,7 @@ public class SqliteConnector implements DbConnector {
return lendingArr; return lendingArr;
} }
catch(SQLException e){ catch(SQLException e){
e.printStackTrace(); Util.showWarning(e);
return lendingArr; return lendingArr;
} }
} }
@@ -345,7 +346,7 @@ public class SqliteConnector implements DbConnector {
return 0; return 0;
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); Util.showWarning(e);
return 1; return 1;
} }
} }
@@ -361,7 +362,7 @@ public class SqliteConnector implements DbConnector {
return 0; return 0;
} }
catch(SQLException e){ catch(SQLException e){
e.printStackTrace(); Util.showWarning(e);
return 1; return 1;
} }
} }
@@ -377,7 +378,7 @@ public class SqliteConnector implements DbConnector {
return true; return true;
} }
catch (SQLException e){ catch (SQLException e){
e.printStackTrace(); Util.showWarning(e);
return false; return false;
} }
} }
@@ -393,7 +394,7 @@ public class SqliteConnector implements DbConnector {
return 0; return 0;
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); Util.showWarning(e);
return 1; return 1;
} }
} }
@@ -408,7 +409,7 @@ public class SqliteConnector implements DbConnector {
return 0; return 0;
} }
catch (SQLException e){ catch (SQLException e){
e.printStackTrace(); Util.showWarning(e);
return 1; return 1;
} }
} }
@@ -424,31 +425,46 @@ public class SqliteConnector implements DbConnector {
return 0; return 0;
} }
catch(SQLException e){ catch(SQLException e){
e.printStackTrace(); Util.showWarning(e);
return 1; return 1;
} }
} }
/** /**
* Erstellt eine neue Ausleihe.
* *
* @return Status-Code: *
* 0: Erfolg * @return R<>ckgabewert ist ein Array mit zwei Werten.
* 1: SQL-Fehler *
* 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{ try{
Statement st = connection.createStatement(); Statement st = connection.createStatement();
String query = "INSERT INTO lending (article_id, user_id, lender_id, start_date, expected_end_date ) " String query = "INSERT INTO lending (article_id, user_id, lender_id, start_date, expected_end_date ) "
+ "VALUES ("+pArtId+", "+pUId+", "+pLId+", '"+pStartDate+"', '"+pEstEndDate+"');" + "VALUES ("+pArtId+", "+pUId+", "+pLId+", '"+pStartDate+"', '"+pEstEndDate+"');"
+ "UPDATE article SET is_free = 0 WHERE id = "+pArtId+";"; + "UPDATE article SET is_free = 0 WHERE id = "+pArtId+";";
st.executeUpdate(query); 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){ catch(SQLException e){
e.printStackTrace(); Util.showWarning(e);
return 1; return new int[]{1,0};
} }
} }
@@ -462,7 +478,7 @@ public class SqliteConnector implements DbConnector {
return true; return true;
} }
catch(SQLException e){ catch(SQLException e){
e.printStackTrace(); Util.showWarning(e);
return false; return false;
} }
} }
@@ -478,7 +494,7 @@ public class SqliteConnector implements DbConnector {
return 0; return 0;
} }
catch(SQLException e){ catch(SQLException e){
e.printStackTrace(); Util.showWarning(e);
return 1; return 1;
} }
@@ -495,7 +511,7 @@ public class SqliteConnector implements DbConnector {
return 0; return 0;
} }
catch(SQLException e){ catch(SQLException e){
e.printStackTrace(); Util.showWarning(e);
return 1; return 1;
} }
} }

View File

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

View File

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

@@ -72,6 +72,13 @@ public class UserListModel extends AbstractListModel<String> implements ComboBox
return -1; return -1;
} }
public KUser getUserById(int pId){
for (KUser elem : data){
if(elem.getId() == pId) return elem;
}
return null;
}
} }