/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package entity.system;
import op.OPDE;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.Query;
import javax.swing.*;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
/**
* @author tloehr
*/
public class SYSPropsTools {
// this key is needed, when the hardware key generation fails. need something to encrypt the passwords with.
public static final String KEY_HOSTKEY = "hostkey";
// vital parameters. needs to be present
public static final String KEY_CASH_PAGEBREAK = "cash_pagebreak_after_element_no";
public static final String BHP_MAX_MINUTES_TO_WITHDRAW = "bhp_max_minutes_to_withdraw";
public static final String DFN_MAX_MINUTES_TO_WITHDRAW = "dfn_max_minutes_to_withdraw";
public static final String KEY_STATION = "station";
// Other parameters
public static final String KEY_PHYSICAL_PRINTER = "printer.physical.name";
public static final String KEY_LOGICAL_PRINTER = "printer.logical.name";
public static final String KEY_MEDSTOCK_LABEL = "printer.medstock.label.name";
// public static final String KEY_COUNTRY = "country";
public static final String KEY_MAIL_HOST = "mail.smtp.host";
public static final String KEY_MAIL_SPAMFILTER_KEY = "mail.spamfilter.key";
public static final String KEY_MAIL_TESTKEY = "mail.testkey";
public static final String KEY_MAIL_PORT = "mail.smtp.port";
public static final String KEY_MAIL_PROTOCOL = "mail.transport.protocol";
public static final String KEY_MAIL_AUTH = "mail.smtp.auth";
public static final String KEY_MAIL_STARTTLS = "mail.smtp.starttls.enable";
public static final String KEY_MAIL_TLS = "mail.smtp.tls";
public static final String KEY_MAIL_USER = "mail.smtp.user";
public static final String KEY_MAIL_PASSWORD = "mail.password";
public static final String KEY_MAIL_SENDER = "mail.sender";
public static final String KEY_MAIL_RECIPIENT = "mail.recipient";
public static final String KEY_MAIL_SENDER_PERSONAL = "mail.sender.personal";
public static final String KEY_MAIL_RECIPIENT_PERSONAL = "mail.recipient.personal";
public static final String KEY_MAIL_SYSTEM_ACTIVE = "mail.system.active";
public static final String KEY_FTP_HOST = "FTPServer";
public static final String KEY_FTP_USER = "FTPUser";
public static final String KEY_FTP_PASSWORD = "FTPPassword";
public static final String KEY_FTP_WD = "FTPWorkingDirectory";
public static final String KEY_FTP_PORT = "FTPPort";
public static final String KEY_FTP_IS_WORKING = "FTPIsWorking";
public static final String KEY_DB_VERSION = "dbstructure";
public static final String KEY_MYSQLDUMP_EXEC = "mysqldump";
public static final String KEY_JDBC_HOST = "javax.persistence.jdbc.host";
public static final String KEY_JDBC_PORT = "javax.persistence.jdbc.port";
public static final String KEY_JDBC_CATALOG = "javax.persistence.jdbc.catalog";
public static final String KEY_JDBC_USER = "javax.persistence.jdbc.user";
public static final String KEY_JDBC_DRIVER = "javax.persistence.jdbc.driver";
public static final String KEY_JDBC_PASSWORD = "javax.persistence.jdbc.password";
public static final String KEY_JDBC_URL = "javax.persistence.jdbc.url";
public static final String KEY_JDBC_ROOTUSER = "javax.persistence.jdbc.rootuser";
public static final String KEY_CALC_MEDI_UPR1 = "calc.medi.upr1";
public static final String KEY_CALC_MEDI_OTHER = "calc.medi.other"; // yet unused
public static final String KEY_MAINTENANCE_MODE = "system.maintenance.mode";
public static final String KEY_CALC_MEDI_UPR_CORRIDOR = "apv_korridor";
public static final String KEY_VERY_EARLY_FGSHIFT = "VERY_EARLY_FGSHIFT";
public static final String KEY_VERY_EARLY_BGSHIFT = "VERY_EARLY_BGSHIFT";
public static final String KEY_VERY_EARLY_FGITEM = "VERY_EARLY_FGITEM";
public static final String KEY_VERY_EARLY_BGITEM = "VERY_EARLY_BGITEM";
public static final String KEY_EARLY_FGSHIFT = "EARLY_FGSHIFT";
public static final String KEY_EARLY_BGSHIFT = "EARLY_BGSHIFT";
public static final String KEY_EARLY_FGITEM = "EARLY_FGITEM";
public static final String KEY_EARLY_BGITEM = "EARLY_BGITEM";
public static final String KEY_LATE_FGSHIFT = "LATE_FGSHIFT";
public static final String KEY_LATE_BGSHIFT = "LATE_BGSHIFT";
public static final String KEY_LATE_FGITEM = "LATE_FGITEM";
public static final String KEY_LATE_BGITEM = "LATE_BGITEM";
public static final String KEY_VERY_LATE_FGSHIFT = "VERY_LATE_FGSHIFT";
public static final String KEY_VERY_LATE_BGSHIFT = "VERY_LATE_BGSHIFT";
public static final String KEY_VERY_LATE_FGITEM = "VERY_LATE_FGITEM";
public static final String KEY_VERY_LATE_BGITEM = "VERY_LATE_BGITEM";
public static final String KEY_ONDEMAND_FGSHIFT = "ONDEMAND_FGSHIFT";
public static final String KEY_ONDEMAND_BGSHIFT = "ONDEMAND_BGSHIFT";
public static final String KEY_ONDEMAND_FGITEM = "ONDEMAND_FGITEM";
public static final String KEY_ONDEMAND_BGITEM = "ONDEMAND_BGITEM";
public static final String KEY_OUTCOME_FGSHIFT = "OUTCOME_FGSHIFT";
public static final String KEY_OUTCOME_BGSHIFT = "OUTCOME_BGSHIFT";
public static final String KEY_ANIMATION = "animation";
public static final String KEY_DEBUG = "debug";
public static final String KEY_EXPERIMENTAL = "experimental";
// login credentials for private computers
public static final String KEY_USER = "defaultlogin";
public static final String KEY_PASSWORD = "defaultpw";
// not used
// public static final String KEY_OUTCOME_FGITEM = "OUTCOME_FGITEM";
// public static final String KEY_OUTCOME_BGITEM = "OUTCOME_BGITEM";
//should be useless in future
public static final String LOCAL_KEY_CIPHER_NIC = "cipher.nic.id";
public static void storeProp(EntityManager em, String key, String value, Users user) throws Exception {
String jpql = "SELECT s FROM SYSProps s WHERE s.key = :key AND s.user = :user";
if (user == null) {
jpql = "SELECT s FROM SYSProps s WHERE s.key = :key";
}
Query query = em.createQuery(jpql);
query.setParameter("key", key);
if (user != null) {
query.setParameter("user", user);
}
SYSProps prop = null;
try {
prop = (SYSProps) query.getSingleResult();
prop.setValue(value);
} catch (NoResultException nre) {
prop = new SYSProps(key, value, user);
}
em.merge(prop);
OPDE.setProp(key, value);
}
public static void storeProp(String key, String value, Users user) {
// prevent redundant saves
if (OPDE.getProps().containsKey(key) && OPDE.getProps().getProperty(key).equals(value)) {
return;
}
EntityManager em = OPDE.createEM();
try {
em.getTransaction().begin();
storeProp(em, key, value, user);
em.getTransaction().commit();
} catch (Exception e) {
OPDE.fatal(e);
em.getTransaction().rollback();
} finally {
em.close();
}
}
public static void storeProps(Properties props) {
for (Map.Entry m : props.entrySet()) {
storeProp(m.getKey().toString(), m.getValue().toString(), null);
}
}
public static void storeProp(String key, String value) {
storeProp(key, value, null);
}
public static void removeProp(EntityManager em, String key, Users user) throws Exception {
if (!OPDE.getProps().containsKey(key) || user == null) {
return;
}
Query query = em.createQuery("SELECT sp FROM SYSProps sp WHERE sp.key = :key AND sp.user = :user");
query.setParameter("key", key);
query.setParameter("user", user);
SYSProps mySysprop = (SYSProps) query.getSingleResult();
em.remove(mySysprop);
OPDE.getProps().remove(key);
}
public static void storeProp(EntityManager em, String key, String value) throws Exception {
storeProp(em, key, value, null);
}
public static void storeBoolean(String key, boolean value, Users user) {
storeProp(key, value ? "true" : "false", user);
}
public static boolean isBooleanTrue(String key) {
return isBooleanTrue(key, false);
}
public static boolean isBooleanTrue(String key, boolean defaultBoolean) {
boolean bool = defaultBoolean;
// OPDE.debug("isBooleanTrue: " + key + ": " + SYSTools.catchNull(OPDE.getProps().getProperty(key), "no key/value pair"));
if (OPDE.getProps().containsKey(key)) {
bool = OPDE.getProps().getProperty(key).equalsIgnoreCase("true");
}
return bool;
}
public static int getInteger(String key) {
int i = 0;
if (OPDE.getProps().containsKey(key)) {
i = Integer.parseInt(OPDE.getProps().getProperty(key));
}
return i;
}
/**
* Lädt Properties aus der Tabelle OCProps ein.
* Passend zu einer IP bzw. IP='*', wenn die Properties für alle gedacht sind.
*/
public static Properties loadProps(Users user) {
EntityManager em = OPDE.createEM();
String jpql = "SELECT s FROM SYSProps s WHERE s.user = :user";
if (user == null) {
jpql = "SELECT s FROM SYSProps s WHERE s.user IS NULL";
}
Query query = em.createQuery(jpql);
if (user != null) {
query.setParameter("user", user);
}
List<SYSProps> props = (List<SYSProps>) query.getResultList();
Properties p = new Properties();
Iterator<SYSProps> it = props.iterator();
while (!props.isEmpty() && it.hasNext()) {
SYSProps prop = it.next();
p.put(prop.getKey(), prop.getValue());
}
em.close();
return p;
}
public static boolean isTrue(String key, Users user) {
EntityManager em = OPDE.createEM();
String jpql = "SELECT s FROM SYSProps s WHERE s.key = :key AND s.user = :user";
if (user == null) {
jpql = "SELECT s FROM SYSProps s WHERE s.key = :key AND s.user IS NULL";
}
Query query = em.createQuery(jpql);
if (user != null) {
query.setParameter("user", user);
}
query.setParameter("key", key);
boolean b;
try {
b = ((SYSProps) query.getSingleResult()).getValue().equalsIgnoreCase("true");
} catch (Exception e) {
b = false;
}
em.close();
return b;
}
public static void storeState(String name, JCheckBox cb) {
storeProp(name, Boolean.toString(cb.isSelected()), OPDE.getLogin().getUser());
}
public static void storeState(String name, JToggleButton btn) {
storeProp(name, Boolean.toString(btn.isSelected()), OPDE.getLogin().getUser());
}
public static void restoreState(String name, JCheckBox cb) {
if (OPDE.getProps().containsKey(name)) {
cb.setSelected(OPDE.getProps().getProperty(name).equalsIgnoreCase("true"));
} else {
cb.setSelected(false);
}
}
public static void restoreState(String name, JToggleButton btn) {
if (OPDE.getProps().containsKey(name)) {
btn.setSelected(OPDE.getProps().getProperty(name).equalsIgnoreCase("true"));
} else {
btn.setSelected(false);
}
}
public static void storeState(String name, JComboBox cmb) {
storeProp(name, Integer.toString(cmb.getSelectedIndex()), OPDE.getLogin().getUser());
}
public static void restoreState(String name, JComboBox cmb) {
if (OPDE.getProps().containsKey(name)) {
int index = Integer.parseInt(OPDE.getProps().getProperty(name));
cmb.setSelectedIndex(index);
} else {
cmb.setSelectedIndex(0);
}
}
// public static String getCountry() {
// OPDE.debug(Locale.getDefault().getCountry());
// OPDE.debug(Locale.getDefault().getDisplayCountry());
// String country = "germany";
// if (OPDE.getProps().containsKey(SYSPropsTools.KEY_COUNTRY)) {
// country = OPDE.getProps().getProperty(SYSPropsTools.KEY_COUNTRY);
// } else {
// SYSPropsTools.storeProp(SYSPropsTools.KEY_COUNTRY, country);
// }
// return country;
// }
}