/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package de.nplusc.izc.tools.IOtools;
import com.ice.jni.registry.*;

/**
 *
 * @author LH
 */
public class registryReader
{
    /**
     * Prüft regkey auf existenz
     * @param key Der regkey zum prüfen
     * @return Ob KEy existiert
     */
    public static boolean checkExistenceOfRegKey(String key)
    {
        RegistryKey rky ;
        String Hive="";
        String[] keyDissect = key.split("\\\\");//splittet auf nem \
        Hive = keyDissect[0];
        String keyt = "";
            for (int i = 1; i < keyDissect.length-1; i++)//erstes+letztes skippen
            {
                String keyelem = keyDissect[i];
                keyt+=keyelem+"\\";
            }
            keyt+=keyDissect[keyDissect.length-1];
            key=keyt;
        //RegistryValue dataValue;
        try
        {
            rky = Registry.getTopLevelKey(Hive);//@API abchecken hilft immer.....
            rky = rky.openSubKey(key);
        }
        catch (Exception e) {return false; }
        return true;
    }
    
    /**
     * 
     * Prüft regkey-wert auf existenz
     * @param key Der regkey zum prüfen
     * @return Ob KEy existiert
     */
    public static boolean checkExistenceOfRegKeyEntry(String key)
    {
        RegistryKey rky ;
        String Hive="",KeyEntry="";
        String[] keyDissect = key.split("\\\\");//splittet auf nem \
        Hive = keyDissect[0];
        String keyt = "";
            for (int i = 1; i < keyDissect.length-2; i++)//erstes+letztes skippen
            {
                String keyelem = keyDissect[i];
                keyt+=keyelem+"\\";
            }
            keyt+=keyDissect[keyDissect.length-2];
            key=keyt;
        KeyEntry = keyDissect[keyDissect.length-1];//angelt letzten
        if(KeyEntry.equalsIgnoreCase("(Standard)"))
        {
            KeyEntry = "";//(Standard)Wert wird mit leerem Value aufgerufen
        }

        //RegistryValue dataValue;
        try
        {

            rky = Registry.getTopLevelKey(Hive);//@API abchecken hilft immer.....
            rky = rky.openSubKey(key);
            rky.getValue(KeyEntry);//return-wert nicht nötig. exception ist das einzig entscheidende
        }
        catch (Exception e) {return false;}
        return true;
    }
    /**
     * Liest Wert aus Registry aus
     * @param key Pfad zu key. (Standard) wird akzeptiert. akzeptiert zur Zeit nur Registry-string-pfade
     * 
     * @return gibt den Wert al String zurück
     */
    public static String getContentOfKeyEntry(String key)
    {
        RegistryKey rky ;
        String Hive="",KeyEntry="";
        String[] keyDissect = key.split("\\\\");//splittet auf nem \
        Hive = keyDissect[0];
        String keyt = "";
            for (int i = 1; i < keyDissect.length-2; i++)//erstes+letztes skippen
            {
                String keyelem = keyDissect[i];
                keyt+=keyelem+"\\";
            }
            keyt+=keyDissect[keyDissect.length-2];
            key=keyt;
        KeyEntry = keyDissect[keyDissect.length-1];//angelt letzten
        if(KeyEntry.equalsIgnoreCase("(Standard)"))
        {
            KeyEntry = "";//(Standard)Wert wird mit leerem Value aufgerufen
        }

        //RegistryValue dataValue;
        String returnzy;//="";
        try
        {

            rky = Registry.getTopLevelKey(Hive);//@API abchecken hilft immer.....
            rky = rky.openSubKey(key);
        }
        catch (Exception e) {e.printStackTrace();
            return null; }
        try
        {
            returnzy = rky.getStringValue(KeyEntry);
        }
        catch (Exception e) {e.printStackTrace();
        return null;}
        return returnzy;
    }
    /**
     * Listet die subkeys auf
     * @param key key zum auflisten
     * @return keyliste in form eines arrays
     */
    
    
    public static String[] getSubKeys(String key)
    {
        RegistryKey rky ;
        String Hive="";
        String[] keyDissect = key.split("\\\\");//splittet auf nem \
        Hive = keyDissect[0];
        String keyt = "";
            for (int i = 1; i < keyDissect.length-1; i++)//erstes+letztes skippen
            {
                String keyelem = keyDissect[i];
                keyt+=keyelem+"\\";
            }
            keyt+=keyDissect[keyDissect.length-1];
            key=keyt;

        //RegistryValue dataValue;
        String[] returnzy;//="";
        try
        {

            rky = Registry.getTopLevelKey(Hive);//@API abchecken hilft immer.....
            rky = rky.openSubKey(key);
        }
        catch (Exception e) {e.printStackTrace();
            return null; }
        try
        {
            int sky = rky.getNumberSubkeys();
            returnzy = new String[sky];
            for (int i = 0; i < sky; i++)
            {
                returnzy[i] = rky.regEnumKey(i);
            }
        }
        catch (Exception e) {e.printStackTrace();
        return null;}
        return returnzy;
    }
    
    /**
     * Listet werte des keys auf
     * @param key welcer key
     * @return liste der keys
     */
    public static String[] getSubKeyEntrys(String key)
    {
        RegistryKey rky ;
        String Hive="";
        String[] keyDissect = key.split("\\\\");//splittet auf nem \
        Hive = keyDissect[0];
        String keyt = "";
            for (int i = 1; i < keyDissect.length-2; i++)//erstes+letztes skippen
            {
                String keyelem = keyDissect[i];
                keyt+=keyelem+"\\";
            }
            keyt+=keyDissect[keyDissect.length-1];
            key=keyt;

        //RegistryValue dataValue;
        String[] returnzy;//="";
        try
        {

            rky = Registry.getTopLevelKey(Hive);//@API abchecken hilft immer.....
            rky = rky.openSubKey(key);
        }
        catch (Exception e) {e.printStackTrace();
            return null; }
        try
        {
            int sky = rky.getNumberValues();
            returnzy = new String[sky];
            for (int i = 0; i < sky; i++)
            {
                returnzy[i] = rky.regEnumValue(i);
            }
        }
        catch (Exception e) {e.printStackTrace();
        return null;}
        return returnzy;
    }
}
