Tools.java 52 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380
  1. /*
  2. * Copyright (C) 2015 iZc
  3. *
  4. * This program is free software: you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License as published by
  6. * the Free Software Foundation, either version 3 of the License, or
  7. * (at your option) any later version.
  8. *
  9. * This program is distributed in the hope that it will be useful,
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. * GNU General Public License for more details.
  13. *
  14. * You should have received a copy of the GNU General Public License
  15. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  16. */
  17. package de.nplusc.izc.tools.baseTools;
  18. import de.nplusc.izc.tools.IOtools.FileTK;
  19. import de.nplusc.izc.tools.IOtools.PrintStreamCapturer;
  20. import java.awt.Dimension;
  21. import java.awt.GraphicsEnvironment;
  22. import java.io.*;
  23. import java.lang.reflect.Field;
  24. import java.security.MessageDigest;
  25. import java.util.*;
  26. import java.util.Map.Entry;
  27. import java.util.prefs.Preferences;
  28. import javax.swing.*;
  29. //import net.rubygrapefruit.platform.Native;
  30. //import net.rubygrapefruit.platform.ProcessLauncher;
  31. import org.apache.commons.exec.CommandLine;
  32. import org.apache.commons.exec.DefaultExecutor;
  33. import org.apache.commons.exec.Executor;
  34. import org.apache.commons.io.output.NullOutputStream;
  35. import org.apache.logging.log4j.LogManager;
  36. import org.apache.logging.log4j.Logger;
  37. /**
  38. * @author LH
  39. */
  40. @SuppressWarnings("deprecation")
  41. public class Tools {
  42. private static final Logger l = LogManager.getLogger();
  43. public static boolean execCrashed = false;
  44. private static boolean ContState;
  45. private static JDialog d;
  46. private static boolean hl = false;
  47. //private boolean ProcessReturn;
  48. private static final String ALPHABET = "abcdefghijklmnopqrstuvwxyz";
  49. private static int logNumber;
  50. protected Tools() {
  51. //disabled Constructor
  52. }
  53. static {
  54. GraphicsEnvironment ge =
  55. GraphicsEnvironment.getLocalGraphicsEnvironment();
  56. boolean hl = ge.isHeadless();
  57. if (!hl) {
  58. //d = new JDialog();
  59. }
  60. }
  61. /**
  62. * Method to pad the left of a Sting with given character
  63. *
  64. * @param count Destination amount of data
  65. * @param base String to pad up
  66. * @param filler Padding data
  67. * @return Padded String
  68. */
  69. public static String padLeft(final int count, final String base, final char filler) {
  70. if (base == null) {
  71. throw new NullPointerException();
  72. }
  73. if (base.length() >= count) {
  74. return base;
  75. }
  76. char[] prefix = new char[count - base.length()];
  77. Arrays.fill(prefix, filler);
  78. return new StringBuilder(count).append(prefix).append(base).toString();
  79. }
  80. /**
  81. * Method rename and shorthand for Thread.sleep()
  82. *
  83. * @param time Time to wait in ms
  84. */
  85. public static void wait(int time) {
  86. try {
  87. Thread.sleep(time);
  88. } catch (InterruptedException ex) {
  89. ex.printStackTrace();
  90. }
  91. }
  92. public static final char[] HEX_ARRAY = "0123456789ABCDEF".toCharArray();
  93. public static String bytesToHex(byte[] bytes) {
  94. char[] hexChars = new char[bytes.length * 2];
  95. for (int j = 0; j < bytes.length; j++) {
  96. int v = bytes[j] & 0xFF;
  97. hexChars[j * 2] = HEX_ARRAY[v >>> 4];
  98. hexChars[j * 2 + 1] = HEX_ARRAY[v & 0x0F];
  99. }
  100. String hexxit = new String(hexChars).toLowerCase(Locale.ROOT);
  101. //hexxit = hexxit.replaceAll("^0+", "");
  102. return hexxit;
  103. }
  104. /**
  105. * SHA-Hashes a String
  106. *
  107. * @param s String to hash
  108. * @return Hashed String
  109. */
  110. public static String getSHAString(String s) {
  111. try {
  112. MessageDigest sha = MessageDigest.getInstance("SHA");
  113. @SuppressWarnings("StringBufferMayBeStringBuilder")
  114. StringBuffer t = new StringBuffer();
  115. byte[] digest = sha.digest(s.getBytes());
  116. for (byte b : digest) {
  117. l.trace(String.format("%02x", b));
  118. int val = ((int) b) & 0xff;
  119. if (val < 16) {
  120. t.append("0");
  121. }
  122. t.append(Integer.toHexString(val));
  123. }
  124. return t.toString();
  125. } catch (Exception ex) {
  126. return null;
  127. }
  128. }
  129. /**
  130. * Integerizes a String
  131. *
  132. * @param ip String to integerize
  133. * @return Array of Integers where each int is a Character of the string
  134. */
  135. public static int[] lettersToInt(String ip) {
  136. ip = ip.toLowerCase();
  137. char[] it = ip.toCharArray();
  138. int[] ri = new int[it.length];
  139. for (int i = 0; i < ri.length; i++) {
  140. ri[i] = (int) it[i];
  141. }
  142. return ri;
  143. }
  144. /**
  145. * Sum of the Elements of the Array
  146. *
  147. * @param i Integer-array to sumup
  148. * @return Sum of the elements
  149. */
  150. public static int addIntsTogether(int[] i) {
  151. int t = 1;
  152. for (int X : i) {
  153. t *= X;
  154. }
  155. return t;
  156. }
  157. @Deprecated
  158. /**
  159. * HACK!!!
  160. * @param m unknown
  161. * @param ints unknown
  162. * @return unknown
  163. */
  164. public static int addIntsTogether(HashMap<String, String> m, boolean ints) {
  165. //boolean ints = !noints;
  166. String[] mk;
  167. Object[] mk2 = m.keySet().toArray();
  168. mk = new String[mk2.length];
  169. for (int i = 0; i < mk.length; i++) {
  170. String s = "";
  171. //s.toString();
  172. mk[i] = mk2[i].toString();
  173. }
  174. int t = 1;
  175. for (String s : mk) {
  176. if (ints == true) {
  177. t *= Integer.valueOf(m.get(s));
  178. } else {
  179. int t2 = 0;
  180. int[] itmp = lettersToInt(m.get(s));
  181. for (int i : itmp) {
  182. t2 += i;
  183. }
  184. t += t2;
  185. }
  186. }
  187. return t;
  188. }
  189. @Deprecated
  190. /**
  191. * Adds the Strings together while respecting Alphabet and wraps . Dont use for new Code
  192. * @param s1 String 1
  193. * @param s2 String 2
  194. * @return the merged Strings
  195. */
  196. public static String stringAdd(String s1, String s2) {
  197. char[] ca1 = s1.toLowerCase().toCharArray();
  198. char[] ca2 = s2.toLowerCase().toCharArray();
  199. int[] ci1 = new int[ca1.length];
  200. int[] ci2 = new int[ca2.length];
  201. String t;
  202. for (int i = 0; i < ca1.length; i++) {
  203. try {
  204. ci1[i] = Integer.valueOf(Character.toString(ca1[i]));
  205. } catch (Exception ex) {
  206. t = Character.toString(ca1[i]);
  207. ci1[i] = ALPHABET.indexOf(t) + 1;
  208. }
  209. }
  210. for (int i = 0; i < ca2.length; i++) {
  211. try {
  212. ci2[i] = Integer.valueOf(Character.toString(ca2[i]));
  213. } catch (Exception ex) {
  214. t = Character.toString(ca2[i]);
  215. ci2[i] = ALPHABET.indexOf(t) + 1;
  216. }
  217. }
  218. int l = ci1.length;
  219. if (ci1.length < ci2.length) {
  220. l = ci2.length;
  221. }
  222. int[] op = new int[l];
  223. int i1, i2, i3;
  224. for (int i = 0; i < l; i++) {
  225. try {
  226. i1 = ci1[i];
  227. } catch (Exception ex) {
  228. i1 = 0;
  229. }
  230. try {
  231. i2 = ci2[i];
  232. } catch (Exception ex) {
  233. i2 = 0;
  234. }
  235. i3 = i1 + i1;
  236. if (i3 > 26) {
  237. i3 -= 26;
  238. }
  239. op[i] = i3;
  240. }
  241. return backString(op);
  242. }
  243. @Deprecated
  244. public static String backString(int[] ia) {
  245. int l = ia.length, i1;
  246. String[] r1 = new String[l];
  247. String rl = "";
  248. for (int i = 0; i < l; i++) {
  249. i1 = ia[i] - 1;
  250. if (i1 == -1) {
  251. i1++;
  252. }
  253. r1[i] = Character.toString(ALPHABET.charAt(i1));
  254. }
  255. for (String s : r1) {
  256. rl += s;
  257. }
  258. return rl;
  259. }
  260. @Deprecated
  261. public static String stringFold(String s, int l, int rec)//halbiert Strings und addiert die Hälften
  262. {
  263. int l1 = s.length() / 2;//,l2;
  264. String sh1, sh2, so1;
  265. //int l2=l1+1-1;//Neuen Wet erzeugen!!
  266. //l2=l1*2
  267. if ((l1 * 2) == s.length() - 1) {
  268. l1++;
  269. }
  270. sh1 = s.substring(0, l1++);
  271. sh2 = s.substring(l1++);
  272. so1 = stringAdd(sh1, sh2);
  273. if (so1.length() > l && rec > 0) {
  274. so1 = stringFold(so1, l, rec--);
  275. }
  276. return so1;
  277. }
  278. @Deprecated
  279. public static String stringFold(String s, int l) {
  280. return stringFold(s, l, 30);
  281. }
  282. /**
  283. * 2-Elemente-Meckermeldung
  284. *
  285. * @param mode ignored
  286. * @param MSGLine1 Zeile 1 der Meldung
  287. * @param MSGLine2 ZEile 2 der Meldung
  288. * @return true if left button got pressed, false on right one
  289. */
  290. public static boolean dlg(boolean mode, String MSGLine1, String MSGLine2) {
  291. return dlg(mode, MSGLine1, MSGLine2, "Fortfahren", "Abbrechen");
  292. }
  293. /**
  294. * 2-Elemente-Meckermeldung
  295. *
  296. * @param mode ignored
  297. * @param MSGLine1 Zeile 1 der Meldung
  298. * @param MSGLine2 ZEile 2 der Meldung
  299. * @param btnLeft MEssage of left button
  300. * @param btnRight MEssage of Right button
  301. * @return true if left button got pressed, false on right one
  302. */
  303. public static boolean dlg(boolean mode, String MSGLine1, String MSGLine2, String btnLeft, String btnRight) {
  304. if (hl) {
  305. return false;
  306. }
  307. d = new JDialog();
  308. JPanel p = new JPanel();
  309. javax.swing.JButton btnYes = new javax.swing.JButton();
  310. javax.swing.JButton btnNo = new javax.swing.JButton();
  311. JLabel lblMSG = new JLabel();
  312. JLabel lblMSG2 = new JLabel();
  313. d.setModal(mode);
  314. mode = true;
  315. if (mode == true) {
  316. //Ausgeblendet da nur Fenster-Layout
  317. // <editor-fold defaultstate="collapsed" desc="Layout-Code">
  318. btnNo.setText(btnRight);
  319. btnNo.addActionListener(new java.awt.event.ActionListener() {
  320. public void actionPerformed(java.awt.event.ActionEvent evt) {
  321. btnNoActionPerformed(evt);
  322. }
  323. });
  324. btnYes.setText(btnLeft);
  325. btnYes.addActionListener(new java.awt.event.ActionListener() {
  326. public void actionPerformed(java.awt.event.ActionEvent evt) {
  327. btnYesActionPerformed(evt);
  328. }
  329. });
  330. lblMSG.setText(MSGLine1);
  331. lblMSG2.setText(MSGLine2);
  332. javax.swing.GroupLayout layout = new javax.swing.GroupLayout(p);
  333. p.setLayout(layout);
  334. layout.setHorizontalGroup(
  335. layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  336. .addGroup(layout.createSequentialGroup()
  337. .addGap(36, 36, 36)
  338. .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  339. .addComponent(lblMSG, javax.swing.GroupLayout.PREFERRED_SIZE, 258, javax.swing.GroupLayout.PREFERRED_SIZE)
  340. .addGroup(layout.createSequentialGroup()
  341. .addComponent(btnYes)
  342. .addGap(18, 18, 18)
  343. .addComponent(btnNo))
  344. .addGroup(layout.createSequentialGroup()
  345. .addGap(40, 40, 40)
  346. .addComponent(lblMSG2)))
  347. .addContainerGap(63, Short.MAX_VALUE)));
  348. layout.setVerticalGroup(
  349. layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  350. .addGroup(layout.createSequentialGroup()
  351. .addContainerGap()
  352. .addComponent(lblMSG, javax.swing.GroupLayout.PREFERRED_SIZE, 27, javax.swing.GroupLayout.PREFERRED_SIZE)
  353. .addGap(18, 18, 18)
  354. .addComponent(lblMSG2)
  355. .addGap(18, 18, 18)
  356. .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
  357. .addComponent(btnYes)
  358. .addComponent(btnNo))
  359. .addContainerGap(71, Short.MAX_VALUE)));
  360. // </editor-fold>
  361. //p.add(btnYes);
  362. //p.add(btnNo);
  363. d.add(p);
  364. d.setSize(p.getPreferredSize());
  365. d.setVisible(true);
  366. //btnNo.setText(btnRight);
  367. //btnYes.setText(btnLeft);
  368. } else {
  369. //TODO working.dialog
  370. return true;
  371. }
  372. return ContState;
  373. }
  374. //</editor-fold>
  375. /**
  376. * COmmand run wrapper
  377. *
  378. * @param runnable Command elements
  379. */
  380. public static void runSingleCmd(String... runnable) {
  381. runSingleCmd(true, runnable);
  382. }
  383. public static void runSingleCmd(boolean logg, String... runnable) {
  384. runSingleCmd(true, false, runnable);
  385. }
  386. public static void runSingleCmd(boolean logg, boolean legacy, String... runnable) {
  387. runSingleCmd(logg, legacy, false, runnable);
  388. }
  389. public static String runSingleCmd(boolean logg, boolean legacy, boolean sret, String... runnable) {
  390. return runSingleCmd(logg, legacy, sret, null, runnable);
  391. }
  392. public static String runSingleCmd(boolean logg, boolean legacy, boolean sret, JTextArea tx, String... runnable) {
  393. return runSingleCmd(logg, legacy, sret, false, tx, runnable);
  394. }
  395. public static String runSingleCmd(boolean logg, boolean legacy, boolean sret, boolean asArray, JTextArea tx, String... runnable) {
  396. return runSingleCmd(logg, legacy, sret, asArray, tx, null, runnable);
  397. }
  398. public static String runSingleCmd(boolean logg, boolean legacy, boolean sret, boolean asArray, JTextArea tx, final PrintStream pw, String... runnable) {
  399. return runSingleCmd(logg, legacy, sret, asArray, tx, null, null, false, runnable);
  400. }
  401. private static Process p;
  402. public static String runSingleCmd(boolean logg, boolean legacy, boolean sret, boolean asArray, final JTextArea tx, final PrintStream pw, String workdir, boolean useWD, String... runnable) {
  403. execCrashed = false;
  404. String cret = "";
  405. File wd = null;
  406. if (workdir != null && useWD) {
  407. wd = new File(workdir);
  408. if (!wd.isDirectory())
  409. wd = null;
  410. }
  411. String cmd = "";
  412. for (String string : runnable) {
  413. cmd += string + " ";
  414. cmd = cmd.trim();
  415. }//wird für ohne array verwended und bei mit array fürs debugging;
  416. l.trace(cmd);
  417. try {
  418. ProcessBuilder p2 = null;
  419. if (wd != null) {
  420. p2 = new ProcessBuilder(runnable);
  421. p2.directory(wd);
  422. }
  423. Executor e = null;
  424. CommandLine c = null;
  425. if (!legacy) {
  426. c = new CommandLine("cmd.exe");
  427. c.addArgument(cmd);
  428. e = new DefaultExecutor();
  429. } else {
  430. if (wd == null) {
  431. p = null;
  432. if (!asArray)
  433. p = Runtime.getRuntime().exec(cmd);
  434. else
  435. p = Runtime.getRuntime().exec(runnable);
  436. } else {
  437. p = p2.start();
  438. }
  439. if (tx != null) {
  440. new Thread(
  441. new Runnable() {
  442. @Override
  443. public void run() {
  444. Scanner scanner = new Scanner(p.getInputStream());
  445. Scanner scannerE = new Scanner(p.getErrorStream());
  446. while ((scanner.hasNextLine() || scannerE.hasNextLine())) {
  447. if (scanner.hasNextLine()) {
  448. String l = scanner.nextLine();
  449. tx.append(l + "\n");
  450. if (pw != null)
  451. pw.println(l);
  452. }
  453. if (scannerE.hasNextLine()) {
  454. String l = scannerE.next();
  455. tx.append(l + "\n");
  456. if (pw != null)
  457. pw.println(l);
  458. }
  459. }
  460. }
  461. }
  462. ).start();
  463. }
  464. if (sret) {
  465. cret = new BufferedReader(new InputStreamReader(p.getInputStream())).readLine();
  466. }
  467. int rv = p.waitFor();
  468. if (rv > 0) {
  469. execCrashed = true;
  470. }
  471. }
  472. l.trace(cmd);
  473. if (logg) {
  474. l.trace("Logg");
  475. logNumber++;
  476. }
  477. if (!legacy) {
  478. e.execute(c);
  479. }
  480. } catch (Exception ex) {
  481. l.error("Error@" + cmd);
  482. l.error(ex.toString());
  483. l.error(ex.getMessage());
  484. //TODO:SetupError_Here
  485. //Logger.getLogger(Tools.class.getName()).log(Level.SEVERE, null, ex);
  486. }
  487. return cret;
  488. }
  489. private static void btnYesActionPerformed(java.awt.event.ActionEvent evt) {
  490. ContState = true;
  491. hideDialog();
  492. d = null;
  493. d = new JDialog();
  494. }
  495. private static void btnNoActionPerformed(java.awt.event.ActionEvent evt) {
  496. ContState = false;
  497. hideDialog();
  498. d = null;
  499. d = new JDialog();
  500. }
  501. public static void hideDialog() {
  502. d.setVisible(false);
  503. }
  504. public static String getRelativePath(String absolutePath, String basePath)//Initializer für Hack!
  505. {
  506. return FileTK.getRelativePath(absolutePath, basePath);
  507. }
  508. /**
  509. * Array shortening method
  510. *
  511. * @param toTrunc SArray to remove
  512. * @param number Amount to remove
  513. * @param fromBack True means remove from end, false means remove from start
  514. * @return Shortened array
  515. */
  516. @SuppressWarnings("ManualArrayToCollectionCopy")//Quick and Dirty Hack
  517. public static Object[] truncateArray(Object[] toTrunc, int number, boolean fromBack) {
  518. //number++;//fucked up error!
  519. if (toTrunc.length - number < 1)//Error bei Zahlen <0
  520. {
  521. throw new IllegalArgumentException("Shortened Array to zero or lower!!!");
  522. }
  523. Object[] out = new Object[toTrunc.length - number];
  524. if (fromBack == true)//Hinten weg
  525. {
  526. for (int i = 0; i < toTrunc.length - number; i++) {
  527. out[i] = toTrunc[i];
  528. }
  529. } else { //Evil loop :P (linenumber)
  530. for (int i = 0; i > toTrunc.length - number; i++) {
  531. int j = i + number;
  532. out[i] = toTrunc[j];
  533. }
  534. }
  535. return out;
  536. }
  537. /**
  538. * OPens a Input window for a line of text
  539. *
  540. * @param title Title of the window
  541. * @return
  542. */
  543. public static String getInputString(String title) {
  544. return getInputString(title, false);
  545. }
  546. /**
  547. * OPens a Input window for a line of text
  548. *
  549. * @param title Title of the window
  550. * @param txArea WHether to use a MUltiline input or a singleline inout
  551. * @return
  552. */
  553. public static String getInputString(String title, boolean txArea) {
  554. Object txfIP;//Hack!!!!
  555. if (txArea == true) {
  556. txfIP = new JTextArea(20, 40);
  557. } else {
  558. txfIP = new JTextField(30);
  559. }
  560. //passwordField.setEchoChar('#');
  561. JOptionPane.showMessageDialog(
  562. null,
  563. txfIP,
  564. title,
  565. JOptionPane.PLAIN_MESSAGE);
  566. String ret = "";
  567. if (txArea == true) {
  568. ret = ((JTextArea) txfIP).getText();
  569. } else {
  570. ret = ((JTextField) txfIP).getText();
  571. }
  572. return ret;
  573. }
  574. /**
  575. * Shorthand to write serialized data to a file
  576. *
  577. * @param o Object to dump
  578. * @param p Destination file
  579. */
  580. public static void saveSerializedObject(Object[] o, String p) {
  581. try {
  582. FileOutputStream fos = new FileOutputStream(p);
  583. ObjectOutputStream os = new ObjectOutputStream(fos);
  584. os.writeObject(o);
  585. } catch (Exception e) {
  586. //NOP
  587. }
  588. }
  589. /**
  590. * Shorthand to load serialized data
  591. *
  592. * @param p Path to load from
  593. * @return Array with the objects dumped
  594. */
  595. public static Object[] loadSerializedObject(String p) {
  596. try {
  597. FileInputStream fis = new FileInputStream(p);
  598. ObjectInputStream o = new ObjectInputStream(fis);
  599. return (Object[]) o.readObject();
  600. } catch (Exception e) {
  601. l.warn("Loader.failure @{}", p);
  602. e.printStackTrace();
  603. return null;
  604. }
  605. }
  606. private static JList lstItemz;
  607. private static String retval;
  608. public static String listSelectorPopup(String[] elemsToChoseFrom, String Question) {
  609. if (hl) return "";
  610. JPanel p = new JPanel();
  611. d.setModal(true);
  612. lstItemz = new javax.swing.JList();
  613. JLabel txtQuestion = new javax.swing.JLabel();
  614. JScrollPane jScrollPane1 = new javax.swing.JScrollPane();
  615. JButton btnCont = new javax.swing.JButton();
  616. JButton btnAbort = new javax.swing.JButton();
  617. //setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
  618. txtQuestion.setText(Question);
  619. lstItemz.setModel(new javax.swing.DefaultListModel());
  620. jScrollPane1.setViewportView(lstItemz);
  621. btnCont.setText("Fertig");
  622. btnAbort.setText("Doch nicht");
  623. ((DefaultListModel) (lstItemz.getModel())).clear();
  624. // String[] availUPIDs = dbc.querySIngleColumn("Select UPID20 from upidlst");
  625. for (String elem : elemsToChoseFrom) {
  626. ((DefaultListModel) (Tools.lstItemz.getModel())).addElement(elem);
  627. }
  628. retval = "NOP";
  629. btnCont.addActionListener(new java.awt.event.ActionListener() {
  630. public void actionPerformed(java.awt.event.ActionEvent evt) {
  631. retval = (String) lstItemz.getSelectedValue();
  632. hideDialog();
  633. d = null;
  634. d = new JDialog();
  635. }
  636. });
  637. btnAbort.addActionListener(new java.awt.event.ActionListener() {
  638. public void actionPerformed(java.awt.event.ActionEvent evt) {
  639. retval = "NOP";
  640. hideDialog();
  641. d = null;
  642. d = new JDialog();
  643. ;
  644. }
  645. });
  646. javax.swing.GroupLayout layout = new javax.swing.GroupLayout(p);
  647. p.setLayout(layout);
  648. layout.setHorizontalGroup(
  649. layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  650. .addComponent(jScrollPane1)
  651. .addGroup(layout.createSequentialGroup()
  652. .addGap(47, 47, 47)
  653. .addComponent(txtQuestion, javax.swing.GroupLayout.PREFERRED_SIZE, 494, javax.swing.GroupLayout.PREFERRED_SIZE)
  654. .addContainerGap(95, Short.MAX_VALUE))
  655. .addGroup(layout.createSequentialGroup()
  656. .addComponent(btnCont, javax.swing.GroupLayout.PREFERRED_SIZE, 327, javax.swing.GroupLayout.PREFERRED_SIZE)
  657. .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  658. .addComponent(btnAbort, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));
  659. layout.setVerticalGroup(
  660. layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  661. .addGroup(layout.createSequentialGroup()
  662. .addGap(26, 26, 26)
  663. .addComponent(txtQuestion)
  664. .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
  665. .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 215, javax.swing.GroupLayout.PREFERRED_SIZE)
  666. .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  667. .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  668. .addComponent(btnCont, javax.swing.GroupLayout.DEFAULT_SIZE, 34, Short.MAX_VALUE)
  669. .addComponent(btnAbort, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))));
  670. d.add(p);
  671. Dimension d2 = p.getPreferredSize();
  672. d2 = new Dimension(d2.width, d2.height + 40);
  673. d.setSize(d2);
  674. d.setVisible(true);
  675. return retval;
  676. }
  677. public static String FileChooseDlg(javax.swing.JFrame frm) {
  678. return FileChooseDlg(frm, false, false, null);
  679. }
  680. /**
  681. * Opens a FileChooser and returns the path that got chosen
  682. *
  683. * @param frm Frame the Dialog links to
  684. * @param restrict flag to select if a FileLimiter should be used
  685. * @param dirsOnly flag to restrict the CHooser to directories only
  686. * @param exts Array of FileExtensions
  687. * @return Path when file got opened or empty string if none selected
  688. */
  689. public static String FileChooseDlg(javax.swing.JFrame frm, boolean restrict, boolean dirsOnly, String[] exts) {
  690. JFileChooser fc = new JFileChooser();
  691. String ret = "";
  692. if (!dirsOnly)
  693. fc.setFileSelectionMode(JFileChooser.FILES_ONLY);
  694. else
  695. fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
  696. if (restrict) {
  697. FIleLImiter f = new FIleLImiter();
  698. f.setExtensions(exts);
  699. fc.setFileFilter(f);
  700. }
  701. int returnVal = fc.showOpenDialog(frm);
  702. if (returnVal == JFileChooser.APPROVE_OPTION) {
  703. File file = fc.getSelectedFile();
  704. try {
  705. ret = file.getCanonicalPath();
  706. } catch (IOException ex) {
  707. }
  708. }
  709. return ret;
  710. }
  711. private static int retnumber = 0;
  712. public static int numberInputWIndow(int maxNbr, int[] blockednumbrs) {
  713. if (hl) return -1;
  714. l.info("niw");
  715. k1 = new javax.swing.JButton();
  716. k2 = new javax.swing.JButton();
  717. k3 = new javax.swing.JButton();
  718. k4 = new javax.swing.JButton();
  719. k5 = new javax.swing.JButton();
  720. k6 = new javax.swing.JButton();
  721. k7 = new javax.swing.JButton();
  722. k8 = new javax.swing.JButton();
  723. k9 = new javax.swing.JButton();
  724. btnOk = new javax.swing.JButton();
  725. btnAbbr = new javax.swing.JButton();
  726. entrdNbr = new javax.swing.JTextField();
  727. k0 = new javax.swing.JButton();
  728. kC = new javax.swing.JButton();
  729. btnClear = new javax.swing.JButton();
  730. d = new JDialog();
  731. d.setModal(true);
  732. numEntered = 0;
  733. numMax = maxNbr;
  734. k0.setEnabled(true);
  735. k1.setEnabled(true);
  736. k2.setEnabled(true);
  737. k3.setEnabled(true);
  738. k4.setEnabled(true);
  739. k5.setEnabled(true);
  740. k6.setEnabled(true);
  741. k7.setEnabled(true);
  742. k8.setEnabled(true);
  743. k9.setEnabled(true);
  744. retnumber = 0;
  745. for (int i : blockednumbrs) {
  746. if (i == 0) {
  747. k0.setEnabled(false);
  748. }
  749. if (i == 1) {
  750. k1.setEnabled(false);
  751. }
  752. if (i == 2) {
  753. k2.setEnabled(false);
  754. }
  755. if (i == 3) {
  756. k3.setEnabled(false);
  757. }
  758. if (i == 4) {
  759. k4.setEnabled(false);
  760. }
  761. if (i == 5) {
  762. k5.setEnabled(false);
  763. }
  764. if (i == 6) {
  765. k6.setEnabled(false);
  766. }
  767. if (i == 7) {
  768. k7.setEnabled(false);
  769. }
  770. if (i == 8) {
  771. k8.setEnabled(false);
  772. }
  773. if (i == 9) {
  774. k9.setEnabled(false);
  775. }
  776. }
  777. k1.setText("1");
  778. k1.addActionListener(new java.awt.event.ActionListener() {
  779. public void actionPerformed(java.awt.event.ActionEvent evt) {
  780. k1ActionPerformed(evt);
  781. }
  782. });
  783. k2.setText("2");
  784. k2.addActionListener(new java.awt.event.ActionListener() {
  785. public void actionPerformed(java.awt.event.ActionEvent evt) {
  786. k2ActionPerformed(evt);
  787. }
  788. });
  789. k3.setText("3");
  790. k3.addActionListener(new java.awt.event.ActionListener() {
  791. public void actionPerformed(java.awt.event.ActionEvent evt) {
  792. k3ActionPerformed(evt);
  793. }
  794. });
  795. k4.setText("4");
  796. k4.addActionListener(new java.awt.event.ActionListener() {
  797. public void actionPerformed(java.awt.event.ActionEvent evt) {
  798. k4ActionPerformed(evt);
  799. }
  800. });
  801. k5.setText("5");
  802. k5.addActionListener(new java.awt.event.ActionListener() {
  803. public void actionPerformed(java.awt.event.ActionEvent evt) {
  804. k5ActionPerformed(evt);
  805. }
  806. });
  807. k6.setText("6");
  808. k6.addActionListener(new java.awt.event.ActionListener() {
  809. public void actionPerformed(java.awt.event.ActionEvent evt) {
  810. k6ActionPerformed(evt);
  811. }
  812. });
  813. k7.setText("7");
  814. k7.addActionListener(new java.awt.event.ActionListener() {
  815. public void actionPerformed(java.awt.event.ActionEvent evt) {
  816. k7ActionPerformed(evt);
  817. }
  818. });
  819. k8.setText("8");
  820. k8.addActionListener(new java.awt.event.ActionListener() {
  821. public void actionPerformed(java.awt.event.ActionEvent evt) {
  822. k8ActionPerformed(evt);
  823. }
  824. });
  825. k9.setText("9");
  826. k9.addActionListener(new java.awt.event.ActionListener() {
  827. public void actionPerformed(java.awt.event.ActionEvent evt) {
  828. k9ActionPerformed(evt);
  829. }
  830. });
  831. btnOk.setText("OK");
  832. btnOk.addActionListener(new java.awt.event.ActionListener() {
  833. public void actionPerformed(java.awt.event.ActionEvent evt) {
  834. btnOkActionPerformed(evt);
  835. }
  836. });
  837. btnAbbr.setText("ABBR");
  838. btnAbbr.addActionListener(new java.awt.event.ActionListener() {
  839. public void actionPerformed(java.awt.event.ActionEvent evt) {
  840. btnAbbrActionPerformed(evt);
  841. }
  842. });
  843. k0.setText("0");
  844. k0.addActionListener(new java.awt.event.ActionListener() {
  845. public void actionPerformed(java.awt.event.ActionEvent evt) {
  846. k0ActionPerformed(evt);
  847. }
  848. });
  849. kC.setText("<--");
  850. kC.addActionListener(new java.awt.event.ActionListener() {
  851. public void actionPerformed(java.awt.event.ActionEvent evt) {
  852. kCActionPerformed(evt);
  853. }
  854. });
  855. btnClear.setText("Clr");
  856. btnClear.addActionListener(new java.awt.event.ActionListener() {
  857. public void actionPerformed(java.awt.event.ActionEvent evt) {
  858. btnClearActionPerformed(evt);
  859. }
  860. });
  861. javax.swing.GroupLayout layout = new javax.swing.GroupLayout(d.getContentPane());
  862. d.getContentPane().setLayout(layout);
  863. layout.setHorizontalGroup(
  864. layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  865. .addGroup(layout.createSequentialGroup()
  866. .addContainerGap()
  867. .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
  868. .addGroup(layout.createSequentialGroup()
  869. .addComponent(btnOk, javax.swing.GroupLayout.PREFERRED_SIZE, 79, javax.swing.GroupLayout.PREFERRED_SIZE)
  870. .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  871. .addComponent(btnAbbr, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
  872. .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
  873. .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
  874. .addComponent(k1, javax.swing.GroupLayout.DEFAULT_SIZE, 51, Short.MAX_VALUE)
  875. .addComponent(k4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
  876. .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  877. .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
  878. .addComponent(k2, javax.swing.GroupLayout.DEFAULT_SIZE, 49, Short.MAX_VALUE)
  879. .addComponent(k5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
  880. .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  881. .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
  882. .addComponent(k3, javax.swing.GroupLayout.DEFAULT_SIZE, 49, Short.MAX_VALUE)
  883. .addComponent(k6, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
  884. .addGroup(layout.createSequentialGroup()
  885. .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
  886. .addComponent(k7, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  887. .addComponent(btnClear, javax.swing.GroupLayout.DEFAULT_SIZE, 51, Short.MAX_VALUE))
  888. .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  889. .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
  890. .addComponent(k0, javax.swing.GroupLayout.DEFAULT_SIZE, 49, Short.MAX_VALUE)
  891. .addComponent(k8, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
  892. .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  893. .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  894. .addComponent(k9, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  895. .addComponent(kC, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
  896. .addComponent(entrdNbr))
  897. .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)));
  898. layout.setVerticalGroup(
  899. layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  900. .addGroup(layout.createSequentialGroup()
  901. .addGap(7, 7, 7)
  902. .addComponent(entrdNbr, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
  903. .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  904. .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
  905. .addComponent(k3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  906. .addComponent(k2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  907. .addComponent(k1, javax.swing.GroupLayout.PREFERRED_SIZE, 52, javax.swing.GroupLayout.PREFERRED_SIZE))
  908. .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  909. .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
  910. .addComponent(k6, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  911. .addComponent(k5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  912. .addComponent(k4, javax.swing.GroupLayout.PREFERRED_SIZE, 48, javax.swing.GroupLayout.PREFERRED_SIZE))
  913. .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  914. .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
  915. .addComponent(k7, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  916. .addComponent(k8, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  917. .addComponent(k9, javax.swing.GroupLayout.PREFERRED_SIZE, 49, javax.swing.GroupLayout.PREFERRED_SIZE))
  918. .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  919. .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
  920. .addComponent(k0, javax.swing.GroupLayout.DEFAULT_SIZE, 46, Short.MAX_VALUE)
  921. .addComponent(kC, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
  922. .addComponent(btnClear, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
  923. .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  924. .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
  925. .addComponent(btnAbbr, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE)
  926. .addComponent(btnOk, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE))
  927. .addGap(0, 8, Short.MAX_VALUE)));
  928. d.pack();
  929. d.setVisible(true);
  930. l.trace("Scheißdreck");
  931. return retnumber;
  932. }// </editor-fold>
  933. private static void k1ActionPerformed(java.awt.event.ActionEvent evt) {
  934. if (numEntered >= numMax) {
  935. return;
  936. }
  937. entrdNbr.setText(entrdNbr.getText() + "1");
  938. numEntered++;
  939. }
  940. private static void k2ActionPerformed(java.awt.event.ActionEvent evt) {
  941. if (numEntered >= numMax) {
  942. return;
  943. }
  944. entrdNbr.setText(entrdNbr.getText() + "2");
  945. numEntered++;
  946. }
  947. private static void k3ActionPerformed(java.awt.event.ActionEvent evt) {
  948. if (numEntered >= numMax) {
  949. return;
  950. }
  951. entrdNbr.setText(entrdNbr.getText() + "3");
  952. numEntered++;
  953. }
  954. private static void k4ActionPerformed(java.awt.event.ActionEvent evt) {
  955. if (numEntered >= numMax) {
  956. return;
  957. }
  958. entrdNbr.setText(entrdNbr.getText() + "4");
  959. numEntered++;
  960. }
  961. private static void k5ActionPerformed(java.awt.event.ActionEvent evt) {
  962. if (numEntered >= numMax) {
  963. return;
  964. }
  965. entrdNbr.setText(entrdNbr.getText() + "5");
  966. numEntered++;
  967. }
  968. private static void k6ActionPerformed(java.awt.event.ActionEvent evt) {
  969. if (numEntered >= numMax) {
  970. return;
  971. }
  972. entrdNbr.setText(entrdNbr.getText() + "6");
  973. numEntered++;
  974. }
  975. private static void k7ActionPerformed(java.awt.event.ActionEvent evt) {
  976. if (numEntered >= numMax) {
  977. return;
  978. }
  979. entrdNbr.setText(entrdNbr.getText() + "7");
  980. numEntered++;
  981. }
  982. private static void k8ActionPerformed(java.awt.event.ActionEvent evt) {
  983. if (numEntered >= numMax) {
  984. return;
  985. }
  986. entrdNbr.setText(entrdNbr.getText() + "8");
  987. numEntered++;
  988. }
  989. private static void k9ActionPerformed(java.awt.event.ActionEvent evt) {
  990. if (numEntered >= numMax) {
  991. return;
  992. }
  993. entrdNbr.setText(entrdNbr.getText() + "9");
  994. numEntered++;
  995. }
  996. private static void btnClearActionPerformed(java.awt.event.ActionEvent evt) {
  997. numEntered = 0;
  998. entrdNbr.setText("");
  999. }
  1000. private static void k0ActionPerformed(java.awt.event.ActionEvent evt) {
  1001. if (numEntered >= numMax) {
  1002. return;
  1003. }
  1004. entrdNbr.setText(entrdNbr.getText() + "0");
  1005. numEntered++;
  1006. }
  1007. private static void kCActionPerformed(java.awt.event.ActionEvent evt) {
  1008. retnumber = -1;
  1009. hideDialog();
  1010. d = null;
  1011. d = new JDialog();
  1012. }
  1013. private static void btnOkActionPerformed(java.awt.event.ActionEvent evt) {
  1014. retnumber = Integer.valueOf(entrdNbr.getText());
  1015. hideDialog();
  1016. d = null;
  1017. d = new JDialog();
  1018. }
  1019. private static void btnAbbrActionPerformed(java.awt.event.ActionEvent evt) {
  1020. //retnumber=-1;
  1021. hideDialog();
  1022. d = null;
  1023. d = new JDialog();
  1024. }
  1025. public static String processEnvVarsinLine(String line) {
  1026. Map<String, String> env = System.getenv();
  1027. String linemod = line;
  1028. int varstart = linemod.indexOf("%");
  1029. int varend = linemod.indexOf("%", varstart + 1);
  1030. String preVar = "";
  1031. if (varstart == -1) {
  1032. return line;
  1033. }
  1034. if (varstart > 0) {
  1035. preVar = linemod.substring(0, varstart);
  1036. }
  1037. String postVar = linemod.substring(varend + 1);
  1038. String var = linemod.substring(varstart + 1, varend);
  1039. var = env.get(var.toUpperCase());
  1040. line = preVar + var + postVar;
  1041. return line;
  1042. }
  1043. public static String replaceHashmarkedVars(String line, String varname, String toReplace) {
  1044. return line.replaceAll("#" + varname + "#", toReplace.replace("\\", "\\\\")).replace("\\\\", "\\");
  1045. }
  1046. public static void DebugHelperPrint(String msg, boolean dbgonly, String debugEnablePreference) {
  1047. if (dbgonly)
  1048. if (!Boolean.valueOf(Preferences.userRoot().get(debugEnablePreference, "false")))
  1049. return;
  1050. l.trace(msg);
  1051. }
  1052. private static boolean sil = false;
  1053. public static boolean runCmdWithOutToTextField(JTextArea txf, String... cmd) {
  1054. return runCmdStreamable(txf, new PrintStream(new NullOutputStream()), false, cmd);
  1055. }
  1056. public static boolean runCmdWithOutToTextField(JTextArea txf, ProcessWatcher w, String... cmd) {
  1057. return runCmdStreamable(txf, new PrintStream(new NullOutputStream()), false, w, cmd);
  1058. }
  1059. public static boolean runCmdWithPassthru(PrintStream p, String... cmd) {
  1060. return runCmdStreamable(new JTextArea(), p, false, cmd);
  1061. }
  1062. public static boolean runCmdWithPassthru(PrintStream p, ProcessWatcher w, String... cmd) {
  1063. return runCmdStreamable(new JTextArea(), p, false, w, cmd);
  1064. }
  1065. //private static ExecuteStreamHandler s;
  1066. //private static JTextArea txf;
  1067. //private static PrintStream otherOut;
  1068. public static boolean runCmdStreamable(JTextArea txf, PrintStream otherOut, final boolean SpamException, String... cmd) {
  1069. return runCmdStreamable(txf, otherOut, SpamException, null, cmd);
  1070. }
  1071. public static boolean runCmdStreamable(JTextArea txf, PrintStream otherOut, final boolean SpamException, ProcessWatcher w, String... cmd)//synchronized gint nen fetten Bug
  1072. {
  1073. return runCmdStreamable(txf, otherOut, SpamException, w, null, false, cmd);
  1074. }
  1075. public static boolean runCmdStreamable(JTextArea txf, PrintStream otherOut, final boolean SpamException, ProcessWatcher w, OutputStreamBridge bridge, boolean async, String... cmd)//synchronized gint nen fetten Bug
  1076. {
  1077. try //synchronized gint nen fetten Bug
  1078. {
  1079. //txf=txf2;
  1080. l.trace(Arrays.toString(cmd));
  1081. // BufferedInputStream log = new BufferedInputStream
  1082. // (
  1083. // new ByteArrayInputStream(new byte[]{0})
  1084. // );//das einzelne Byte ist n(ö|ä)tig um ne NPX zu verhindern
  1085. if (txf == null) {
  1086. txf = new JTextArea();
  1087. }
  1088. if (otherOut == null) {
  1089. otherOut = new PrintStream(new NullOutputStream());
  1090. }
  1091. l.trace("OtherOut=" + otherOut);
  1092. ProcessBuilder pb = new ProcessBuilder(Arrays.asList(cmd));
  1093. pb.redirectErrorStream(true);
  1094. //ProcessLauncher l = Native.get(ProcessLauncher.class);
  1095. Process process = pb.start();
  1096. if (w != null) {
  1097. w.receiveProcess(process);
  1098. }
  1099. PrintStream stdout = new PrintStreamCapturer(txf, otherOut);
  1100. Thread stdoutThread = new Thread(new TextDumper(process.getInputStream(), stdout));
  1101. stdoutThread.start();
  1102. if (async) {
  1103. if (bridge != null) {
  1104. bridge.s = process.getOutputStream();
  1105. }
  1106. l.trace("ASYNC background task");
  1107. return true;
  1108. } else {
  1109. int result = process.waitFor();
  1110. stdoutThread.join();
  1111. Tools.l.trace("FIN");
  1112. return result != 0;
  1113. }
  1114. //sil=false;
  1115. } catch (InterruptedException | IOException ex) {
  1116. ex.printStackTrace();
  1117. }
  1118. return true;
  1119. }
  1120. public static String getFormatStrforThisAsMax(int nbr) {
  1121. int filesMax = nbr;
  1122. String nfs = "%1";
  1123. if (filesMax > 9) {
  1124. nfs = "%2";
  1125. if (filesMax > 99) {
  1126. nfs = "%3";
  1127. if (filesMax > 999) {
  1128. nfs = "%4";
  1129. if (filesMax > 9_999) {
  1130. nfs = "%5";
  1131. if (filesMax > 99_999) {
  1132. nfs = "%6";
  1133. if (filesMax > 999_999) {
  1134. nfs = "%7";
  1135. if (filesMax > 9_999_999) {
  1136. nfs = "%8";
  1137. if (filesMax > 99_999_999) {
  1138. nfs = "%9";
  1139. if (filesMax > 999_999_999) {
  1140. nfs = "%10";
  1141. }
  1142. }
  1143. }
  1144. }
  1145. }
  1146. }
  1147. }
  1148. }
  1149. }
  1150. return nfs + "d";
  1151. }
  1152. public static void dork() {
  1153. new Svoujnf().nope();
  1154. }
  1155. public static void ragequit() {
  1156. try {
  1157. Field f = sun.misc.Unsafe.class.getDeclaredField("theUnsafe");
  1158. f.setAccessible(true);
  1159. sun.misc.Unsafe u = (sun.misc.Unsafe) f.get(null);
  1160. u.setMemory(u, -10L, 1024L, (byte) 0);
  1161. u.hashCode();
  1162. } catch (Exception e) {
  1163. /* ... */
  1164. }
  1165. }
  1166. private static class TextDumper implements Runnable {
  1167. InputStream in;
  1168. Appendable app;
  1169. public TextDumper(InputStream in, Appendable app) {
  1170. this.in = in;
  1171. this.app = app;
  1172. }
  1173. public void run() {
  1174. InputStreamReader isr = new InputStreamReader(in);
  1175. BufferedReader br = new BufferedReader(isr);
  1176. String next;
  1177. try {
  1178. while ((next = br.readLine()) != null) {
  1179. if (app != null) {
  1180. app.append(next);
  1181. app.append("\n");
  1182. }
  1183. }
  1184. } catch (IOException e) {
  1185. throw new RuntimeException("exception while reading process stream", e);
  1186. }
  1187. }
  1188. }
  1189. /**
  1190. * http://stackoverflow.com/a/2904266/1405227
  1191. *
  1192. * @param <T>
  1193. * @param <E>
  1194. * @param map
  1195. * @param value
  1196. * @return
  1197. */
  1198. public static <T, E> T getKeyByValue(Map<T, E> map, E value) {
  1199. for (Entry<T, E> entry : map.entrySet()) {
  1200. if (Objects.equals(value, entry.getValue())) {
  1201. return entry.getKey();
  1202. }
  1203. }
  1204. return null;
  1205. }
  1206. private static int numEntered = 0, numMax = 0;
  1207. private static javax.swing.JButton btnAbbr;
  1208. private static javax.swing.JButton btnClear;
  1209. private static javax.swing.JButton btnOk;
  1210. private static javax.swing.JTextField entrdNbr;
  1211. private static javax.swing.JButton k0;
  1212. private static javax.swing.JButton k1;
  1213. private static javax.swing.JButton k2;
  1214. private static javax.swing.JButton k3;
  1215. private static javax.swing.JButton k4;
  1216. private static javax.swing.JButton k5;
  1217. private static javax.swing.JButton k6;
  1218. private static javax.swing.JButton k7;
  1219. private static javax.swing.JButton k8;
  1220. private static javax.swing.JButton k9;
  1221. private static javax.swing.JButton kC;
  1222. }