de.fhdo.terminologie.db.DBSysParam.java Source code

Java tutorial

Introduction

Here is the source code for de.fhdo.terminologie.db.DBSysParam.java

Source

/* 
 * CTS2 based Terminology Server and Terminology Browser
 * Copyright (C) 2014 FH Dortmund: Peter Haas, Robert Muetzner
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package de.fhdo.terminologie.db;

import de.fhdo.terminologie.db.hibernate.Domain;
import de.fhdo.terminologie.db.hibernate.DomainValue;
import de.fhdo.terminologie.db.hibernate.SysParam;
import de.fhdo.helper.DES;
import java.util.LinkedList;
import java.util.List;
import org.hibernate.Session;

/**
 * Diese Klasse ist eine Hilfsklasse zum Auslesen und Speichern von Parametern
 * in der Datenbank
 *
 * @author Robert Mtzner (robert.muetzner@fh-dortmund.de)
 */
public class DBSysParam {
    // Singleton-Muster

    private static DBSysParam instance = null;

    public static DBSysParam instance() {
        if (instance == null) {
            instance = new DBSysParam();
        }
        return instance;
    }

    // Konstanten
    public static final long VALIDITY_DOMAIN_ID = 60;
    public static final long VALIDITY_DOMAIN_SYSTEM = 1313;
    public static final long VALIDITY_DOMAIN_MODULE = 1314;
    public static final long VALIDITY_DOMAIN_SERVICE = 1315;
    public static final long VALIDITY_DOMAIN_USERGROUP = 1316;
    public static final long VALIDITY_DOMAIN_USER = 1317;

    public DBSysParam() {
    }

