Compare commits
2 Commits
issue#2
...
#12_pdf_ge
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
102a46428b | ||
|
|
831d3bda09 |
@@ -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>
|
||||||
|
|||||||
@@ -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
BIN
lib/pdfbox-app-1.8.7.jar
Normal file
Binary file not shown.
@@ -108,4 +108,8 @@ public class Settings {
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getSettingsDir(){
|
||||||
|
return filePath;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
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;
|
||||||
|
|
||||||
public class Util {
|
public class Util {
|
||||||
public static String getCurrentDate(){
|
public static String getCurrentDate(){
|
||||||
@@ -10,4 +12,17 @@ public class Util {
|
|||||||
|
|
||||||
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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -62,16 +80,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){
|
||||||
|
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) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -430,25 +430,40 @@ public class SqliteConnector implements DbConnector {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* 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();
|
e.printStackTrace();
|
||||||
return 1;
|
return new int[]{1,0};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,9 @@ import org.jdesktop.swingx.JXErrorPane;
|
|||||||
import org.jdesktop.swingx.error.ErrorInfo;
|
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.sql.SQLException;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@@ -53,6 +55,16 @@ public class MainWindow {
|
|||||||
frame.setBounds(100, 100, 600, 500);
|
frame.setBounds(100, 100, 600, 500);
|
||||||
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||||
|
|
||||||
|
// 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 {
|
try {
|
||||||
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
|
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
|
||||||
|
|
||||||
@@ -73,7 +85,7 @@ public class MainWindow {
|
|||||||
|
|
||||||
tabbedPane = new JTabbedPane(JTabbedPane.TOP);
|
tabbedPane = new JTabbedPane(JTabbedPane.TOP);
|
||||||
frame.getContentPane().add(this.tabbedPane, BorderLayout.CENTER);
|
frame.getContentPane().add(this.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));
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user