PageRenderTime 27ms CodeModel.GetById 10ms RepoModel.GetById 0ms app.codeStats 0ms

/src/mpv5/ui/dialogs/subcomponents/wizard_AccountXMLImport_1.java

http://mp-rechnungs-und-kundenverwaltung.googlecode.com/
Java | 247 lines | 204 code | 31 blank | 12 comment | 10 complexity | 80a117f30e41a17f3e4f60627f22cdc8 MD5 | raw file
Possible License(s): LGPL-3.0, Apache-2.0, GPL-3.0, GPL-2.0, AGPL-3.0, JSON, BSD-3-Clause
  1. package mpv5.ui.dialogs.subcomponents;
  2. import java.awt.Cursor;
  3. import java.io.File;
  4. import java.util.ArrayList;
  5. import java.util.Arrays;
  6. import java.util.HashMap;
  7. import java.util.List;
  8. import java.util.Vector;
  9. import java.util.concurrent.ExecutionException;
  10. import java.util.logging.Level;
  11. import java.util.logging.Logger;
  12. import javax.swing.SwingUtilities;
  13. import javax.swing.SwingWorker;
  14. import javax.swing.text.TableView.TableRow;
  15. import mpv5.db.common.DatabaseObject;
  16. import mpv5.db.objects.Account;
  17. import mpv5.globals.Messages;
  18. import mpv5.logging.Log;
  19. import mpv5.ui.dialogs.Popup;
  20. import mpv5.ui.dialogs.WizardMaster;
  21. import mpv5.ui.dialogs.Wizardable;
  22. import mpv5.utils.models.ImportTableModel;
  23. import mpv5.utils.tables.TableFormat;
  24. import mpv5.utils.xml.XMLReader;
  25. /**
  26. *
  27. *
  28. */
  29. public class wizard_AccountXMLImport_1 extends javax.swing.JPanel implements Wizardable {
  30. private static final long serialVersionUID = -8347532498124147821L;
  31. private WizardMaster master;
  32. private boolean isConsumed = false;
  33. public wizard_AccountXMLImport_1(WizardMaster w) {
  34. this.master = w;
  35. initComponents();
  36. }
  37. private void importXML() {
  38. master.setCursor(new Cursor(Cursor.WAIT_CURSOR));
  39. isConsumed = true;
  40. XMLReader x;
  41. ArrayList<ArrayList<DatabaseObject>> objs = null;
  42. if (master.getStore().hasProperty("file")) {
  43. x = new XMLReader();
  44. x.setOverwriteExisting(true);
  45. try {
  46. x.newDoc(new File(master.getStore().getProperty("file")), false);
  47. objs = x.getObjects();
  48. jTable1.setModel(ImportTableModel.getModel(objs, false));
  49. jLabel2.setText(jLabel2.getText() + " " + master.getStore().getProperty("file") + " (" + jTable1.getRowCount() + ")");
  50. TableFormat.format(jTable1, 0, 0);
  51. TableFormat.format(jTable1, 1, 0);
  52. TableFormat.format(jTable1, 2, 100);
  53. } catch (Exception ex) {
  54. Popup.error(ex);
  55. Log.Debug(ex);
  56. } finally {
  57. master.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
  58. }
  59. }
  60. }
  61. private void imports() {
  62. jProgressBar1.setMinimum(0);
  63. jProgressBar1.setMaximum(jTable1.getRowCount());
  64. final List<Account> accs = new Vector<Account>();
  65. final HashMap<Integer, Account> daccs = new HashMap<Integer, Account>();
  66. Runnable runnable = new Runnable() {
  67. public void run() {
  68. int imp = 0;
  69. String val = null;
  70. for (int i = 0; i < jTable1.getRowCount(); i++) {
  71. master.setCursor(new Cursor(Cursor.WAIT_CURSOR));
  72. final int p = i;
  73. try {
  74. DatabaseObject dog = ((DatabaseObject) jTable1.getValueAt(p, 0));
  75. accs.add((Account) dog);
  76. val = "<html><p><font color =green>Analysed ID: " + dog.__getIDS();
  77. imp++;
  78. } catch (Exception e) {
  79. val = "<html><p><font color =red>" + Messages.ERROR_OCCURED + ": " + e.getMessage();
  80. } finally {
  81. jTable1.setValueAt(val, p, 4);
  82. jProgressBar1.setValue(p);
  83. master.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
  84. }
  85. }
  86. jProgressBar1.setValue(0);
  87. master.setCursor(new Cursor(Cursor.WAIT_CURSOR));
  88. //find lowest parents (children of all accounts)
  89. for (int j = 0; j < accs.size(); j++) {
  90. Account account = accs.get(j);
  91. daccs.put(account.__getIDS(), account);
  92. account.setIDS(-1);
  93. }
  94. for (int i = 0; i < accs.size(); i++) {
  95. Account account = accs.get(i);
  96. account.setIntparentaccount(findParentAccount(account));
  97. account.saveImport();
  98. try {
  99. val = "<html><p><font color =green>Saved account " + account + " [" + account.__getIDS() +"]";
  100. } catch (Exception e) {
  101. val = "<html><p><font color =red>" + Messages.ERROR_OCCURED + ": " + e.getMessage();
  102. } finally {
  103. jTable1.setValueAt(val, i, 4);
  104. jProgressBar1.setValue(i);
  105. master.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
  106. }
  107. }
  108. jProgressBar1.setString(imp + " " + Messages.IMPORTED);
  109. }
  110. //recursion is a powerful, but slow beast..
  111. private int findParentAccount(Account account) {
  112. Account pa = daccs.get(account.__getIntparentaccount());
  113. if (pa == null) {
  114. return 1;
  115. } else if (pa.isExisting()) {
  116. return pa.__getIDS();
  117. } else {
  118. pa.setIntparentaccount(findParentAccount(pa));
  119. pa.saveImport();
  120. return pa.__getIDS();
  121. }
  122. }
  123. };
  124. new Thread(runnable).start();
  125. master.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
  126. master.isEnd(true);
  127. }
  128. // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
  129. private void initComponents() {
  130. jPanel1 = new javax.swing.JPanel();
  131. jLabel2 = new javax.swing.JLabel();
  132. jScrollPane1 = new javax.swing.JScrollPane();
  133. jTable1 = new javax.swing.JTable();
  134. jProgressBar1 = new javax.swing.JProgressBar();
  135. setBackground(new java.awt.Color(255, 255, 255));
  136. setName("Form"); // NOI18N
  137. setLayout(new java.awt.BorderLayout());
  138. jPanel1.setBackground(new java.awt.Color(255, 255, 255));
  139. java.util.ResourceBundle bundle = mpv5.i18n.LanguageManager.getBundle();
  140. jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(bundle.getString("wizard_AccountXMLImport_1.jPanel1.border.title"))); // NOI18N
  141. jPanel1.setName("jPanel1"); // NOI18N
  142. jLabel2.setText(bundle.getString("wizard_AccountXMLImport_1.jLabel2.text")); // NOI18N
  143. jLabel2.setName("jLabel2"); // NOI18N
  144. jScrollPane1.setName("jScrollPane1"); // NOI18N
  145. jTable1.setAutoCreateRowSorter(true);
  146. jTable1.setBorder(javax.swing.BorderFactory.createEtchedBorder());
  147. jTable1.setModel(new javax.swing.table.DefaultTableModel(
  148. new Object [][] {
  149. {null}
  150. },
  151. new String [] {
  152. "Title 1"
  153. }
  154. ));
  155. jTable1.setCellSelectionEnabled(true);
  156. jTable1.setDoubleBuffered(true);
  157. jTable1.setFillsViewportHeight(true);
  158. jTable1.setName("jTable1"); // NOI18N
  159. jScrollPane1.setViewportView(jTable1);
  160. jProgressBar1.setName("jProgressBar1"); // NOI18N
  161. jProgressBar1.setStringPainted(true);
  162. javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
  163. jPanel1.setLayout(jPanel1Layout);
  164. jPanel1Layout.setHorizontalGroup(
  165. jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  166. .addGroup(jPanel1Layout.createSequentialGroup()
  167. .addContainerGap()
  168. .addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, 399, Short.MAX_VALUE)
  169. .addContainerGap())
  170. .addComponent(jProgressBar1, javax.swing.GroupLayout.DEFAULT_SIZE, 423, Short.MAX_VALUE)
  171. .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  172. .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 423, Short.MAX_VALUE))
  173. );
  174. jPanel1Layout.setVerticalGroup(
  175. jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  176. .addGroup(jPanel1Layout.createSequentialGroup()
  177. .addComponent(jLabel2)
  178. .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 343, Short.MAX_VALUE)
  179. .addComponent(jProgressBar1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
  180. .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  181. .addGroup(jPanel1Layout.createSequentialGroup()
  182. .addGap(20, 20, 20)
  183. .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 337, Short.MAX_VALUE)
  184. .addGap(21, 21, 21)))
  185. );
  186. add(jPanel1, java.awt.BorderLayout.CENTER);
  187. }// </editor-fold>//GEN-END:initComponents
  188. // Variables declaration - do not modify//GEN-BEGIN:variables
  189. private javax.swing.JLabel jLabel2;
  190. private javax.swing.JPanel jPanel1;
  191. private javax.swing.JProgressBar jProgressBar1;
  192. private javax.swing.JScrollPane jScrollPane1;
  193. private javax.swing.JTable jTable1;
  194. // End of variables declaration//GEN-END:variables
  195. public boolean next() {
  196. try {
  197. imports();
  198. } catch (Exception e) {
  199. Log.Debug(e);
  200. master.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
  201. }
  202. return false;
  203. }
  204. public boolean back() {
  205. return true;
  206. }
  207. /**
  208. *
  209. */
  210. public void load() {
  211. if (!isConsumed) {
  212. Log.Debug(this, "Overwrite is set to " + master.getStore().getProperty("overwrite", false));
  213. importXML();
  214. }
  215. }
  216. }