    /**
     * Listet alle verfgbaren Validity-Domains auf.
     *
     * Eine Validity-Domain gibt eine Domne an, fr die ein Parameter gltig ist.
     * Beispiele fr Validity-Domains sind: 1. System 2. Modul 3. Service 4.
     * Benutzergruppe 5. Benutzer
     *
     * @return List<DomainValue> - Liste mit Validity-Domains
     */
    public List<DomainValue> getValidityDomains() {
        List<DomainValue> list = null;

        Session hb_session = HibernateUtil.getSessionFactory().openSession();
        //hb_session.getTransaction().begin();

        try {
            org.hibernate.Query q = hb_session.createQuery("from Domain WHERE domainId=:domain_id");
            q.setParameter("domain_id", VALIDITY_DOMAIN_ID);

            java.util.List<Domain> domainList = (java.util.List<Domain>) q.list();

            if (domainList.size() == 1) {
                list = new LinkedList<DomainValue>(domainList.get(0).getDomainValues());
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            hb_session.close();
        }

        return list;
    }

    /**
     * Liest ein Parameter aus der Datenbank. Der Name des Parameters muss
     * angegeben werden. Validity-Domain und ObjectID sind optional. Diese werden
     * angegeben, wenn man z.B. einen Parameter fr einen bestimmten Benutzer
     * lesen mchte. In diesem Fall gibt man bei Validity-Domain die ID fr User
     * an und bei ObjectID die UserID.
     *
     * @param Name Name des Parameters
     * @param ValidityDomain Validity-Domain (optional)
     * @param ObjectID Objekt-ID, z.B. User-ID (otional)
     * @return Parameter
     */
    public SysParam getValue(String Name, Long ValidityDomain, Long ObjectID) {
        SysParam setting = null;

        Session hb_session = HibernateUtil.getSessionFactory().openSession();
        //hb_session.getTransaction().begin();

        try {
            org.hibernate.Query q;

            if (ValidityDomain != null && ObjectID == null) {
                q = hb_session.createQuery("from SysParam WHERE name=:name AND validityDomain=:vd");
                q.setParameter("name", Name);
                q.setParameter("vd", ValidityDomain);
            } else if (ValidityDomain != null && ObjectID != null) {
                q = hb_session.createQuery(
                        "from SysParam WHERE name=:name AND validityDomain=:vd AND objectId=:objectid");
                q.setParameter("name", Name);
                q.setParameter("vd", ValidityDomain);
                q.setParameter("objectid", ObjectID);
            } else {
                q = hb_session.createQuery("from SysParam WHERE name=:name ORDER BY validityDomain");
                q.setParameter("name", Name);
            }
            q.setMaxResults(1);

            java.util.List<SysParam> paramList = (java.util.List<SysParam>) q.list();

            if (paramList.size() > 0) {
                // Genau 1 Ergebnis gefunden
                setting = paramList.get(0);
            }

            if (setting == null && ObjectID != null && ObjectID > 0) {
                // Kein Ergebnis gefunden, aber User-ID angegeben
                // Evtl. wurde dieser Parameter jedoch nicht berschrieben
                // also den Standard-Parameter benutzen

                // TODO eigentlich msste man 1 Ebene hher prfen
                // aber die ID ist ja nicht bekannt
                // Bsp: Wenn User-Parameter nicht gefunden, dann msste
                //      in Usergroup gesucht werden
                //      die Usergroup-ID ist jedoch nicht bekannt
                return getValue(Name, null, null);
            }

        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            hb_session.close();
        }

        resolveDatatype(setting);

        return setting;
    }

    public String getStringValue(String Name, Long ValidityDomain, Long ObjectID) {
        SysParam param = getValue(Name, ValidityDomain, ObjectID);
        if (param != null && param.getValue() != null)
            return param.getValue();

        return "";
    }

    public Boolean getBoolValue(String Name, Long ValidityDomain, Long ObjectID) {
        SysParam param = getValue(Name, ValidityDomain, ObjectID);
        try {
            if (param != null && param.getValue() != null)
                return Boolean.parseBoolean(param.getValue());
        } catch (Exception e) {
            return null;
        }

        return null;
    }

    private void resolveDatatype(SysParam setting) {
        if (setting != null && setting.getJavaDatatype() != null
                && setting.getJavaDatatype().equalsIgnoreCase("password")) {
            // Passwort entschlsseln
            setting.setValue(DES.decrypt(setting.getValue()));
        }
    }

    private void applyDatatype(SysParam setting) {
        if (setting != null && setting.getJavaDatatype() != null
                && setting.getJavaDatatype().equalsIgnoreCase("password")) {
            // Passwort entschlsseln
            setting.setValue(DES.encrypt(setting.getValue()));
        }
    }

    /* public String setValue(String Name, Long ValidityDomain, Long ObjectID)
     {
     SysParam param = new SysParam();
     param.setName(Name);
     param.setDomainValueByValidityDomain(new DomainValue());
     param.getDomainValueByValidityDomain().setDomainValueId(ValidityDomain);
     param.setObjectId(ObjectID);
     } */
    /**
     * Speichert einen Parameter in der Datenbank.
     *
     *
     * @param Parameter der Parameter
     * @return String mit Fehlermeldung oder leer bei Erfolg
     */
    public String setValue(SysParam Parameter) {
        String ret = "";

        Session hb_session = HibernateUtil.getSessionFactory().openSession();

        try {
            hb_session.getTransaction().begin();
            applyDatatype(Parameter);

            hb_session.merge(Parameter);
            hb_session.getTransaction().commit();
        } catch (Exception ex) {
            ret = "Fehler bei 'setValue(): " + ex.getLocalizedMessage();
            ex.printStackTrace();
        } finally {
            hb_session.close();
        }

        return ret;
    }

    /**
     * Lscht einen Parameter.
     *
     * @param Parameter
     * @return String mit Fehlermeldung oder leer bei Erfolg
     */
    public String deleteValue(SysParam Parameter) {
        String ret = "";

        Session hb_session = HibernateUtil.getSessionFactory().openSession();

        try {
            hb_session.getTransaction().begin();
            hb_session.delete(Parameter);
            hb_session.getTransaction().commit();
        } catch (Exception ex) {
            ret = "Fehler bei 'setValue(): " + ex.getLocalizedMessage();
            ex.printStackTrace();
        } finally {
            hb_session.close();

        }

        return ret;
    }
}