*** empty log message ***
[thera-pi.git] / Reha / src / org / therapi / reha / patient / Dokumentation.java
blobb5da9cf1a6ef90b1b7984f0ef44553e818a4b945
1 package org.therapi.reha.patient;
6 import generalSplash.RehaSplash;
7 import geraeteInit.ScannerUtil;
8 import hauptFenster.Reha;
10 import java.awt.AlphaComposite;
11 import java.awt.BorderLayout;
12 import java.awt.Color;
13 import java.awt.Component;
14 import java.awt.Dimension;
15 import java.awt.FlowLayout;
16 import java.awt.Font;
17 import java.awt.Graphics;
18 import java.awt.Graphics2D;
19 import java.awt.Image;
20 import java.awt.MediaTracker;
21 import java.awt.Point;
22 import java.awt.Toolkit;
23 import java.awt.event.ActionEvent;
24 import java.awt.event.ActionListener;
25 import java.awt.event.KeyAdapter;
26 import java.awt.event.KeyEvent;
27 import java.awt.event.MouseAdapter;
28 import java.awt.event.MouseEvent;
29 import java.awt.event.MouseListener;
30 import java.awt.image.BufferedImage;
31 import java.beans.PropertyChangeEvent;
32 import java.beans.PropertyChangeListener;
33 import java.io.BufferedReader;
34 import java.io.File;
35 import java.io.FileNotFoundException;
36 import java.io.FileOutputStream;
37 import java.io.IOException;
38 import java.io.InputStream;
39 import java.io.InputStreamReader;
40 import java.net.MalformedURLException;
41 import java.sql.ResultSet;
42 import java.sql.SQLException;
43 import java.sql.Statement;
44 import java.util.Arrays;
45 import java.util.HashMap;
46 import java.util.List;
47 import java.util.Map;
48 import java.util.Vector;
50 import javax.imageio.ImageIO;
51 import javax.swing.BorderFactory;
52 import javax.swing.ImageIcon;
53 import javax.swing.JButton;
54 import javax.swing.JComboBox;
55 import javax.swing.JComponent;
56 import javax.swing.JFileChooser;
57 import javax.swing.JLabel;
58 import javax.swing.JList;
59 import javax.swing.JOptionPane;
60 import javax.swing.JPanel;
61 import javax.swing.JScrollPane;
62 import javax.swing.JToolBar;
63 import javax.swing.ListSelectionModel;
64 import javax.swing.event.ListSelectionEvent;
65 import javax.swing.event.ListSelectionListener;
66 import javax.swing.event.TableModelEvent;
67 import javax.swing.event.TableModelListener;
68 import javax.swing.filechooser.FileFilter;
69 import javax.swing.table.DefaultTableModel;
70 import javax.swing.table.TableCellEditor;
71 import javax.swing.table.TableCellRenderer;
73 import jxTableTools.TableTool;
74 import oOorgTools.OOTools;
76 import org.jdesktop.swingworker.SwingWorker;
77 import org.jdesktop.swingx.JXPanel;
78 import org.jdesktop.swingx.JXTable;
79 import org.jdesktop.swingx.decorator.HighlighterFactory;
80 import org.jdesktop.swingx.renderer.DefaultTableRenderer;
81 import org.jdesktop.swingx.renderer.IconValues;
82 import org.jdesktop.swingx.renderer.MappedValue;
83 import org.jdesktop.swingx.renderer.StringValues;
85 import patientenFenster.KeinRezept;
86 import patientenFenster.MyAccessory;
87 import rechteTools.Rechte;
88 import CommonTools.ExUndHop;
89 import CommonTools.SqlInfo;
90 import systemEinstellungen.SystemConfig;
91 import CommonTools.Colors;
92 import CommonTools.FileTools;
93 import systemTools.GrafikTools;
94 import systemTools.IconListRenderer;
95 import CommonTools.JCompTools;
96 import terminKalender.DatFunk;
97 import uk.co.mmscomputing.device.scanner.Scanner;
98 import uk.co.mmscomputing.device.scanner.ScannerDevice;
99 import uk.co.mmscomputing.device.scanner.ScannerIOException;
100 import uk.co.mmscomputing.device.scanner.ScannerIOMetadata;
101 import uk.co.mmscomputing.device.scanner.ScannerListener;
102 import uk.co.mmscomputing.device.twain.TwainConstants;
103 import uk.co.mmscomputing.device.twain.TwainIOMetadata;
104 import uk.co.mmscomputing.device.twain.TwainImageLayout;
105 import uk.co.mmscomputing.device.twain.TwainSource;
106 import ag.ion.bion.officelayer.application.IOfficeApplication;
107 import ag.ion.bion.officelayer.document.IDocument;
108 import ag.ion.bion.officelayer.event.IDocumentEvent;
109 import ag.ion.bion.officelayer.event.IDocumentListener;
110 import ag.ion.bion.officelayer.event.IEvent;
111 import ag.ion.bion.officelayer.spreadsheet.ISpreadsheetDocument;
112 import ag.ion.bion.officelayer.text.ITextDocument;
114 import com.jgoodies.forms.builder.PanelBuilder;
115 import com.jgoodies.forms.layout.CellConstraints;
116 import com.jgoodies.forms.layout.FormLayout;
117 import com.lowagie.text.Document;
118 import com.lowagie.text.DocumentException;
119 import com.lowagie.text.PageSize;
120 import com.lowagie.text.Rectangle;
121 import com.lowagie.text.pdf.PdfCopy;
122 import com.lowagie.text.pdf.PdfReader;
123 import com.lowagie.text.pdf.PdfWriter;
124 import com.mysql.jdbc.PreparedStatement;
126 import dialoge.ToolsDialog;
128 public class Dokumentation extends JXPanel implements ActionListener, TableModelListener, PropertyChangeListener, ScannerListener{
132 private static final long serialVersionUID = 1L;
133 //public static Dokumentation doku = null;
134 JXPanel leerPanel = null;
135 //JXPanel vollPanel = null;
136 JXPanel vollPanel = null;
137 JXPanel wechselPanel = null;
138 public JLabel anzahlDokus= null;
139 //public JLabel anzahlRezepte= null;
140 public String aktPanel = "";
141 public JXTable tabdokus= null;
142 public MyDoku2TableModel dtblm;
143 public TableCellEditor tbl = null;
144 //public boolean rezneugefunden = false;
145 //public boolean neuDlgOffen = false;
146 //public String[] indphysio = null;
147 //public String[] indergo = null;
148 //public String[] indlogo = null;
149 public JXPanel jpan1 = null;
150 public JButton[] dokubut = {null,null,null,null,null,null};
151 public JButton[] pmbut = {null,null,null,null,null};
152 public static boolean inDokuDaten = false;
153 public JComboBox seitengroesse = null;
154 public JComboBox aufloesung = null;
155 public JComboBox farbe = null;
156 public Vector<String> LabName = new Vector<String>();
157 int bildnummer=0;
158 public Vector<String>vecBilderPfad = new Vector<String>();
159 public Vector<String>vecBilderFormat = new Vector<String>();
160 public Vector<String>vecPdfPfad = new Vector<String>();
161 public Vector<String>vecBilderAktion = new Vector<String>();
162 public Vector<JLabel>Labels = new Vector<JLabel>();
163 public JXPanel bilderPan = null;
164 public JScrollPane bildscroll = null;
165 public JLabel[] infolab = {null,null,null,null,null};
166 public JLabel[] infolabLeer = {null,null,null,null,null};
167 public MouseListener mlist = null;
168 public boolean deviceinstalled = false;
169 public boolean scanaktiv = false;
170 public int aktivesBild = 0;
171 public JXPanel plusminus;
172 public JPanel leerInfo = null;
173 public String commonName = "";
174 public String lastPath = null;
175 public RehaSplash rehaSplash = null;
176 public ImageIcon[] tabIcons = {null,null,null,null};
177 public String aktion = "";
178 public String quelle = "";
179 public String nameOOorgDokuNeu;
180 public ImageIcon pdfplus;
181 public ImageIcon oowriterplus;
182 public ImageIcon oocalcplus;
184 //public JRtaTextField annika = null;
185 Scanner scanner;
186 public Dokumentation(){
187 super();
188 //doku = this;
189 scanaktiv = (SystemConfig.hmDokuScanner.get("aktivieren").trim().equals("1") ? true : false );
190 setOpaque(false);
191 setLayout(new BorderLayout());
192 /********zuerst das Leere Panel basteln**************/
193 leerPanel = new KeinRezept("noch keine Dokumentation angelegt für diesen Patient");
194 leerPanel.setName("leerpanel");
195 leerPanel.setOpaque(false);
196 leerInfo = getInfoPanelLeer();
197 leerPanel.add(leerInfo,BorderLayout.SOUTH);
199 /********dann das volle**************/
200 JXPanel allesrein = new JXPanel(new BorderLayout());
201 allesrein.setOpaque(false);
202 allesrein.setBorder(null);
204 FormLayout lay = new FormLayout("5dlu,fill:0:grow(1.00),0dlu",
205 "0dlu,p,2dlu,p,2dlu,fill:0:grow(1.00),2dlu");
206 CellConstraints cc = new CellConstraints();
207 allesrein.setLayout(lay);
209 wechselPanel = new JXPanel(new BorderLayout());
210 wechselPanel.setOpaque(false);
211 wechselPanel.setBorder(null);
212 wechselPanel.add(leerPanel,BorderLayout.CENTER);
213 aktPanel = "leerPanel";
215 allesrein.add(getToolbar(),cc.xy(2, 2));
217 allesrein.add(wechselPanel,cc.xy(2, 6));
219 add(JCompTools.getTransparentScrollPane(allesrein),BorderLayout.CENTER);
220 validate();
222 new SwingWorker<Void,Void>(){
224 @Override
225 protected Void doInBackground() throws Exception {
226 vollPanel = new JXPanel();
228 FormLayout vplay = new FormLayout("fill:0:grow(0.60),5dlu,fill:0:grow(0.40),5dlu",
229 "p,2dlu,100dlu,0dlu,fill:0:grow(1.00),0dlu");
230 CellConstraints vpcc = new CellConstraints();
231 vollPanel.setLayout(vplay);
232 vollPanel.setOpaque(false);
233 vollPanel.setBorder(null);
235 Font font = new Font("Tahoma",Font.PLAIN,11);
236 anzahlDokus = new JLabel("Anzahl gespeicherter Dokumentationen: 0");
237 anzahlDokus.setFont(font);
238 vollPanel.add(anzahlDokus,vpcc.xy(1,1));
240 vollPanel.add(getTabelle(),vpcc.xywh(1,3,3,1));
243 jpan1 = new DokuPanel();
244 jpan1.setLayout(new BorderLayout());
245 jpan1.setOpaque(false);
246 jpan1.add(getToolBereich(),BorderLayout.CENTER);
247 vollPanel.add(jpan1,vpcc.xyw(1,5,3));
248 jpan1.validate();
250 new SwingWorker<Void,Void>(){
251 @Override
252 protected Void doInBackground() throws Exception {
253 if(scanaktiv){
254 scanStarten();
256 setzeListener();
257 Image ico = SystemConfig.hmSysIcons.get("pdf").getImage().getScaledInstance(26,26, Image.SCALE_SMOOTH);
258 pdfplus = new ImageIcon(ico);
259 ico = SystemConfig.hmSysIcons.get("ooowriter").getImage().getScaledInstance(26,26, Image.SCALE_SMOOTH);
260 oowriterplus = new ImageIcon(ico);
261 ico = SystemConfig.hmSysIcons.get("ooocalc").getImage().getScaledInstance(26,26, Image.SCALE_SMOOTH);
262 oocalcplus = new ImageIcon(ico);
264 return null;
266 }.execute();
269 return null;
271 }.execute();
280 public JXPanel getToolBereich(){
281 JXPanel tbereich = new JXPanel();
282 tbereich.setOpaque(false);
283 FormLayout lay = new FormLayout("0dlu,fill:0:grow(1.00),0dlu","0dlu,fill:60:grow(1.00),1dlu,42dlu");
284 CellConstraints cc = new CellConstraints();
285 tbereich.setLayout(lay);
287 tbereich.add(getBildPanel(),cc.xy(2,2));
289 tbereich.add(getInfoPanel(),cc.xy(2,4,CellConstraints.DEFAULT,CellConstraints.BOTTOM));
290 tbereich.validate();
291 return tbereich;
293 public JScrollPane getBildPanel(){
294 bilderPan = new JXPanel(new FlowLayout(FlowLayout.LEFT));
295 //dummy1.setBackground(Color.RED);
296 bilderPan.setOpaque(false);
297 JScrollPane bildscroll = JCompTools.getTransparentScrollPane(bilderPan);
298 bildscroll.validate();
299 return bildscroll;
301 public JPanel getInfoPanel(){ // 1 2 3 4 5 6 7 8 9 10
302 FormLayout lay = new FormLayout("2dlu,p,25dlu,right:max(50dlu;p),2dlu,p,20dlu,right:max(50dlu;p),2dlu,p",
303 // 1 2 3 4 5 6 7 8 9
304 " 0dlu,p,0dlu, p,0dlu,p,0dlu,p, 0dlu");
305 CellConstraints cc = new CellConstraints();
306 PanelBuilder pb = new PanelBuilder(lay);
307 //JPanel dummy2 = new JXPanel();
308 //dummy2.setBackground(Color.RED);
309 Font fon = new Font("Tahoma",Font.BOLD,10);
310 JLabel jlab = new JLabel("Geräte-Info");
311 jlab.setFont(new Font("Tahoma",Font.BOLD,14));
312 jlab.setForeground(Color.BLUE);
313 pb.add(jlab,cc.xy(2,2));
314 pb.addLabel("aktives Gerät:",cc.xy(4, 4));
315 if(! scanaktiv){
316 infolab[0] = new JLabel("Scanner nicht aktiviert");
317 infolab[0].setFont(fon);
318 pb.add(infolab[0],cc.xy(6,4));
319 return pb.getPanel();
321 infolab[0] = new JLabel(SystemConfig.sDokuScanner);
322 infolab[0].setFont(fon);
323 pb.add(infolab[0],cc.xy(6,4));
324 pb.addLabel("Scanmodus:",cc.xy(4, 6));
325 infolab[1] = new JLabel(SystemConfig.hmDokuScanner.get("farben"));
326 infolab[1].setFont(fon);
327 pb.add(infolab[1],cc.xy(6,6));
328 pb.addLabel("Auflösung:",cc.xy(8, 4));
329 infolab[2] = new JLabel(SystemConfig.hmDokuScanner.get("aufloesung")+"dpi");
330 infolab[2].setFont(fon);
331 pb.add(infolab[2],cc.xy(10,4));
332 pb.addLabel("Seitenformat:",cc.xy(8, 6));
333 infolab[3] = new JLabel(SystemConfig.hmDokuScanner.get("seiten"));
334 infolab[3].setFont(fon);
335 pb.add(infolab[3],cc.xy(10,6));
336 pb.addLabel("Scannerdialog verwenden:",cc.xy(8, 8));
337 infolab[4] = new JLabel( (SystemConfig.hmDokuScanner.get("dialog").equals("1") ? "ja" : "nein"));
338 infolab[4].setFont(fon);
339 pb.add(infolab[4],cc.xy(10,8));
340 pb.getPanel().setOpaque(false);
341 pb.getPanel().setPreferredSize(new Dimension(500,100));
342 return pb.getPanel();
344 public JPanel getInfoPanelLeer(){ // 1 2 3 4 5 6 7 8 9 10
345 FormLayout lay = new FormLayout("2dlu,p,20dlu,right:max(50dlu;p),2dlu,p,20dlu,right:max(50dlu;p),2dlu,p",
346 // 1 2 3 4 5 6 7 8 9
347 "10dlu,p,5dlu,p,1dlu,p,1dlu,p,10dlu");
348 CellConstraints cc = new CellConstraints();
349 PanelBuilder pb = new PanelBuilder(lay);
350 Font fon = new Font("Tahoma",Font.BOLD,10);
351 JLabel jlab = new JLabel("Geräte-Info");
352 jlab.setFont(new Font("Tahoma",Font.BOLD,14));
353 jlab.setForeground(Color.BLUE);
354 pb.add(jlab,cc.xy(2,2));
355 pb.addLabel("aktives Gerät:",cc.xy(4, 4));
356 if(! scanaktiv){
357 infolabLeer[0] = new JLabel("Scanner nicht aktiviert");
358 infolabLeer[0].setFont(fon);
359 pb.add(infolabLeer[0],cc.xy(6,4));
360 return pb.getPanel();
362 infolabLeer[0] = new JLabel(SystemConfig.sDokuScanner);
363 infolabLeer[0].setFont(fon);
364 pb.add(infolabLeer[0],cc.xy(6,4));
365 pb.addLabel("Scanmodus:",cc.xy(4, 6));
366 infolabLeer[1] = new JLabel(SystemConfig.hmDokuScanner.get("farben"));
367 infolabLeer[1].setFont(fon);
368 pb.add(infolabLeer[1],cc.xy(6,6));
369 pb.addLabel("Auflösung:",cc.xy(8, 4));
370 infolabLeer[2] = new JLabel(SystemConfig.hmDokuScanner.get("aufloesung")+"dpi");
371 infolabLeer[2].setFont(fon);
372 pb.add(infolabLeer[2],cc.xy(10,4));
373 pb.addLabel("Seitenformat:",cc.xy(8, 6));
374 infolabLeer[3] = new JLabel(SystemConfig.hmDokuScanner.get("seiten"));
375 infolabLeer[3].setFont(fon);
376 pb.add(infolabLeer[3],cc.xy(10,6));
377 pb.addLabel("Scannerdialog verwenden:",cc.xy(8, 8));
378 infolabLeer[4] = new JLabel( (SystemConfig.hmDokuScanner.get("dialog").equals("1") ? "ja" : "nein"));
379 infolabLeer[4].setFont(fon);
380 pb.add(infolabLeer[4],cc.xy(10,8));
381 pb.getPanel().setOpaque(false);
382 pb.getPanel().setPreferredSize(new Dimension(500,100));
383 return pb.getPanel();
386 class DokuPanel extends JXPanel{
390 private static final long serialVersionUID = 1L;
391 ImageIcon hgicon;
392 int icx,icy;
393 AlphaComposite xac1 = null;
394 AlphaComposite xac2 = null;
395 DokuPanel(){
396 super();
397 setOpaque(false);
398 hgicon = SystemConfig.hmSysIcons.get("scannergross");
399 icx = hgicon.getIconWidth()/2;
400 icy = hgicon.getIconHeight()/2;
401 xac1 = AlphaComposite.getInstance(AlphaComposite.SRC_OVER,0.25f);
402 xac2 = AlphaComposite.getInstance(AlphaComposite.SRC_OVER,1.0f);
405 public void paintComponent( Graphics g ) {
406 super.paintComponent( g );
407 Graphics2D g2d = (Graphics2D)g;
409 if(hgicon != null){
410 g2d.setComposite(this.xac1);
411 g2d.drawImage(hgicon.getImage(), (getWidth()/3)-(icx+20) , (getHeight()/2)-(icy-40),null);
412 g2d.setComposite(this.xac2);
418 public JXPanel getTabelle(){
419 JXPanel dummypan = new JXPanel(new BorderLayout());
420 dummypan.setOpaque(false);
421 dummypan.setBorder(null);
422 //System.out.println("Image icon bei Tabellenerstellung = "+(SystemConfig.hmSysIcons.get("pdf")==null));
423 tabIcons[0]= SystemConfig.hmSysIcons.get("pdf");
424 tabIcons[1]= new ImageIcon(SystemConfig.hmSysIcons.get("ooowriter").getImage().getScaledInstance(22, 22, Image.SCALE_SMOOTH));
425 tabIcons[2]= new ImageIcon(SystemConfig.hmSysIcons.get("ooocalc").getImage().getScaledInstance(22, 22, Image.SCALE_SMOOTH));
427 dtblm = new MyDoku2TableModel();
428 String[] column = {"Doku-Id","Doku-Art","Titel","erfaßt am","von","","",""};
429 dtblm.setColumnIdentifiers(column);
430 tabdokus = new JXTable(dtblm);
431 tabdokus.setRowHeight(tabdokus.getRowHeight()+10);
432 tabdokus.setHighlighters(HighlighterFactory.createSimpleStriping(Colors.PiOrange.alpha(0.25f)));
433 tabdokus.setDoubleBuffered(true);
434 tabdokus.setEditable(false);
435 tabdokus.setSortable(false);
436 tabdokus.getColumn(0).setMaxWidth(50);
437 TableCellRenderer renderer = new DefaultTableRenderer(new MappedValue(StringValues.EMPTY, IconValues.ICON), JLabel.CENTER);
438 tabdokus.getColumn(1).setCellRenderer(renderer);
439 tabdokus.getColumn(1).setMaxWidth(50);
440 tabdokus.getColumn(2).setMinWidth(275);
441 tabdokus.getColumn(3).setMaxWidth(80);
442 //tabhistorie.getColumn(4).setMinWidth(0);
443 //tabhistorie.getColumn(4).setMaxWidth(0);
444 tabdokus.getColumn(5).setMinWidth(0);
445 tabdokus.getColumn(5).setMaxWidth(0);
446 tabdokus.getColumn(6).setMinWidth(0);
447 tabdokus.getColumn(6).setMaxWidth(0);
448 tabdokus.getColumn(7).setMinWidth(0);
449 tabdokus.getColumn(7).setMaxWidth(0);
451 tabdokus.validate();
452 tabdokus.setName("AktDoku");
453 tabdokus.setSelectionMode(0);
454 //tabaktrez.addPropertyChangeListener(this);
455 tabdokus.getSelectionModel().addListSelectionListener( new DokuListSelectionHandler());
456 tabdokus.addMouseListener(new MouseAdapter(){
457 public void mouseClicked(MouseEvent arg0) {
458 if(!Rechte.hatRecht(Rechte.Doku_open, true)){
459 return;
461 if(arg0.getClickCount()==2){
462 while(inDokuDaten){
463 try {
464 Thread.sleep(20);
465 } catch (InterruptedException e) {
466 // TODO Auto-generated catch block
467 e.printStackTrace();
471 int row = tabdokus.getSelectedRow();
472 /***********************/
473 if(! ((String)tabdokus.getValueAt(row, 7)).trim().equals("")){
474 setCursor(Reha.thisClass.wartenCursor);
475 String sid = (String)tabdokus.getValueAt(row, 6);
476 String sdatei = SystemConfig.hmVerzeichnisse.get("Temp")+"/"+(String)tabdokus.getValueAt(row, 7);
477 holeOorg(sdatei,sid);
478 return;
481 /***********************/
482 String sdatei = SystemConfig.hmVerzeichnisse.get("Temp")+"/pdf"+tabdokus.getValueAt(row, 0)+".pdf";
483 //System.out.println("Starte doku holen");
484 String sid = (String)tabdokus.getValueAt(row, 6);
485 File file = new File(sdatei);
486 if(file.exists()){
487 final String xdatei = sdatei;
488 new SwingWorker<Void,Void>(){
489 @Override
490 protected Void doInBackground() throws Exception {
491 Process process = new ProcessBuilder(SystemConfig.hmFremdProgs.get("AcrobatReader"),"",xdatei).start();
492 InputStream is = process.getInputStream();
493 InputStreamReader isr = new InputStreamReader(is);
494 BufferedReader br = new BufferedReader(isr);
495 //String line;
496 while ((br.readLine()) != null) {
497 //System.out.println(line);
499 is.close();
500 isr.close();
501 br.close();
503 return null;
506 }.execute();
507 }else{
508 setCursor(Reha.thisClass.wartenCursor);
510 final String xid = sid;
511 new SwingWorker<Void,Void>(){
512 @Override
513 protected Void doInBackground() throws Exception {
514 long zeit = System.currentTimeMillis();
515 return null;
518 }.execute();
520 holeDoku(sdatei,sid);
521 setCursor(Reha.thisClass.normalCursor);
526 tabdokus.addKeyListener(new KeyAdapter(){
527 public void keyPressed(KeyEvent arg0) {
528 if(arg0.getKeyCode()==10){
529 arg0.consume();
530 //neuanlageRezept(false,"");
532 if(arg0.getKeyCode()==27){
533 arg0.consume();
538 //tabaktrez.getSelectionModel().addListSelectionListener(this);
539 //dtblm.addTableModelListener(this);
540 //dummypan.setPreferredSize(new Dimension(0,100));
541 JScrollPane aktrezscr = JCompTools.getTransparentScrollPane((Component)tabdokus);
542 aktrezscr.validate();
543 aktrezscr.getVerticalScrollBar().setUnitIncrement(15);
544 dummypan.add(aktrezscr,BorderLayout.CENTER);
545 dummypan.validate();
546 return dummypan;
549 public void setzeDokuPanelAufNull(boolean aufnull){
550 if(aufnull){
551 if(aktPanel.equals("vollPanel")){
552 wechselPanel.remove(vollPanel);
553 wechselPanel.add(leerPanel);
554 aktPanel = "leerPanel";
555 try{
556 dokubut[2].setEnabled(false);
557 }catch(Exception ex ){}
558 wechselPanel.validate();
559 wechselPanel.repaint();
560 for(int i = 0; i < 4;i++){
561 //dokubut[i].setEnabled(false);
564 }else{
565 if(aktPanel.equals("leerPanel")){
566 wechselPanel.remove(leerPanel);
567 wechselPanel.add(vollPanel);
568 aktPanel = "vollPanel";
569 dokubut[1].setEnabled(true);
571 for(int i = 0; i < 4;i++){
572 //dokubut[i].setEnabled(true);
575 wechselPanel.validate();
576 wechselPanel.repaint();
580 ////////////////////////////
581 ////////////////////////////
582 //////////////////////////// Holt Doku aus der Doku-Datenbank
583 ////////////////////////////
584 private Dokumentation getInstance(){
585 return this;
587 public void holeOorg(String sdatei,String sid){
588 Statement stmt = null;;
589 ResultSet rs = null;
590 //int bilder = 0;
591 //System.out.println(sdatei);
593 try {
594 stmt = (Statement) Reha.thisClass.conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
595 ResultSet.CONCUR_UPDATABLE );
596 String test = "select dokublob from doku1 where id='"+sid+"'";
597 rs = (ResultSet) stmt.executeQuery(test);
598 if(rs.next()){
599 FileTools.ByteArray2File(rs.getBytes(1), sdatei);
601 final String xdatei = sdatei;
602 final String xid = sid;
603 new SwingWorker<Void,Void>(){
604 @Override
605 protected Void doInBackground() throws Exception {
606 try{
607 if(xdatei.toLowerCase().endsWith("odt")){
608 ITextDocument itext = new OOTools().starteWriterMitDatei(xdatei);
609 itext.addDocumentListener(new OoListener(Reha.officeapplication,xdatei,xid,getInstance()));
610 }else if(xdatei.toLowerCase().endsWith("ods")){
611 ISpreadsheetDocument ispread = new OOTools().starteCalcMitDatei(xdatei);
612 ispread.addDocumentListener(new OoListener(Reha.officeapplication,xdatei,xid,getInstance()));
614 }catch(Exception ex){
615 ex.printStackTrace();
617 Reha.thisClass.patpanel.dokumentation.setCursor(Reha.thisClass.normalCursor);
618 return null;
620 }.execute();
622 } catch (SQLException e) {
623 // TODO Auto-generated catch block
624 e.printStackTrace();
626 finally {
627 if (rs != null) {
628 try {
629 rs.close();
630 } catch (SQLException sqlEx) { // ignore }
631 rs = null;
634 if (stmt != null) {
635 try {
636 stmt.close();
637 } catch (SQLException sqlEx) { // ignore }
638 stmt = null;
647 public void holeDoku(String datei,String id){
648 Statement stmt = null;;
649 ResultSet rs = null;
650 //int bilder = 0;
652 try {
653 stmt = (Statement) Reha.thisClass.conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
654 ResultSet.CONCUR_UPDATABLE );
655 String test = "select dokublob from doku1 where id='"+id+"'";
656 rs = (ResultSet) stmt.executeQuery(test);
657 if(rs.next()){
658 FileTools.ByteArray2File(rs.getBytes(1), datei);
661 final String xdatei = datei;
662 new SwingWorker<Void,Void>(){
663 @Override
664 protected Void doInBackground() throws Exception {
665 Process process = new ProcessBuilder(SystemConfig.hmFremdProgs.get("AcrobatReader"),"",xdatei).start();
666 InputStream is = process.getInputStream();
667 InputStreamReader isr = new InputStreamReader(is);
668 BufferedReader br = new BufferedReader(isr);
669 //String line;
670 while ((br.readLine()) != null) {
671 //System.out.println(line);
673 is.close();
674 isr.close();
675 br.close();
677 return null;
680 }.execute();
683 } catch (SQLException e) {
684 // TODO Auto-generated catch block
685 e.printStackTrace();
687 finally {
688 if (rs != null) {
689 try {
690 rs.close();
691 } catch (SQLException sqlEx) { // ignore }
692 rs = null;
695 if (stmt != null) {
696 try {
697 stmt.close();
698 } catch (SQLException sqlEx) { // ignore }
699 stmt = null;
705 /*****************************
712 * */
713 public JToolBar getToolbar(){
714 JToolBar jtb = new JToolBar();
715 jtb.setRollover(true);
716 jtb.setBorder(null);
717 jtb.setOpaque(false);
719 dokubut[5] = new JButton();
720 dokubut[5].setIcon(SystemConfig.hmSysIcons.get("delete"));
721 dokubut[5].setToolTipText("Dokumentation löschen");
722 dokubut[5].setActionCommand("delete");
723 dokubut[5].setEnabled(false);
724 dokubut[5].addActionListener(this);
725 jtb.add(dokubut[5]);
727 jtb.addSeparator(new Dimension(10,0));
728 dokubut[2] = new JButton();
729 dokubut[2].setIcon(SystemConfig.hmSysIcons.get("abbruch"));
730 dokubut[2].setToolTipText("Kompletten Vorgang abbrechen");
731 dokubut[2].setActionCommand("Dokuabbruch");
732 dokubut[2].addActionListener(this);
733 dokubut[2].setEnabled(false);
734 jtb.add(dokubut[2]);
736 jtb.addSeparator(new Dimension(40,0));
738 dokubut[0] = new JButton();
739 dokubut[0].setIcon(SystemConfig.hmSysIcons.get("scanner"));
740 dokubut[0].setToolTipText("Papierbericht einscannen");
741 dokubut[0].setActionCommand("scannen");
742 dokubut[0].setEnabled(false);
743 dokubut[0].addActionListener(this);
744 jtb.add(dokubut[0]);
746 jtb.addSeparator(new Dimension(40,0));
747 dokubut[1] = new JButton();
748 dokubut[1].setIcon(SystemConfig.hmSysIcons.get("tools"));
749 dokubut[1].setToolTipText("Scannereinstellungen ändern");
750 dokubut[1].setActionCommand("werkzeuge");
751 dokubut[1].addActionListener(this);
752 jtb.add(dokubut[1]);
755 dokubut[1] = new JButton();
756 dokubut[1].setIcon(SystemConfig.hmSysIcons.get("tools"));
757 dokubut[1].setToolTipText("Scannereinstellungen ändern");
758 dokubut[1].setActionCommand("scanedit");
759 dokubut[1].addActionListener(this);
760 jtb.add(dokubut[1]);
762 jtb.addSeparator(new Dimension(40,0));
763 dokubut[3] = new JButton();
764 dokubut[3].setIcon(SystemConfig.hmSysIcons.get("camera"));
765 dokubut[3].setToolTipText("Photo von DigiCam in Doku aufnehmen");
766 dokubut[3].setActionCommand("Digicam");
767 dokubut[3].addActionListener(this);
768 dokubut[3].setEnabled(false);
769 jtb.add(dokubut[3]);
772 dokubut[4] = new JButton();
773 dokubut[4].setIcon(SystemConfig.hmSysIcons.get("openoffice26"));
774 dokubut[4].setToolTipText("OpenOffice-Dokument (Writer oder Calc) in Doku aufnehmen");
775 dokubut[4].setActionCommand("Oofiles");
776 dokubut[4].addActionListener(this);
777 dokubut[4].setEnabled(false);
778 jtb.add(dokubut[4]);
788 JLabel jlab = new JLabel("Patienten-Nummer eingeben ");
789 jlab.setOpaque(false);
790 jtb.add(jlab);
791 JXPanel tfp = new JXPanel(new FlowLayout(FlowLayout.LEFT));
792 tfp.setOpaque(false);
793 annika = new JRtaTextField("ZAHLEN",true);
794 annika.setPreferredSize(new Dimension(100,25));
795 tfp.add(annika);
796 jtb.add(tfp);
799 if(!scanaktiv){
800 dokubut[0].setEnabled(false);
801 dokubut[1].setEnabled(false);
802 dokubut[2].setEnabled(false);
806 for(int i = 0; i < 4;i++){
807 //dokubut[i].setEnabled(false);
811 return jtb;
817 public void macheTabelle(Vector<?> vec){
818 if(vec.size()> 0){
819 dtblm.addRow(vec);
820 }else{
821 dtblm.setRowCount(0);
822 tabdokus.validate();
826 /******************
830 /******************
834 @Override
835 public void actionPerformed(ActionEvent arg0) {
836 // TODO Auto-generated method stub
837 String cmd = arg0.getActionCommand();
838 if(cmd.equals("arztbericht")){
840 }else if(cmd.equals("scannen")){
841 if(!Rechte.hatRecht(Rechte.Doku_scannen, true)){
842 return;
844 if(SystemConfig.sDokuScanner.equals("Scanner nicht aktiviert!")){
845 return;
848 if(annika.getText().trim().equals("")){
849 JOptionPane.showMessageDialog(null, "Bitte vor dem Scannen die Patientennummer eingeben");
850 return;
853 if(aktPanel.equals("leerPanel")){
854 this.setzeDokuPanelAufNull(false);
856 try {
857 setzeDokuPanelAufNull(false);
858 // vollpanel.validate();
859 if(scanner==null){
860 //System.out.println("Neustart des Scannersystems erforderlich");
861 scanStarten();
863 setCursor(Reha.thisClass.wartenCursor);
864 scanner.acquire();
865 aktion = "bildgescannt";
866 } catch (ScannerIOException e) {
867 // TODO Auto-generated catch block
868 //System.out.println("***************Fehler beim scannen*******************");
869 setCursor(Reha.thisClass.normalCursor);
870 e.printStackTrace();
873 return;
874 }else if(cmd.equals("scanedit")){
875 if(!Rechte.hatRecht(Rechte.Doku_scannen, true)){
876 return;
878 Point pt = ((JComponent)arg0.getSource()).getLocationOnScreen();
879 final Point ptx = pt;
880 new SwingWorker<Void,Void>(){
881 @Override
882 protected Void doInBackground() throws Exception {
883 ScannerUtil su = new ScannerUtil(new Point(ptx.x,ptx.y+32));
884 su.setModal(true);
885 su.setVisible(true);
886 try {
887 Thread.sleep(20);
888 } catch (InterruptedException e) {
889 e.printStackTrace();
891 updateInfoLab();
893 return null;
895 }.execute();
898 return;
899 }else if(cmd.equals("Dokusave")){
900 //rehaSplash = new RehaSplash(null,"Erstelle Dokumentation");
901 //rehaSplash.setVisible(true);
902 String value = (String)JOptionPane.showInputDialog(null,
903 "Bitte einen Titel für die Dokumentation eingeben\n\n", "Benutzereingabe erforderlich....", JOptionPane.PLAIN_MESSAGE, null,
904 null, "Eingescannte Therapeuten-Doku");
905 if( (value == null) || (value.length()==0)){
906 JOptionPane.showMessageDialog(null, "Kein Titel - kein speichern. Ganz einfach!!");
907 return;
910 if(annika.getText().trim().equals("")){
911 JOptionPane.showMessageDialog(null, "Ohne Patientennummer kann nicht gespeichert werden");
912 return;
915 doDokusave(value);
917 //rehaSplash.dispose();
918 //rehaSplash = null;
919 return;
920 }else if(cmd.equals("Dokudelete")){
921 if(!Rechte.hatRecht(Rechte.Doku_scannen, true)){
922 return;
924 doDokudelete();
925 return;
926 }else if(cmd.equals("Dokuabbruch")){
927 loescheBilderPan();
928 return;
929 }else if(cmd.equals("Digicam")){
930 ladeJpeg();
931 new SwingWorker<Void,Void>(){
932 @Override
933 protected Void doInBackground() throws Exception {
935 return null;
937 }.execute();
938 return;
939 }else if(cmd.equals("delete")){
940 if(!Rechte.hatRecht(Rechte.Doku_delete, true)){
941 return;
943 new SwingWorker<Void,Void>(){
944 @Override
945 protected Void doInBackground() throws Exception {
946 int row = tabdokus.getSelectedRow();
947 if(row >= 0){
949 String sdokuid = (String)tabdokus.getValueAt(row, 0);
950 int frage = JOptionPane.showConfirmDialog(null, "Soll die Dokumentation mit der ID-"+sdokuid+" wirklich gelöscht werden?","Achtung wichtige Benutzeranfrage",JOptionPane.YES_NO_OPTION);
951 if(frage == JOptionPane.NO_OPTION){
952 return null;
954 String scmd = "delete from doku1 where dokuid='"+sdokuid+"'";
955 new ExUndHop().setzeStatement(scmd);
956 TableTool.loescheRow(tabdokus, row);
957 if(tabdokus.getRowCount()==0){
958 if(plusminus != null){
959 loescheBilderPan();
961 setzeDokuPanelAufNull(true);
962 dokubut[5].setEnabled(false);
964 try{
965 Reha.thisClass.patpanel.getTab().setTitleAt(3,macheHtmlTitel(tabdokus.getRowCount(),"Dokumentation"));
966 }catch(Exception extiming){
967 System.out.println("Timingprobleme beim setzen des Reitertitels - Reiter: Dokumentation");
970 return null;
972 }.execute();
973 }else if(cmd.equals("Oofiles")){
974 setCursor(Reha.thisClass.wartenCursor);
975 ladeOoDocs();
976 setCursor(Reha.thisClass.normalCursor);
977 new SwingWorker<Void,Void>(){
978 @Override
979 protected Void doInBackground() throws Exception {
982 return null;
984 }.execute();
985 }else if(cmd.equals("werkzeuge")){
986 new ToolsDlgDokumentation("",dokubut[1].getLocationOnScreen());
989 private void doScanEdit(Point pt){
990 final Point ptx = pt;
991 new SwingWorker<Void,Void>(){
992 @Override
993 protected Void doInBackground() throws Exception {
994 ScannerUtil su = new ScannerUtil(new Point(ptx.x,ptx.y+32));
995 su.setModal(true);
996 su.setVisible(true);
997 try {
998 Thread.sleep(20);
999 } catch (InterruptedException e) {
1000 e.printStackTrace();
1002 updateInfoLab();
1004 return null;
1006 }.execute();
1009 private void doHolePhoto(){
1010 ladeJpeg();
1012 private void doHoleOO(){
1013 setCursor(Reha.thisClass.wartenCursor);
1014 ladeOoDocs();
1015 setCursor(Reha.thisClass.normalCursor);
1017 private void ladeOoDocs(){
1018 String[] bild = oeffneBild(new String[] {"odt","ods","???"},false);
1019 if(bild.length > 0){
1020 String bildpfad = bild[1].replaceAll("\\\\", "/");
1021 if( (bildpfad.toLowerCase().endsWith(".odt")) ||
1022 (bildpfad.toLowerCase().endsWith(".ods")) ){
1023 try {
1024 Reha.thisClass.patpanel.dokumentation.setCursor(Reha.thisClass.wartenCursor);
1025 FileTools.copyFile(new File(bildpfad), new File(SystemConfig.hmVerzeichnisse.get("Temp")+"/"+bild[0]), 4096*4, true);
1026 File f = new File(SystemConfig.hmVerzeichnisse.get("Temp")+"/"+bild[0]);
1027 if(f.exists()){
1028 int dokuid = SqlInfo.erzeugeNummer("doku");
1029 int pat_int = Integer.valueOf(Reha.thisClass.patpanel.aktPatID); //Integer.valueOf(annika.getText().trim());
1032 speichernOoDocs(
1033 dokuid,
1034 pat_int,
1035 SystemConfig.hmVerzeichnisse.get("Temp")+"/"+bild[0],
1036 (bildpfad.toLowerCase().endsWith(".odt") ? 1 : 2),
1037 new String[] {DatFunk.sDatInSQL(DatFunk.sHeute()),bild[0],Reha.aktUser,""},
1038 true);
1040 this.holeDokus(Reha.thisClass.patpanel.aktPatID,Integer.toString(dokuid));
1041 setCursor(Reha.thisClass.normalCursor);
1044 } catch (IOException e) {
1045 // TODO Auto-generated catch block
1046 e.printStackTrace();
1047 } catch (Exception e) {
1048 // TODO Auto-generated catch block
1049 e.printStackTrace();
1052 }else{
1053 JOptionPane.showMessageDialog(null,"Es werden ausschliesslich OpenOffice Writer und Calc Dateien unterstützt");
1054 return;
1059 private void ladeJpeg(){
1060 String[] bild = oeffneBild(new String[] {"jpg","xxx","xxx"},true);
1061 if(bild.length > 0){
1062 //System.out.println(bild[0]);
1063 //System.out.println(bild[1].replaceAll("\\\\", "/"));
1064 String bildpfad = bild[1].replaceAll("\\\\", "/");
1065 if(! bildpfad.toLowerCase().endsWith(".jpg")){
1066 JOptionPane.showMessageDialog(null,"Es werden ausschliesslich JPEG Bilder unterstützt");
1067 return;
1069 if(aktPanel.equals("leerPanel")){
1070 this.setzeDokuPanelAufNull(false);
1073 //BufferedImage img = null;
1074 try {
1075 setCursor(Reha.thisClass.wartenCursor);
1076 commonName = Long.toString(System.currentTimeMillis());
1077 String fname = "scan"+commonName+".jpg";
1078 Image img2 = null;
1080 img = ImageIO.read(new File( bildpfad));
1081 img.flush();
1082 Image img2 = null;
1083 img2 = img.getScaledInstance(50, 65, Image.SCALE_FAST);
1084 img.flush();
1085 img = null;
1087 try {
1088 img2 = Toolkit.getDefaultToolkit()
1089 .getImage(bildpfad).getScaledInstance(50, 65, Image.SCALE_FAST);
1090 MediaTracker mediaTracker = new MediaTracker(this);
1091 mediaTracker.addImage(img2, 0);
1092 mediaTracker.waitForID(0);
1093 } catch (Exception ie) {
1097 FileTools.copyFile(new File(bildpfad), new File(SystemConfig.hmVerzeichnisse.get("Temp")+"/"+fname), 4096*5, false);
1099 //final String pfad = bild[1];
1100 /*new Thread(){
1101 public void run(){
1103 quelle = "bildgeladen";
1104 //vecBilderAktion.add("jpggeladen");
1105 aktion = "bildgeladen";
1106 zeigeBilder(img2,SystemConfig.hmVerzeichnisse.get("Temp")+"/"+fname,commonName);
1109 }.start();
1111 img2 = null;
1112 Runtime r = Runtime.getRuntime();
1113 r.gc();
1114 r.freeMemory();
1115 //System.out.println("Freier Speicher "+freeMem);
1116 setCursor(Reha.thisClass.normalCursor);
1118 } catch (IOException e) {
1119 // TODO Auto-generated catch block
1120 setCursor(Reha.thisClass.normalCursor);
1121 e.printStackTrace();
1122 } catch (OutOfMemoryError ome) {
1123 setCursor(Reha.thisClass.normalCursor);
1124 String cmd = "Die Bilder sind (zusammen) zu groß für Arbeitsspeicher.\nSpeichern Sie jedes Bild einzeln als Dokumentation";
1125 JOptionPane.showMessageDialog(null, cmd);
1126 //System.err.println("Bild zu gro� f�r Arbeitsspeicher.\nSpeichern Sie nur dieses Bild in einer eigenen Dokumentation");
1130 private String[] oeffneBild(String[] pattern,boolean mitVorschau){
1131 String[] sret = {};
1132 JFileChooser chooser = new JFileChooser("Verzeichnis wählen");
1133 chooser.setDialogType(JFileChooser.OPEN_DIALOG);
1134 chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
1135 if(mitVorschau){
1136 chooser.setAccessory(new MyAccessory(chooser));
1139 final String[] xpattern = pattern;
1140 chooser.addChoosableFileFilter(new FileFilter() {
1141 public boolean accept(File f) {
1142 if (f.isDirectory()) return true;
1143 if(f.getName().toLowerCase().endsWith(xpattern[0]) || f.getName().toLowerCase().endsWith(xpattern[1])||
1144 f.getName().toLowerCase().endsWith(xpattern[2]) ){
1145 return true;
1146 }else{
1147 return false;
1149 //return f.getName().toLowerCase().endsWith(xpattern);
1151 public String getDescription () { return ""; }
1155 File file = null;
1156 if(lastPath==null){
1157 file = new File(Reha.proghome);
1158 }else{
1159 file = new File(lastPath);
1162 chooser.setCurrentDirectory(file);
1163 PropertyChangeListener pl = new PropertyChangeListener() {
1164 public void propertyChange(PropertyChangeEvent e) {
1165 if (e.getPropertyName().equals(JFileChooser.SELECTED_FILE_CHANGED_PROPERTY)
1166 || e.getPropertyName().equals(JFileChooser.DIRECTORY_CHANGED_PROPERTY)) {
1167 @SuppressWarnings("unused")
1168 final File f = (File) e.getNewValue();
1172 chooser.addPropertyChangeListener(pl);
1173 chooser.setVisible(true);
1174 setCursor(Reha.thisClass.normalCursor);
1175 final int result = chooser.showOpenDialog(null);
1177 if (result == JFileChooser.APPROVE_OPTION) {
1178 File inputVerzFile = chooser.getSelectedFile();
1179 String inputVerzStr = inputVerzFile.getPath();
1182 if(inputVerzFile.getName().trim().equals("")){
1183 sret = new String[] {};
1184 }else{
1185 Reha.thisClass.patpanel.dokumentation.setCursor(Reha.thisClass.wartenCursor);
1186 sret = new String[] {inputVerzFile.getName().trim(),inputVerzStr};
1187 lastPath = inputVerzFile.getAbsolutePath();
1189 }else{
1190 sret = new String[] {}; //vorlagenname.setText(SystemConfig.oTerminListe.NameTemplate);
1192 chooser.setVisible(false);
1193 chooser.removePropertyChangeListener(pl);
1194 chooser.removeAll();
1195 chooser = null;
1196 pl = null;
1197 return sret;
1200 private void doDokudelete(){
1201 if(this.aktivesBild <= 0){
1202 JOptionPane.showMessageDialog(null, "Es wurde keine Seite zum Löschen ausgewählt");
1203 return;
1205 if(vecBilderPfad.size()==1){
1206 loescheBilderPan();
1207 return;
1209 bilderPan.remove(Labels.get(aktivesBild-1));
1210 vecBilderPfad.removeElementAt(aktivesBild-1);
1211 vecBilderPfad.trimToSize();
1212 vecPdfPfad.removeElementAt(aktivesBild-1);
1213 vecPdfPfad.trimToSize();
1215 vecBilderFormat.removeElementAt(aktivesBild-1);
1216 vecBilderFormat.trimToSize();
1217 vecBilderAktion.removeElementAt(aktivesBild-1);
1218 vecBilderAktion.trimToSize();
1219 Labels.removeElementAt(aktivesBild-1);
1220 Labels.trimToSize();
1221 aktivesBild = 0;
1222 for(int i = 0;i < Labels.size();i++){
1223 Labels.get(i).setText("Seite-"+(i+1));
1224 Labels.get(i).setName("Label-"+(i+1));
1226 bilderPan.validate();
1227 bilderPan.repaint();
1230 private Rectangle getLowagieForm(String format){
1231 Rectangle[] rec = {PageSize.A6,PageSize.A6.rotate(),
1232 PageSize.A5,PageSize.A5.rotate(),PageSize.A4,PageSize.A4.rotate(),null};
1233 String[] forms ={"Din A6","Din A6-quer","Din A5","Din A5-quer","Din A4","Din A4-quer","angepasst"};
1234 for(int i = 0;i< forms.length;i++){
1235 if(forms[i].equals(format)){
1236 return rec[i];
1239 return rec[0];
1242 /******************************************/
1243 private void doDokusave(String dokuTitel){
1244 dokubut[0].setEnabled(false);
1245 dokubut[1].setEnabled(false);
1246 setCursor(Reha.thisClass.wartenCursor);
1247 Document document = null;
1248 FileOutputStream fout = null;
1249 for(int i = 0;i<vecBilderPfad.size();i++){
1250 //rehaSplash.setNewText("Erstelle Dokuseite "+(i+1));
1251 //System.out.println("Sende Seitengröße an Funktion "+vecBilderFormat.get(i));
1252 Rectangle format = null;
1253 try {
1254 com.lowagie.text.Image jpg2 = com.lowagie.text.Image.getInstance(vecBilderPfad.get(i));
1255 if(((String)vecBilderAktion.get(i)).equals("scanner")){
1256 format = getLowagieForm(vecBilderFormat.get(i));
1257 }else if(((String)vecBilderAktion.get(i)).equals("bildgeladen")){
1258 if(jpg2.getPlainWidth() > jpg2.getPlainHeight()){
1259 format = new Rectangle(PageSize.A4.rotate());
1260 }else{
1261 format = new Rectangle(PageSize.A4);
1265 if(format==null){
1266 format = new Rectangle(jpg2.getPlainWidth(),jpg2.getPlainHeight());
1268 //System.out.println("Das Format = "+format);
1269 document = new Document();
1270 document.setPageSize(format);
1271 document.setMargins(0.0f, 0.0f, 0.0f, 0.0f);
1272 fout = new FileOutputStream(SystemConfig.hmVerzeichnisse.get("Temp")+"/pdfDokuSeite"+(i+1)+".pdf");
1273 PdfWriter writer = PdfWriter.getInstance(document, fout);
1274 document.open();
1276 if(((String)vecBilderAktion.get(i)).equals("scanner")){
1277 jpg2.scaleAbsoluteHeight(document.getPageSize().getHeight());
1278 jpg2.scaleAbsoluteWidth(document.getPageSize().getWidth());
1279 document.add(jpg2);
1280 }else if(((String)vecBilderAktion.get(i)).equals("bildgeladen")){
1281 jpg2.scaleAbsoluteHeight(document.getPageSize().getHeight());
1282 jpg2.scaleAbsoluteWidth(document.getPageSize().getWidth());
1283 document.add(jpg2);
1287 document.close();
1288 writer.close();
1289 fout.flush();
1290 fout.close();
1291 Thread.sleep(100);
1292 } catch (FileNotFoundException e) {
1293 // TODO Auto-generated catch block
1294 e.printStackTrace();
1295 } catch (DocumentException e) {
1296 // TODO Auto-generated catch block
1297 e.printStackTrace();
1298 } catch (MalformedURLException e) {
1299 // TODO Auto-generated catch block
1300 e.printStackTrace();
1301 } catch (IOException e) {
1302 // TODO Auto-generated catch block
1303 e.printStackTrace();
1304 } catch (InterruptedException e) {
1305 // TODO Auto-generated catch block
1306 e.printStackTrace();
1310 PdfReader reader = null;
1311 PdfCopy copy = null;
1312 for(int i = 0;i<vecBilderPfad.size();i++){
1313 //rehaSplash.setNewText("Seiten zusammenf�hren - Seite"+(i+1)+" von "+vecBilderPfad.size());
1314 //Rectangle format = getLowagieForm(vecBilderFormat.get(i)); // vorher eingeschaltet....
1315 //System.out.println("Das Format = "+format);
1317 try {
1318 reader = new PdfReader(SystemConfig.hmVerzeichnisse.get("Temp")+"/pdfDokuSeite"+(i+1)+".pdf");
1319 if(i==0){
1320 document = new Document(reader.getPageSizeWithRotation(1));
1321 copy = new PdfCopy(document,
1322 new FileOutputStream(SystemConfig.hmVerzeichnisse.get("Temp")+"/FertigeDoku.pdf"));
1323 document.open();
1325 copy.addPage(copy.getImportedPage(reader,1));
1327 } catch (IOException e) {
1328 // TODO Auto-generated catch block
1329 e.printStackTrace();
1330 } catch (DocumentException e) {
1331 // TODO Auto-generated catch block
1332 e.printStackTrace();
1336 document.close();
1337 copy.close();
1338 document = null;
1344 ps.setBytes(1, //dokuid - integer
1345 ps.setBytes(2, //datum - date
1346 ps.setBytes(3, //dokutitel - longtext
1347 ps.setBytes(4, //benutzer - zeichen
1348 ps.setBytes(5, //pat_intern - integer
1349 ps.setBytes(6, //format - integer
1350 ps.setBytes(7, //dokutext - longtext
1351 ps.setBytes(8, //dokublob - longblog /bin�r
1352 public static void doSpeichernDoku(
1353 int dokuid,
1354 int pat_intern,
1355 String dateiname,
1356 int format,
1357 Vector<String> vec,
1358 boolean neu){
1360 //System.out.println("Beginne speichern");
1361 //rehaSplash.setNewText("Dokumentation auf Server transferieren");
1362 int dokuid = SqlInfo.erzeugeNummer("doku");
1363 int pat_int = Integer.valueOf(Reha.thisClass.patpanel.aktPatID); //Integer.valueOf(annika.getText().trim());
1364 try {
1366 doSpeichernDoku(
1367 dokuid,
1368 pat_int,
1369 SystemConfig.hmVerzeichnisse.get("Temp")+"/FertigeDoku.pdf",
1371 new String[] {DatFunk.sDatInSQL(DatFunk.sHeute()),dokuTitel,Reha.aktUser,""},
1372 true);
1374 loescheBilderPan();
1375 dokubut[0].setEnabled(true);
1376 dokubut[1].setEnabled(true);
1377 this.holeDokus(Reha.thisClass.patpanel.aktPatID,Integer.toString(dokuid));
1378 setCursor(Reha.thisClass.normalCursor);
1379 JOptionPane.showMessageDialog(null,"Dokumentation wurde gespeichert für Patient-Nr.: "+pat_int);
1380 //annika.setText("");
1381 //annika.requestFocus();
1383 } catch (Exception e) {
1384 loescheBilderPan();
1385 dokubut[0].setEnabled(true);
1386 dokubut[1].setEnabled(true);
1387 //this.holeDokus(Reha.thisClass.patpanel.aktPatID,Integer.valueOf(dokuid).toString());
1388 setCursor(Reha.thisClass.normalCursor);
1389 JOptionPane.showMessageDialog(null,"Fehler beim Speichern der Dokumentation \nDoku wurde nicht gespeichert");
1390 //annika.setText("");
1391 //annika.requestFocus();
1392 e.printStackTrace();
1394 ////System.out.println("Fertig mit speichern");
1396 private void loescheBilderPan(){
1397 //System.out.println(FileTools.delFileWithSuffixAndPraefix(new File(SystemConfig.hmVerzeichnisse.get("Temp")), "scan",".jpg"));
1398 //System.out.println(FileTools.delFileWithSuffixAndPraefix(new File(SystemConfig.hmVerzeichnisse.get("Temp")), "pdf",".pdf"));
1399 for(int i = 0 ; i < Labels.size(); i++){
1400 bilderPan.remove(Labels.get(i));
1401 Labels.get(i).setVisible(false);
1403 bilderPan.remove(plusminus);
1404 plusminus.setVisible(false);
1405 plusminus = null;
1406 Labels.clear();
1407 vecBilderPfad.clear();
1408 vecPdfPfad.clear();
1409 vecBilderFormat.clear();
1410 vecBilderAktion.clear();
1411 bildnummer = 0;
1412 if(scanner != null){
1413 scanner.removeListener(this);
1414 scanner = null;
1417 for(int i = 0 ; i < Labels.size(); i++){
1418 Labels.set(i,null);
1420 dokubut[2].setEnabled(false);
1421 bilderPan.validate();
1422 bilderPan.repaint();
1423 aktivesBild=0;
1425 if(this.dtblm.getRowCount()==0){
1426 this.setzeDokuPanelAufNull(true);
1430 private void updateInfoLab(){
1431 try {
1432 Thread.sleep(50);
1433 } catch (InterruptedException e1) {
1434 // TODO Auto-generated catch block
1435 e1.printStackTrace();
1437 if(!infolab[0].getText().equals(SystemConfig.sDokuScanner)){
1438 //System.out.println("Dokuscanner = "+SystemConfig.sDokuScanner);
1439 try {
1440 if(scanner==null){
1441 scanStarten();
1442 }else{
1443 scanner.select(SystemConfig.sDokuScanner);
1446 } catch (ScannerIOException e) {
1447 e.printStackTrace();
1449 infolab[0].setText(SystemConfig.sDokuScanner);
1451 infolab[1].setText(SystemConfig.hmDokuScanner.get("farben"));
1452 infolab[2].setText(SystemConfig.hmDokuScanner.get("aufloesung")+"dpi");
1453 infolab[3].setText(SystemConfig.hmDokuScanner.get("seiten"));
1454 infolab[4].setText( (SystemConfig.hmDokuScanner.get("dialog").equals("1") ? "ja" : "nein"));
1455 bilderPan.validate();
1457 if(!infolabLeer[0].getText().equals(SystemConfig.sDokuScanner)){
1458 try {
1459 scanner.select(SystemConfig.sDokuScanner);
1460 } catch (ScannerIOException e) {
1461 e.printStackTrace();
1463 infolabLeer[0].setText(SystemConfig.sDokuScanner);
1465 infolabLeer[1].setText(SystemConfig.hmDokuScanner.get("farben"));
1466 infolabLeer[2].setText(SystemConfig.hmDokuScanner.get("aufloesung")+"dpi");
1467 infolabLeer[3].setText(SystemConfig.hmDokuScanner.get("seiten"));
1468 infolabLeer[4].setText( (SystemConfig.hmDokuScanner.get("dialog").equals("1") ? "ja" : "nein"));
1469 leerInfo.validate();
1473 @Override
1474 public void tableChanged(TableModelEvent arg0) {
1475 // TODO Auto-generated method stub
1478 @Override
1479 public void propertyChange(PropertyChangeEvent arg0) {
1480 // TODO Auto-generated method stub
1484 void setRezeptDaten(){
1485 int row = this.tabdokus.getSelectedRow();
1486 if(row >= 0){
1487 final int xrow = row;
1488 SwingUtilities.invokeLater(new Runnable(){
1489 public void run(){
1490 String reznr = (String)tabdokus.getValueAt(xrow,0);
1491 String id = (String)tabdokus.getValueAt(xrow,6);
1492 //jpan1.setRezeptDaten(reznr,id);
1493 //System.out.println("Aus Bericht....."+reznr+"....."+id);
1495 });
1500 /**************************************************
1504 public void scanStarten(){
1505 if((!scanaktiv) ||
1506 SystemConfig.sDokuScanner.equals("") ){
1507 //System.out.println("Scanner = null");
1508 return;
1510 if(scanner == null){
1511 scanner = Scanner.getDevice();
1514 try {
1515 String[] names = scanner.getDeviceNames();
1516 for(int i = 0; i < names.length;i++){
1517 if(names[i].equals(SystemConfig.sDokuScanner)){
1518 deviceinstalled = true;
1521 if(deviceinstalled){
1522 scanner.select(SystemConfig.sDokuScanner);
1523 }else{
1524 if(infolab[0] != null){
1525 infolab[0].setText(scanner.getSelectedDeviceName());
1528 } catch (ScannerIOException e2) {
1529 e2.printStackTrace();
1532 scanner.addListener( this);
1535 private Double[] getDims(String seite){
1536 List<String> list = Arrays.asList( new String[] {"Din A6","Din A6-quer","Din A5","Din A5-quer","Din A4","Din A4-quer","angepasst"});
1537 //String[] dims = new String[] {"Din A6","Din A6-quer","Din A5","Din A5-quer","Din A4","Din A4-quer"};
1538 Double[][] d = new Double[][] {{4.23,5.82},{4.23,5.82},{5.82,8.26},{5.82,8.26},{8.26,11.69},{8.26,11.69},{8.26,11.69}};
1539 Double[] ret = {8.26,11.69};
1540 ret = d[list.indexOf(seite)].clone();
1541 return ret;
1543 @Override
1544 public void update( ScannerIOMetadata.Type type, ScannerIOMetadata metadata ) {
1546 /*****************************************************/
1547 if ( ScannerIOMetadata.NEGOTIATE.equals(type)){
1548 ScannerDevice device=metadata.getDevice();
1549 if(metadata instanceof TwainIOMetadata){
1550 Double[] setDim = getDims(SystemConfig.hmDokuScanner.get("seiten"));
1551 TwainSource source = ((TwainIOMetadata)metadata).getSource();
1552 try{
1553 int dpi= Integer.valueOf(SystemConfig.hmDokuScanner.get("aufloesung"));
1554 source.getCapability(TwainConstants.ICAP_UNITS,TwainConstants.MSG_GETCURRENT).setCurrentValue(TwainConstants.TWUN_INCHES);
1555 source.getCapability(TwainConstants.ICAP_XRESOLUTION,TwainConstants.MSG_GETCURRENT).setCurrentValue(dpi);
1556 source.getCapability(TwainConstants.ICAP_YRESOLUTION,TwainConstants.MSG_GETCURRENT).setCurrentValue(dpi);
1558 if(SystemConfig.hmDokuScanner.get("farben").equals("Schwarz/Weiß")){
1559 source.getCapability(TwainConstants.ICAP_PIXELTYPE).setCurrentValue(TwainConstants.TWPT_BW);
1560 }else if(SystemConfig.hmDokuScanner.get("farben").equals("Graustufen")){
1561 source.getCapability(TwainConstants.ICAP_PIXELTYPE).setCurrentValue(TwainConstants.TWPT_GRAY);
1562 }else{
1563 SystemConfig.hmDokuScanner.get("farben").equals("Farbe");
1564 source.getCapability(TwainConstants.ICAP_PIXELTYPE).setCurrentValue(TwainConstants.TWPT_RGB);
1567 TwainImageLayout imageLayout=new TwainImageLayout(source);
1568 imageLayout.get();
1569 imageLayout.setLeft(0.0);
1570 imageLayout.setTop(0.0);
1571 imageLayout.setRight(setDim[0]);
1572 imageLayout.setBottom(setDim[1]);
1573 imageLayout.set();
1575 device.setShowUserInterface((SystemConfig.hmDokuScanner.get("dialog").equals("1") ? true :false) );
1576 device.setShowProgressBar(true);
1577 setCursor(Reha.thisClass.normalCursor);
1578 }catch(Exception e){
1579 //System.out.println("3\b"+getClass().getName()+".update:\n\tCannot retrieve image information.\n\t"+e);
1582 /*****************************************************/
1583 }else if ( ScannerIOMetadata.STATECHANGE.equals(type)){
1584 if(metadata.isFinished()){
1585 if(metadata.getImage() != null){
1586 metadata.setImage(null);
1587 Runtime r = Runtime.getRuntime();
1588 r.gc();
1589 r.freeMemory();
1590 //System.out.println("Freier Speicher "+freeMem);
1591 //System.out.println("finished und nicht null = "+metadata.getStateStr());
1592 }else{
1593 //System.out.println("finished aber null = "+metadata.getStateStr());
1594 Runtime r = Runtime.getRuntime();
1595 r.gc();
1596 r.freeMemory();
1598 //System.out.println("Scanvorgang wurde beendet");
1599 setCursor(Reha.thisClass.normalCursor);
1600 }else{
1601 //System.out.println("nicht finished = "+metadata.getStateStr());
1604 /*****************************************************/
1605 }else if ( type.equals(ScannerIOMetadata.EXCEPTION)){
1606 //System.out.println("Exception in EXEPTION");
1607 if(!metadata.getException().getMessage().contains("Failed during call to twain source")){
1608 JOptionPane.showMessageDialog(null,"Bezug des Scans fehlgeschlagen.\nVersuchen Sie es mit einer niedrigeren Auflösung\n\n"+
1609 "Ideale Auflösung für Dokumentation: 150dpi");
1612 scanner.removeListener(this);
1613 scanner = null;
1614 Runtime r = Runtime.getRuntime();
1615 r.gc();
1616 setCursor(Reha.thisClass.normalCursor);
1617 /*****************************************************/
1618 }else if ( ScannerIOMetadata.ACQUIRED.equals( type )){
1619 //System.out.println("ACUIRED");
1620 //System.out.println(metadata.getStateStr());
1621 if(metadata.getStateStr().contains("Transferring Data")){
1622 setCursor(Reha.thisClass.wartenCursor);
1623 if(metadata.getImage() != null){
1624 commonName = Long.toString(System.currentTimeMillis());
1625 String fname = "scan"+commonName+".jpg";
1626 quelle = "scanner";
1627 File file = new File(SystemConfig.hmVerzeichnisse.get("Temp"),fname);
1628 try {
1629 ImageIO.write( metadata.getImage(),
1630 "jpg",
1631 file ) ;
1633 //System.out.println("Fertig mit Image schreiben");
1634 final Image img = metadata.getImage().getScaledInstance(50, 65,Image.SCALE_SMOOTH);
1635 final String pfad = file.getAbsolutePath();
1636 new Thread(){
1637 public void run(){
1638 zeigeBilder(img,pfad,commonName);
1640 }.start();
1641 } catch (IOException e) {
1642 //System.out.println("Exception in Statechange - ACOUIRED");
1643 e.printStackTrace();
1645 }else{
1646 //System.out.println("ImageDate = null");
1648 setCursor(Reha.thisClass.normalCursor);
1653 /**************************************************
1657 public void zeigeBilder(Image imgx,String datei,String commonname){
1658 Image img = imgx;
1660 bildnummer++;
1661 String name = "Bildnummer-"+bildnummer;
1662 LabName.add(name);
1663 if(SystemConfig.hmDokuScanner.get("seiten").contains("quer")){
1664 BufferedImage bimage = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB);
1665 Graphics g = bimage.createGraphics();
1666 g.drawImage(img, 0, 0, null);
1667 g.dispose();
1668 img = GrafikTools.rotate90DX(bimage).getScaledInstance(img.getWidth(null), img.getHeight(null), Image.SCALE_SMOOTH);
1670 ImageIcon icon = new ImageIcon(img);
1671 img = null;
1673 JLabel lab = new JLabel("Seite-"+(vecBilderPfad.size()+1));
1674 lab.setBorder(BorderFactory.createLineBorder(Color.BLACK));
1676 lab.addMouseListener(mlist);
1677 lab.setName(name);
1678 lab.setToolTipText("Doppelklick um "+lab.getText()+" zu öffnen");
1679 lab.setHorizontalTextPosition(JLabel.CENTER);
1680 lab.setVerticalTextPosition(JLabel.BOTTOM);
1681 lab.setIcon(icon);
1682 Labels.add(lab);
1683 vecBilderPfad.add(datei);
1684 vecBilderFormat.add(infolabLeer[3].getText());
1685 vecBilderAktion.add(quelle);
1686 String pdfPfad = "pdf"+commonname+".pdf";
1687 vecPdfPfad.add(pdfPfad);
1688 if(vecBilderPfad.size()==1){
1689 bilderPan.add(setzePlusMinus());
1690 dokubut[2].setEnabled(true);
1691 pmbut[0].setEnabled(true);
1692 pmbut[2].setEnabled(false);
1693 pmbut[3].setEnabled(false);
1694 bilderPan.validate();
1695 }else if(vecBilderPfad.size() >1 ){
1696 pmbut[0].setEnabled(true);
1697 pmbut[2].setEnabled(false);
1698 pmbut[3].setEnabled(false);
1701 bilderPan.add(lab);
1702 bilderPan.validate();
1704 /*********************
1709 public void pdfZeigen(int seite){
1711 setCursor(Reha.thisClass.wartenCursor);
1712 /*****************/
1713 Document document = null;
1714 String datname = "";
1715 //System.out.println("Sende Seitengröße an Funktion "+vecBilderFormat.get(seite));
1716 //Rectangle format = PageSize.A4.rotate();
1717 Rectangle format = null;
1718 if(((String)vecBilderAktion.get(seite)).equals("scanner")){
1719 format = getLowagieForm(vecBilderFormat.get(seite));
1720 }else if(((String)vecBilderAktion.get(seite)).equals("bildgeladen")){
1724 try {
1725 com.lowagie.text.Image jpg2 = com.lowagie.text.Image.getInstance(vecBilderPfad.get(seite));
1726 if(((String)vecBilderAktion.get(seite)).equals("scanner")){
1727 format = getLowagieForm(vecBilderFormat.get(seite));
1728 }else if(((String)vecBilderAktion.get(seite)).equals("bildgeladen")){
1729 if(jpg2.getPlainWidth() > jpg2.getPlainHeight()){
1730 format = new Rectangle(PageSize.A4.rotate());
1731 }else{
1732 format = new Rectangle(PageSize.A4);
1734 //format = new Rectangle(jpg2.getPlainWidth(),jpg2.getPlainHeight());
1740 //System.out.println("Das Format = "+format);
1741 document = new Document();
1742 document.setPageSize(format);
1743 document.setMargins(0.0f, 0.0f, 0.0f, 0.0f);
1744 datname = SystemConfig.hmVerzeichnisse.get("Temp")+"/"+vecPdfPfad.get(seite);
1745 FileOutputStream fout = new FileOutputStream(datname);
1746 PdfWriter writer = PdfWriter.getInstance(document, fout);
1747 document.open();
1748 //System.out.println("Die aktion = "+((String)vecBilderAktion.get(seite)) );
1749 if(((String)vecBilderAktion.get(seite)).equals("scanner")){
1750 jpg2.scaleAbsoluteHeight(document.getPageSize().getHeight());
1751 jpg2.scaleAbsoluteWidth(document.getPageSize().getWidth());
1752 document.add(jpg2);
1753 }else if(((String)vecBilderAktion.get(seite)).equals("bildgeladen")){
1755 //document.setPageSize(new Rectangle(jpg2.getScaledWidth(),jpg2.getScaledHeight()));
1756 Thread.sleep(20);
1757 //writer.setPageSize(document.getPageSize());
1759 //jpg2.scalePercent(0.25f);
1760 jpg2.scaleAbsoluteHeight(document.getPageSize().getHeight());
1761 jpg2.scaleAbsoluteWidth(document.getPageSize().getWidth());
1762 document.add(jpg2);
1766 document.close();
1767 writer.close();
1768 fout.flush();
1769 fout.close();
1771 Thread.sleep(100);
1772 } catch (FileNotFoundException e) {
1773 // TODO Auto-generated catch block
1774 e.printStackTrace();
1775 } catch (DocumentException e) {
1776 // TODO Auto-generated catch block
1777 e.printStackTrace();
1778 } catch (MalformedURLException e) {
1779 // TODO Auto-generated catch block
1780 e.printStackTrace();
1781 } catch (IOException e) {
1782 // TODO Auto-generated catch block
1783 e.printStackTrace();
1784 } catch (InterruptedException e) {
1785 // TODO Auto-generated catch block
1786 e.printStackTrace();
1790 /***************************/
1792 File file = new File(SystemConfig.hmFremdProgs.get("AcrobatReader"));
1793 if(!file.exists()){
1794 JOptionPane.showMessageDialog(null, "Der Pfad zu Ihrem Adobe-Acrobatreader ist nicht korrekt konfiguriert");
1795 return;
1797 //final String xdatname = datname;
1799 new SwingWorker<Void,Void>(){
1800 @Override
1801 protected Void doInBackground() throws Exception {
1802 Process process = new ProcessBuilder(SystemConfig.hmFremdProgs.get("AcrobatReader"),"",xdatname).start();
1803 InputStream is = process.getInputStream();
1804 InputStreamReader isr = new InputStreamReader(is);
1805 BufferedReader br = new BufferedReader(isr);
1806 String line;
1807 while ((line = br.readLine()) != null) {
1808 //System.out.println(line);
1810 is.close();
1811 isr.close();
1812 br.close();
1814 return null;
1817 }.execute();
1820 setCursor(Reha.thisClass.normalCursor);
1825 public JXPanel setzePlusMinus(){
1826 plusminus = new JXPanel();
1827 FormLayout lay = new FormLayout("p","p,p,p");
1828 CellConstraints cc = new CellConstraints();
1829 plusminus.setLayout(lay);
1830 plusminus.setOpaque(false);
1832 JToolBar jtbpm = new JToolBar();
1833 jtbpm.setRollover(true);
1834 jtbpm.setBorder(null);
1835 jtbpm.setOpaque(false);
1837 pmbut[0] = new JButton();
1838 pmbut[0].setIcon(SystemConfig.hmSysIcons.get("delete"));
1839 pmbut[0].setToolTipText("Aktive Dokuseite löschen");
1840 pmbut[0].setActionCommand("Dokudelete");
1841 pmbut[0].addActionListener(this);
1842 jtbpm.add(pmbut[0]);
1844 pmbut[1] = new JButton();
1845 pmbut[1].setIcon(SystemConfig.hmSysIcons.get("save"));
1846 pmbut[1].setToolTipText("Seiten zusammenführen und Dokumentation erstellen");
1847 pmbut[1].setActionCommand("Dokusave");
1848 pmbut[1].addActionListener(this);
1849 jtbpm.add(pmbut[1]);
1851 jtbpm.addSeparator(new Dimension(15,0));
1852 plusminus.add(jtbpm,cc.xy(1,1));
1854 jtbpm = new JToolBar();
1855 jtbpm.setRollover(true);
1856 jtbpm.setBorder(null);
1857 jtbpm.setOpaque(false);
1859 pmbut[2] = new JButton();
1860 pmbut[2].setIcon(SystemConfig.hmSysIcons.get("links"));
1861 pmbut[2].setToolTipText("Seiten nach links verschieben");
1862 pmbut[2].setActionCommand("Dokulinks");
1863 pmbut[2].addActionListener(this);
1864 pmbut[2].setEnabled(false);
1865 jtbpm.add(pmbut[2]);
1867 pmbut[3] = new JButton();
1868 pmbut[3].setIcon(SystemConfig.hmSysIcons.get("rechts"));
1869 pmbut[3].setToolTipText("Seiten nach rechts verschieben");
1870 pmbut[3].setActionCommand("Dokurechts");
1871 pmbut[3].addActionListener(this);
1872 pmbut[3].setEnabled(false);
1873 jtbpm.add(pmbut[3]);
1874 plusminus.add(jtbpm,cc.xy(1,2));
1876 return plusminus;
1879 public void setzeListener(){
1880 mlist = new MouseListener(){
1882 @Override
1883 public void mousePressed(MouseEvent arg0) {
1884 if(arg0.getClickCount()==2){
1885 //System.out.println("LabeName = "+((JComponent)arg0.getSource()).getName());
1886 int seite = Integer.valueOf( ((JComponent)arg0.getSource()).getName().split("-")[1] );
1887 File file = null;
1888 String datei = "";
1889 String grafik = SystemConfig.hmFremdProgs.get("GrafikProg").trim();
1890 if(((String)vecBilderAktion.get(seite-1)).equals("scanner") || grafik.equals("")){
1891 pdfZeigen(seite-1);
1892 file = new File(SystemConfig.hmFremdProgs.get("AcrobatReader"));
1893 if(!file.exists()){
1894 JOptionPane.showMessageDialog(null, "Der Pfad zu Ihrem Adobe-Acrobatreader ist nicht korrekt konfiguriert");
1895 return;
1897 datei = SystemConfig.hmVerzeichnisse.get("Temp")+"/"+vecPdfPfad.get(aktivesBild-1);
1899 }else if(((String)vecBilderAktion.get(seite-1)).equals("bildgeladen")){
1900 file = new File(SystemConfig.hmFremdProgs.get("GrafikProg"));
1901 if(!file.exists()){
1902 JOptionPane.showMessageDialog(null, "Der Pfad zu Ihrem Bildbearbeitungsprogramm ist nicht korrekt konfiguriert");
1903 return;
1905 datei = ((String)vecBilderPfad.get(aktivesBild-1));
1908 try {
1910 if(Reha.osVersion.contains("Windows")){
1911 datei = datei.replaceAll("/", "\\\\");
1913 long zeit1 = System.currentTimeMillis();
1914 File f = new File(datei);
1915 while(!f.canRead()){
1916 try {
1917 Thread.sleep(50);
1918 } catch (InterruptedException e) {
1919 // TODO Auto-generated catch block
1920 e.printStackTrace();
1922 if((System.currentTimeMillis()-zeit1) > 1000){
1923 break;
1927 //System.out.println("Starte :"+file.getAbsolutePath()+" "+datei);
1928 //Runtime.getRuntime().exec(datei.trim());
1929 Runtime.getRuntime().exec(file.getAbsolutePath().toString()+" "+datei.trim());
1930 } catch(IOException e) {
1931 e.printStackTrace();
1934 }else if(arg0.getClickCount()==1){
1935 if(aktivesBild > 0){
1936 int bild = Integer.valueOf( Labels.get(aktivesBild-1).getText().split("-")[1]);
1937 Labels.get(bild-1).setBorder(BorderFactory.createLineBorder(Color.BLACK));
1939 aktivesBild = Integer.valueOf( ((JLabel)((JComponent)arg0.getSource())).getText().split("-")[1] );
1940 Labels.get(aktivesBild-1).setBorder(BorderFactory.createLineBorder(Color.RED));
1945 @Override
1946 public void mouseEntered(MouseEvent arg0) {
1950 @Override
1951 public void mouseExited(MouseEvent arg0) {
1956 @Override
1957 public void mouseReleased(MouseEvent arg0) {
1960 @Override
1961 public void mouseClicked(MouseEvent arg0) {
1962 // TODO Auto-generated method stub
1970 class DokuListener implements ScannerListener{
1971 @Override
1972 public void update(ScannerIOMetadata.Type type, ScannerIOMetadata metadata) {
1973 if ( ScannerIOMetadata.NEGOTIATE.equals(type)){
1975 }else if ( ScannerIOMetadata.STATECHANGE.equals(type)){
1977 }else if ( type.equals(ScannerIOMetadata.EXCEPTION)){
1979 }else if ( ScannerIOMetadata.ACQUIRED.equals( type )){
1985 private String macheHtmlTitel(int anz,String titel){
1987 String ret = titel+" - "+Integer.toString(anz);
1990 String ret = "<html>"+titel+
1991 (anz > 0 ? " - <font color='#ff0000'>"+Integer.valueOf(anz).toString()+"<font></html>" : " - <font color='#000000'>"+Integer.valueOf(anz).toString()+"</font>");
1993 return ret;
1995 public void holeDokus(String patint,String doku){
1996 final String xpatint = patint;
1999 new SwingWorker<Void,Void>(){
2000 @Override
2001 protected Void doInBackground() throws Exception {
2002 try{
2003 //{"Doku-Id","Doku-Art","Titel","erfa�t am","von","",""};
2004 //String sstmt = "select * from verordn where PAT_INTERN ='"+xpatint+"' ORDER BY REZ_DATUM";
2005 Vector<Vector<String>> vec = SqlInfo.holeSaetze("doku1",
2006 "dokuid,format,dokutitel,DATE_FORMAT(datum,'%d.%m.%Y') AS dokudatum," +
2007 "benutzer,pat_intern,id,datei",
2008 "pat_intern='"+xpatint+"' ORDER BY dokuid DESC", Arrays.asList(new String[]{}));
2010 int anz = vec.size();
2012 for(int i = 0; i < anz;i++){
2013 if(i==0){
2014 dtblm.setRowCount(0);
2017 int zzbild = 0;
2018 if( ((Vector<?>)vec.get(i)).get(1) == null){
2019 zzbild = 0;
2020 }else if(!((Vector<?>)vec.get(i)).get(1).equals("")){
2021 zzbild = Integer.valueOf((String) ((Vector<?>)vec.get(i)).get(1) );
2023 dtblm.addRow((Vector<?>)vec.get(i));
2024 dtblm.setValueAt(tabIcons[zzbild], i, 1);
2025 //dtblm.setValueAt(Reha.thisClass.patpanel.imgzuzahl[zzbild], i, 1);
2027 Reha.thisClass.patpanel.getTab().setTitleAt(3,macheHtmlTitel(anz,"Dokumentation"));
2028 if(anz > 0){
2029 setzeDokuPanelAufNull(false);
2030 //int anzeigen = -1;
2031 anzahlDokus.setText("Anzahl gespeicherter Dokumentationen: "+anz);
2032 tabdokus.setRowSelectionInterval(0, 0);
2033 wechselPanel.revalidate();
2034 wechselPanel.repaint();
2035 if((!dokubut[0].isEnabled()) && SystemConfig.hmDokuScanner.get("aktivieren").trim().equals("1")){
2036 dokubut[0].setEnabled(true);
2038 dokubut[5].setEnabled(true);
2039 dokubut[1].setEnabled(true);
2041 dokubut[3].setEnabled(true);
2042 dokubut[4].setEnabled(true);
2043 dokubut[5].setEnabled(true);
2046 }else{
2047 setzeDokuPanelAufNull(true);
2048 anzahlDokus.setText("Anzahl gespeicherter Dokumentationen: 0");
2049 wechselPanel.revalidate();
2050 wechselPanel.repaint();
2051 dtblm.setRowCount(0);
2052 if((!dokubut[0].isEnabled()) && SystemConfig.hmDokuScanner.get("aktivieren").trim().equals("1")){
2053 dokubut[0].setEnabled(true);
2055 dokubut[1].setEnabled(true);
2056 dokubut[5].setEnabled(false);
2058 dokubut[3].setEnabled(true);
2059 dokubut[4].setEnabled(true);
2060 dokubut[5].setEnabled(false);
2065 }catch(Exception ex){
2066 //ex.printStackTrace();
2068 return null;
2071 }.execute();
2076 /*************************************************/
2077 class DokuListSelectionHandler implements ListSelectionListener {
2079 public void valueChanged(ListSelectionEvent e) {
2081 if(rezneugefunden){
2082 rezneugefunden = false;
2083 return;
2086 ListSelectionModel lsm = (ListSelectionModel)e.getSource();
2088 //int firstIndex = e.getFirstIndex();
2089 //int lastIndex = e.getLastIndex();
2090 boolean isAdjusting = e.getValueIsAdjusting();
2091 if(isAdjusting){
2092 return;
2094 //StringBuffer output = new StringBuffer();
2095 if (lsm.isSelectionEmpty()) {
2097 } else {
2098 int minIndex = lsm.getMinSelectionIndex();
2099 int maxIndex = lsm.getMaxSelectionIndex();
2100 for (int i = minIndex; i <= maxIndex; i++) {
2101 if (lsm.isSelectedIndex(i)) {
2102 //final int ix = i;
2104 new SwingWorker<Void,Void>(){
2106 @Override
2107 protected Void doInBackground() throws Exception {
2109 // TODO Auto-generated method stub
2110 inDokuDaten = true;
2111 setCursor(Reha.thisClass.wartenCursor);
2112 //holeEinzelTermine(ix,null);
2113 //jpan1.setRezeptDaten((String)tabhistorie.getValueAt(ix, 0),(String)tabhistorie.getValueAt(ix, 6));
2114 ////System.out.println("rezeptdaten akutalisieren in ListSelectionHandler");
2115 setCursor(Reha.thisClass.normalCursor);
2116 inDokuDaten = false;
2118 return null;
2121 }.execute();
2123 break;
2127 ////System.out.println(output.toString());
2132 public static void doSpeichernDoku(int dokuid,int pat_intern, String dateiname,int format,String[] str,boolean neu) throws Exception{
2133 Statement stmt = null;;
2134 ResultSet rs = null;
2135 PreparedStatement ps = null;
2136 //boolean ret = false;
2137 //int bilder = 0;
2138 //FileInputStream fis = null;
2139 //piTool.app.conn.setAutoCommit(true);
2140 try {
2141 stmt = (Statement) Reha.thisClass.conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
2142 ResultSet.CONCUR_UPDATABLE );
2144 String select = "Insert into doku1 set dokuid = ? , datum = ?, dokutitel = ?,"+
2145 "benutzer = ?, pat_intern = ?, format = ?,"+
2146 "dokutext = ?, dokublob = ? , groesse = ? ";
2147 ps = (PreparedStatement) Reha.thisClass.conn.prepareStatement(select);
2150 ps.setBytes(1, //dokuid - integer
2151 ps.setBytes(2, //datum - date
2152 ps.setBytes(3, //dokutitel - longtext
2153 ps.setBytes(4, //benutzer - zeichen
2154 ps.setBytes(5, //pat_intern - integer
2155 ps.setBytes(6, //format - integer
2156 ps.setBytes(7, //dokutext - longtext
2157 ps.setBytes(8, //dokublob - longblog /bin�r
2158 new String[] {datFunk.sDatInSQL(datFunk.sHeute()),"Eingescannte Papierdokumentation",Reha.aktUser,""},
2160 //System.out.println("Setze InputStream "+dateiname);
2161 ps.setInt(1, dokuid);
2162 ps.setString(2, str[0]);
2163 ps.setString(3, str[1]);
2164 ps.setString(4, str[2]);
2165 ps.setInt(5, pat_intern);
2166 ps.setInt(6, format);
2167 ps.setString(7, str[3]);
2168 File f = new File(dateiname);
2169 byte[] b = FileTools.File2ByteArray(f);
2170 ps.setBytes(8,b);
2171 ps.setInt(9, (int)b.length);
2172 ps.execute();
2174 } catch (SQLException e) {
2175 // TODO Auto-generated catch block
2176 e.printStackTrace();
2185 finally {
2186 if (rs != null) {
2187 try {
2188 rs.close();
2189 } catch (SQLException sqlEx) { // ignore }
2190 rs = null;
2193 if (stmt != null) {
2194 try {
2195 stmt.close();
2196 } catch (SQLException sqlEx) { // ignore }
2197 stmt = null;
2200 if(ps != null){
2201 ps.close();
2206 public void oooDokuNeu(int art, int vecnum){
2207 String[] welcheArt = {"OpenOffice-Writer","OpenOffice-Calc","Eigene Writer-Doku","Eigene Calc-Doku"};
2208 String value = (String)JOptionPane.showInputDialog(null,
2209 "Bitte einen Titel für die Dokumentation eingeben\n\n", "Benutzereingabe erforderlich....", JOptionPane.PLAIN_MESSAGE, null,
2210 null, "Neue "+welcheArt[art]+" Dokumentation");
2211 if( (value == null) || (value.length()==0)){
2212 JOptionPane.showMessageDialog(null, "Kein Titel - kein speichern. Ganz einfach!!");
2213 return;
2215 String dest = null;
2216 if(art==0){
2217 String src = Reha.proghome+"vorlagen/"+Reha.aktIK+"/EmptyWriterDoku.ott";
2218 dest = Reha.proghome+"temp/"+Reha.aktIK+"/"+value+".odt";
2220 try {
2221 FileTools.copyFile(new File(src), new File(dest), 8192,true);
2222 ITextDocument itext = new OOTools().starteWriterMitDatei(dest);
2223 itext.addDocumentListener(new OoListener(Reha.officeapplication,dest,"",this));
2224 } catch (IOException e) {
2225 e.printStackTrace();
2226 JOptionPane.showMessageDialog(null, "Fehler kann neues WriterDokument nicht erzeugen");
2228 }else if(art==1){
2229 String src = Reha.proghome+"vorlagen/"+Reha.aktIK+"/EmptyCalcDoku.ots";
2230 dest = Reha.proghome+"temp/"+Reha.aktIK+"/"+value+".ods";
2232 try {
2233 FileTools.copyFile(new File(src), new File(dest), 8192,true);
2234 ISpreadsheetDocument ispread = new OOTools().starteCalcMitDatei(dest);
2235 ispread.addDocumentListener(new OoListener(Reha.officeapplication,dest,"",this));
2237 } catch (IOException e) {
2238 e.printStackTrace();
2239 JOptionPane.showMessageDialog(null, "Fehler kann neues CalcDokument nicht erzeugen");
2241 }else if(art==2){
2242 String src = Reha.proghome+"vorlagen/"+Reha.aktIK+"/"+SystemConfig.vOwnDokuTemplate.get(vecnum).get(1);
2243 dest = Reha.proghome+"temp/"+Reha.aktIK+"/"+value+".odt";
2244 try {
2245 FileTools.copyFile(new File(src), new File(dest), 8192,true);
2246 ITextDocument itext = new OOTools().starteWriterMitDatei(dest);
2247 OOTools.erstzeNurPlatzhalter(itext);
2248 itext.addDocumentListener(new OoListener(Reha.officeapplication,dest,"",this));
2249 } catch (IOException e) {
2250 e.printStackTrace();
2251 JOptionPane.showMessageDialog(null, "Fehler kann neues WriterDokument nicht erzeugen");
2253 }else if(art==3){
2254 String src = Reha.proghome+"vorlagen/"+Reha.aktIK+"/"+SystemConfig.vOwnDokuTemplate.get(vecnum).get(1);
2255 dest = Reha.proghome+"temp/"+Reha.aktIK+"/"+value+".ods";
2256 try {
2257 FileTools.copyFile(new File(src), new File(dest), 8192,true);
2258 ISpreadsheetDocument ispread = new OOTools().starteCalcMitDatei(dest);
2259 ispread.addDocumentListener(new OoListener(Reha.officeapplication,dest,"",this));
2261 } catch (IOException e) {
2262 e.printStackTrace();
2263 JOptionPane.showMessageDialog(null, "Fehler kann neues CalcDokument nicht erzeugen");
2268 /**************************************************/
2269 private void pdfSpeichernDoku(){
2270 int dokuid = -1;
2271 String[] doku = oeffneBild(new String[] {"pdf","????","???"},false);
2272 if(doku.length==0){setCursor(Reha.thisClass.normalCursor);return;}
2273 if(! doku[0].toLowerCase().endsWith(".pdf")){
2274 setCursor(Reha.thisClass.normalCursor);
2275 JOptionPane.showMessageDialog(null,"Diese Funktion ist nur für PDF-Dateien geeignet");
2276 return;
2278 doku[1] = doku[1].replaceAll("\\\\", "/");
2279 try {
2280 doSpeichernDoku( (dokuid=SqlInfo.erzeugeNummer("doku")),
2281 Integer.valueOf(Reha.thisClass.patpanel.aktPatID),
2282 doku[1],
2284 new String[] {DatFunk.sDatInSQL(DatFunk.sHeute()),doku[0],Reha.aktUser,""},
2285 true);
2286 } catch (NumberFormatException e) {
2287 e.printStackTrace();
2288 } catch (Exception e) {
2289 e.printStackTrace();
2291 this.holeDokus(Reha.thisClass.patpanel.aktPatID,Integer.toString(dokuid));
2292 setCursor(Reha.thisClass.normalCursor);
2294 /**************************************************/
2295 public void speichernOoDocs(int dokuid,int pat_intern, String dateiname,int format,String[] str,boolean neu) throws Exception{
2296 Statement stmt = null;;
2297 ResultSet rs = null;
2298 PreparedStatement ps = null;
2299 //boolean ret = false;
2300 //int bilder = 0;
2301 //FileInputStream fis = null;
2302 //piTool.app.conn.setAutoCommit(true);
2303 try {
2304 stmt = (Statement) Reha.thisClass.conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
2305 ResultSet.CONCUR_UPDATABLE );
2306 //Dokumentation.speichernOoDocs(Integer.valueOf(id), -1, file, -1, null, false);
2307 if(neu){
2308 String select = "Insert into doku1 set dokuid = ? , datum = ?, dokutitel = ?,"+
2309 "benutzer = ?, pat_intern = ?, format = ?,"+
2310 "dokutext = ?, dokublob = ? , groesse = ? , datei = ?";
2311 ps = (PreparedStatement) Reha.thisClass.conn.prepareStatement(select);
2314 ps.setBytes(1, //dokuid - integer
2315 ps.setBytes(2, //datum - date
2316 ps.setBytes(3, //dokutitel - longtext
2317 ps.setBytes(4, //benutzer - zeichen
2318 ps.setBytes(5, //pat_intern - integer
2319 ps.setBytes(6, //format - integer
2320 ps.setBytes(7, //dokutext - longtext
2321 ps.setBytes(8, //dokublob - longblog /bin�r
2322 ps.setBytes(9, //groesse - longtext
2323 ps.setBytes(10, //datei - longblog /bin�r
2325 new String[] {datFunk.sDatInSQL(datFunk.sHeute()),"Eingescannte Papierdokumentation",Reha.aktUser,""},
2327 //System.out.println("Setze InputStream "+dateiname);
2328 ps.setInt(1, dokuid);
2329 ps.setString(2, DatFunk.sDatInSQL(DatFunk.sHeute()));
2330 ps.setString(3, dateiname.substring(dateiname.replace("\\", "/").lastIndexOf("/")+1));
2331 ps.setString(4, Reha.aktUser);
2332 ps.setInt(5, Integer.parseInt(Reha.thisClass.patpanel.patDaten.get(29).trim()));
2333 ps.setInt(6, (dateiname.endsWith(".odt") ? 1 : 2));
2334 ps.setString(7, dateiname.substring(dateiname.replace("\\", "/").lastIndexOf("/")+1));
2335 File f = new File(dateiname);
2336 byte[] b = FileTools.File2ByteArray(f);
2337 ps.setBytes(8,b);
2338 ps.setInt(9, (int)b.length);
2339 ps.setString(10, dateiname.substring(dateiname.replace("\\", "/").lastIndexOf("/")+1));
2340 ps.execute();
2341 //System.out.println("OOOrg-Doku wurde gespeichert");
2342 //String id = SqlInfo.holeEinzelFeld("select id from doku1 where dokuid='"+dokuid+"' LIMIT 1");
2343 ////System.out.println("ID der neuen Doku ist "+id);
2344 holeDokus(Reha.thisClass.patpanel.patDaten.get(29).trim(),"");
2346 }else{
2347 //int dokuid,int pat_intern, String dateiname,int format,String[] str,boolean neu
2348 //Dokumentation.speichernOoDocs(Integer.valueOf(id), -1, file, -1, null, false);
2349 String select = "update doku1 set dokublob = ?, groesse = ?, datum = ? "+
2350 " where id = ?";
2351 //System.out.println("Prepared statement: "+select);
2352 ps = (PreparedStatement) Reha.thisClass.conn.prepareStatement(select);
2353 File f = new File(dateiname);
2354 byte[] b = FileTools.File2ByteArray(f);
2355 ps.setBytes(1,b);
2356 ps.setInt(2, (int)b.length);
2357 ps.setString(3, DatFunk.sDatInSQL(DatFunk.sHeute()));
2358 ps.setString(4,Integer.valueOf(dokuid).toString());
2359 ps.execute();
2360 //System.out.println("Fertig mit execute");
2361 //System.out.println("Größe des Datenstroms="+b.length+" Bytes");
2362 //System.out.println("Datei = "+f.getAbsolutePath());
2363 //System.out.println("dokuid = "+Integer.toString(dokuid));
2364 //System.out.println("Dateigröße = "+b.length+" Bytes");
2365 //System.out.println("Datum = "+DatFunk.sDatInSQL(DatFunk.sHeute()));
2366 f.delete();
2367 Reha.thisClass.patpanel.dokumentation.setCursor(Reha.thisClass.normalCursor);
2370 } catch (SQLException e) {
2371 // TODO Auto-generated catch block
2372 e.printStackTrace();
2381 finally {
2382 if (rs != null) {
2383 try {
2384 rs.close();
2385 rs = null;
2386 } catch (SQLException sqlEx) { // ignore }
2387 rs = null;
2390 if (stmt != null) {
2391 try {
2392 stmt.close();
2393 stmt = null;
2394 } catch (SQLException sqlEx) { // ignore }
2395 stmt = null;
2398 if(ps != null){
2399 ps.close();
2400 ps = null;
2405 private void doEigenDoku(int welchedoku){
2406 if(SystemConfig.vOwnDokuTemplate.get(welchedoku).get(1).contains(".ods") ||
2407 SystemConfig.vOwnDokuTemplate.get(welchedoku).get(1).contains(".ots")){
2408 oooDokuNeu(3,welchedoku);
2410 }else if(SystemConfig.vOwnDokuTemplate.get(welchedoku).get(1).contains(".odt") ||
2411 SystemConfig.vOwnDokuTemplate.get(welchedoku).get(1).contains(".ott")){
2412 oooDokuNeu(2,welchedoku);
2416 /****************************/
2418 class ToolsDlgDokumentation{
2419 public ToolsDlgDokumentation(String command,Point pt){
2421 Map<Object, ImageIcon> icons = new HashMap<Object, ImageIcon>();
2422 icons.put("Scanner einstellungen",SystemConfig.hmSysIcons.get("scanner"));
2423 icons.put("Photo von DigiCam holen",SystemConfig.hmSysIcons.get("camera"));
2424 icons.put("Office-Dokument aufnehmen", SystemConfig.hmSysIcons.get("openoffice26"));
2425 icons.put("PDF-Dokument aufnehmen", pdfplus /*SystemConfig.hmSysIcons.get("pdf")*/);
2426 icons.put("Neue OO-Writer-Doku erstellen",oowriterplus/*SystemConfig.hmSysIcons.get("ooowriter")*/);
2427 icons.put("Neue OO-Calc-Doku erstellen",oocalcplus/*SystemConfig.hmSysIcons.get("ooocalc")*/);
2428 int owndoku = SystemConfig.vOwnDokuTemplate.size();
2429 for(int i = 0; i < owndoku; i++){
2430 if(SystemConfig.vOwnDokuTemplate.get(i).get(1).contains(".ods") ||
2431 SystemConfig.vOwnDokuTemplate.get(i).get(1).contains(".ots")){
2432 icons.put(SystemConfig.vOwnDokuTemplate.get(i).get(0),oocalcplus/*SystemConfig.hmSysIcons.get("ooocalc")*/);
2434 }else if(SystemConfig.vOwnDokuTemplate.get(i).get(1).contains(".odt") ||
2435 SystemConfig.vOwnDokuTemplate.get(i).get(1).contains(".ott")){
2436 icons.put(SystemConfig.vOwnDokuTemplate.get(i).get(0),oowriterplus/*SystemConfig.hmSysIcons.get("ooocalc")*/);
2440 Object[] obj1 = {"Scanner einstellungen",
2441 "Photo von DigiCam holen",
2442 "Office-Dokument aufnehmen",
2443 "PDF-Dokument aufnehmen",
2444 "Neue OO-Writer-Doku erstellen",
2445 "Neue OO-Calc-Doku erstellen"};
2446 Object[] obj2 = new Object[6+owndoku];
2447 for(int i = 0; i < obj2.length;i++){
2448 if(i < 6){
2449 obj2[i] = obj1[i];
2450 }else{
2451 obj2[i] = (Object) SystemConfig.vOwnDokuTemplate.get(i-6).get(0);
2454 JList list = new JList(obj2);
2455 // create a list with some test data
2457 JList list = new JList( new Object[] {"Scanner einstellungen",
2458 "Photo von DigiCam holen",
2459 "Office-Dokument aufnehmen",
2460 "PDF-Dokument aufnehmen",
2461 "Neue OO-Writer-Doku erstellen",
2462 "Neue OO-Calc-Doku erstellen"});
2464 list.setCellRenderer(new IconListRenderer(icons));
2465 Reha.toolsDlgRueckgabe = -1;
2467 ToolsDialog tDlg = new ToolsDialog(Reha.thisFrame,"Werkzeuge: Dokumentation",list);
2468 tDlg.setPreferredSize(new Dimension(240,220+(owndoku>3 ? 3*20 : owndoku*20)+
2469 ((Boolean)SystemConfig.hmPatientenWerkzeugDlgIni.get("ToolsDlgShowButton")? 25 : 0) ));
2470 tDlg.setLocation(pt.x-70,pt.y+30);
2471 tDlg.pack();
2472 tDlg.setModal(true);
2473 tDlg.activateListener();
2474 tDlg.setVisible(true);
2475 switch(Reha.toolsDlgRueckgabe){
2476 case 0:
2477 if(!Rechte.hatRecht(Rechte.Doku_scannen, true)){
2478 return;
2480 doScanEdit(pt);
2481 break;
2482 case 1:
2483 if(Reha.thisClass.patpanel.aktPatID.equals("")){
2484 keinAtiverPatient();
2485 tDlg = null;
2486 return;
2488 if(!Rechte.hatRecht(Rechte.Doku_ooorg, true)){
2489 return;
2491 doHolePhoto();
2492 break;
2493 case 2:
2494 if(Reha.thisClass.patpanel.aktPatID.equals("")){
2495 keinAtiverPatient();
2496 tDlg = null;
2497 return;
2499 if(!Rechte.hatRecht(Rechte.Doku_ooorg, true)){
2500 return;
2502 doHoleOO();
2503 break;
2504 case 4:
2505 if(Reha.thisClass.patpanel.aktPatID.equals("")){
2506 keinAtiverPatient();
2507 tDlg = null;
2508 return;
2509 } // 0 = Writer
2510 if(!Rechte.hatRecht(Rechte.Doku_ooorg, true)){
2511 return;
2513 oooDokuNeu(0,-1);
2514 break;
2515 case 5:
2516 if(Reha.thisClass.patpanel.aktPatID.equals("")){
2517 keinAtiverPatient();
2518 tDlg = null;
2519 return;
2520 }// 0 = Calc
2521 if(!Rechte.hatRecht(Rechte.Doku_ooorg, true)){
2522 return;
2524 oooDokuNeu(1,-1);
2525 break;
2526 case 3:
2527 if(Reha.thisClass.patpanel.aktPatID.equals("")){
2528 keinAtiverPatient();
2529 tDlg = null;
2530 return;
2531 }// 0 = Calc
2532 if(!Rechte.hatRecht(Rechte.Doku_ooorg, true)){
2533 return;
2535 pdfSpeichernDoku();
2536 break;
2539 if(Reha.toolsDlgRueckgabe > 5){
2540 if(!Rechte.hatRecht(Rechte.Doku_ooorg, true)){
2541 return;
2543 doEigenDoku(Reha.toolsDlgRueckgabe-6);
2546 tDlg = null;
2547 ////System.out.println("Rückgabewert = "+tDlg.rueckgabe);
2549 private void keinAtiverPatient(){
2550 JOptionPane.showMessageDialog(null,"Kein Patient für Dokumentation ausgewählt");
2557 /*************************************/
2558 /*************************************/
2560 class MyDoku2TableModel extends DefaultTableModel{
2564 private static final long serialVersionUID = 1L;
2566 public Class<?> getColumnClass(int columnIndex) {
2567 if(columnIndex==1){
2568 return JLabel.class;}
2569 else{
2570 return String.class;
2572 //return (columnIndex == 0) ? Boolean.class : String.class;
2575 public boolean isCellEditable(int row, int col) {
2576 //Note that the data/cell address is constant,
2577 //no matter where the cell appears onscreen.
2579 if (col == 0){
2580 return true;
2581 }else if(col == 3){
2582 return true;
2583 }else if(col == 7){
2584 return true;
2585 }else if(col == 11){
2586 return true;
2587 } else{
2588 return false;
2594 class MyDokuTermTableModel extends DefaultTableModel{
2598 private static final long serialVersionUID = 1L;
2600 public Class<?> getColumnClass(int columnIndex) {
2601 if(columnIndex==0){return String.class;}
2602 /*else if(columnIndex==1){return JLabel.class;}*/
2603 else{return String.class;}
2604 //return (columnIndex == 0) ? Boolean.class : String.class;
2607 public boolean isCellEditable(int row, int col) {
2608 //Note that the data/cell address is constant,
2609 //no matter where the cell appears onscreen.
2610 if (col == 0){
2611 return true;
2612 }else if(col == 1){
2613 return true;
2614 }else if(col == 2){
2615 return true;
2616 }else if(col == 11){
2617 return true;
2618 } else{
2619 return false;
2625 class OoListener implements IDocumentListener {
2627 public IOfficeApplication officeAplication = null;
2628 private String datei;
2629 private String id;
2630 private boolean geaendert = false;
2631 private boolean neu = false;
2632 public boolean warschoninsave = false;
2633 private Dokumentation eltern;
2634 IDocument document;
2635 public OoListener(IOfficeApplication officeAplication,String xdatei,String xid,Dokumentation xeltern) {
2636 this.officeAplication = officeAplication;
2637 datei = xdatei;
2638 geaendert = false;
2639 id = xid;
2640 eltern = xeltern;
2641 if(xid.equals("")){
2642 neu = true;
2643 }else{
2644 neu = false;
2647 @Override
2648 public void onAlphaCharInput(IDocumentEvent arg0) {
2649 // TODO Auto-generated method stub
2652 @Override
2653 public void onFocus(IDocumentEvent arg0) {
2654 // TODO Auto-generated method stub
2657 @Override
2658 public void onInsertDone(IDocumentEvent arg0) {
2659 // TODO Auto-generated method stub
2662 @Override
2663 public void onInsertStart(IDocumentEvent arg0) {
2664 // TODO Auto-generated method stub
2667 @Override
2668 public void onLoad(IDocumentEvent arg0) {
2669 // TODO Auto-generated method stub
2672 @Override
2673 public void onLoadDone(IDocumentEvent arg0) {
2674 // TODO Auto-generated method stub
2676 @Override
2677 public void onLoadFinished(IDocumentEvent arg0) {
2678 // TODO Auto-generated method stub
2681 @Override
2682 public void onModifyChanged(IDocumentEvent arg0) {
2683 // TODO Auto-generated method stub
2686 @Override
2687 public void onMouseOut(IDocumentEvent arg0) {
2688 // TODO Auto-generated method stub
2691 @Override
2692 public void onMouseOver(IDocumentEvent arg0) {
2693 // TODO Auto-generated method stub
2696 @Override
2697 public void onNew(IDocumentEvent arg0) {
2698 // TODO Auto-generated method stub
2701 @Override
2702 public void onNonAlphaCharInput(IDocumentEvent arg0) {
2703 // TODO Auto-generated method stub
2706 @Override
2707 public void onSave(IDocumentEvent arg0) {
2708 ////System.out.println("onSave");
2711 @Override
2712 public void onSaveAs(IDocumentEvent arg0) {
2713 // TODO Auto-generated method stub
2716 @Override
2717 public void onSaveAsDone(IDocumentEvent arg0) {
2718 // TODO Auto-generated method stub
2721 @Override
2722 public void onSaveDone(IDocumentEvent arg0) {
2723 // TODO Auto-generated method stub
2724 ////System.out.println("Savedone");
2725 IDocument doc = arg0.getDocument();
2726 if(doc == null){
2727 return;
2729 String file = arg0.getDocument().getPersistenceService().getLocation().getPath();
2730 file = file.substring(1).replace("%20", " ");
2731 if(datei.equals(file)){
2732 geaendert = true;
2736 @SuppressWarnings("unused")
2737 private void doUebertragen(String file){
2740 @Override
2741 public void onSaveFinished(IDocumentEvent arg0) {
2742 // TODO Auto-generated method stub
2743 ////System.out.println("SaveFinisched");
2746 @Override
2747 public void onUnload(IDocumentEvent arg0) {
2748 try {
2750 IDocument doc = arg0.getDocument();
2751 if(doc == null){
2752 //System.out.println(geaendert+" - "+datei+" - "+neu+" doc = null ");
2753 return;
2756 String file = arg0.getDocument().getPersistenceService().getLocation().getPath();
2757 file = file.substring(1).replace("%20", " ");
2758 //System.out.println(geaendert+" - "+datei+" - "+file+" - "+neu);
2759 if(geaendert && datei.equals(file) && (!neu)){
2760 try{
2761 final String xfile = file;
2762 final int xid = Integer.parseInt(id);
2763 //final IDocumentEvent xarg0 = arg0;
2764 Thread.sleep(50);
2765 new Thread(){
2766 public void run(){
2767 try{
2768 String nurDatei = datei.substring(datei.replace("\\", "/").lastIndexOf("/")+1);
2769 int frage = JOptionPane.showConfirmDialog(null, "Die Dokumentationsdatei --> "+nurDatei+" <-- wurde geändert\n\nWollen Sie die geänderte Fassung in die Patienten-Dokumentation übernehmen?", "Wichtige Benutzeranfrage", JOptionPane.YES_NO_OPTION);
2770 if(frage == JOptionPane.YES_OPTION){
2771 geaendert = false;
2772 try {
2773 Reha.thisClass.patpanel.dokumentation.setCursor(Reha.thisClass.wartenCursor);
2774 eltern.speichernOoDocs(xid, -1, xfile, -1, null, neu);
2775 } catch (Exception e) {
2776 // TODO Auto-generated catch block
2777 e.printStackTrace();
2781 }catch(Exception ex){
2782 ex.printStackTrace();
2785 }.start();
2786 arg0.getDocument().removeDocumentListener(this);
2787 warschoninsave = true;
2788 }catch(Exception ex){
2789 ex.printStackTrace();
2791 }else if(datei.equals(file) && !geaendert){
2792 //System.out.println(geaendert+" - "+datei+" - "+file+" - "+neu);
2793 arg0.getDocument().removeDocumentListener(this);
2794 //System.out.println("Listener entfernt - Datei nicht geändert"+file);
2795 warschoninsave = true;
2796 }else if(neu){
2797 //System.out.println(geaendert+" - "+datei+" - "+file+" - "+neu);
2798 new Thread(){
2799 public void run(){
2800 String nurDatei = datei.substring(datei.replace("\\", "/").lastIndexOf("/")+1);
2801 int frage = JOptionPane.showConfirmDialog(null, "Die Dokumentationsdatei --> "+nurDatei+" <-- wurde geändert\n\nWollen Sie die geänderte Fassung in die Patienten-Dokumentation übernehmen?", "Wichtige Benutzeranfrage", JOptionPane.YES_NO_OPTION);
2802 if(frage == JOptionPane.YES_OPTION){
2803 geaendert = false;
2804 try {
2805 Reha.thisClass.patpanel.dokumentation.setCursor(Reha.thisClass.wartenCursor);
2806 int nummer = SqlInfo.erzeugeNummer("doku");
2807 eltern.speichernOoDocs(nummer, -1, datei, -1, null, neu);
2808 } catch (Exception e) {
2809 e.printStackTrace();
2814 }.start();
2815 arg0.getDocument().removeDocumentListener(this);
2816 }else{
2817 //System.out.println("else");
2818 //System.out.println("Datei equals(file) = "+datei.equals(file));
2819 //System.out.println("Datei = "+datei);
2820 //System.out.println("File = "+file);
2821 //System.out.println("geändert = "+geaendert);
2822 arg0.getDocument().removeDocumentListener(this);
2824 } catch (NumberFormatException e) {
2825 e.printStackTrace();
2826 } catch (Exception e) {
2827 e.printStackTrace();
2831 @Override
2832 public void disposing(IEvent arg0) {
2834 if(!warschoninsave){
2835 try {
2836 IDocument doc = this.document;
2837 if(doc == null){
2838 //System.out.println("doc=null");
2839 return;
2841 String file = doc.getLocationURL().toString().replaceAll("file:/", "");
2842 if(geaendert && datei.equals(file)){
2843 final String xfile = file;
2844 final int xid = Integer.parseInt(id);
2846 Thread.sleep(50);
2847 new Thread(){
2848 public void run(){
2849 int frage = JOptionPane.showConfirmDialog(null, "Die Dokumentationsdatei "+xfile+" wurde geändert\n\nWollen Sie die geänderte Fassung in die Patienten-Dokumentation übernehmen?", "Wichtige Benutzeranfrage", JOptionPane.YES_NO_OPTION);
2850 if(frage == JOptionPane.YES_OPTION){
2851 geaendert = false;
2852 try {
2853 Reha.thisClass.patpanel.dokumentation.setCursor(Reha.thisClass.wartenCursor);
2854 Dokumentation.speichernOoDocs(xid, -1, xfile, -1, null, neu);
2855 } catch (Exception e) {
2856 // TODO Auto-generated catch block
2857 e.printStackTrace();
2862 //Reha.officeapplication.getDesktopService().removeDocumentListener(this);
2863 //System.out.println("Listener entfernt - Datei geändert "+xfile);
2865 }.start();
2866 doc.removeDocumentListener(this);
2867 }else if(datei.equals(file) && !geaendert){
2868 doc.removeDocumentListener(this);
2869 //System.out.println("Listener entfernt - Datei nicht geändert"+file);
2871 warschoninsave = true;
2873 } catch (ag.ion.bion.officelayer.document.DocumentException e) {
2874 e.printStackTrace();
2875 } catch (NumberFormatException e) {
2876 e.printStackTrace();
2877 } catch (Exception e) {
2878 e.printStackTrace();
2881 }else{
2882 //System.out.println("warschoninsave = "+warschoninsave);