JConfig ohne Unterkategorien?

Snape

Erfahrenes Mitglied
Tach,
benutzt hier jemand das JConfig und kann mir sagen, ob und wenn ja wie es möglich ist, Unterkategorien zu benutzen? In der Anleitung steht nur etwas von category mit den zugehörigen properties und Variablen.

Thx,
Snape
(in Kürze im Kino ;-))
 
Hallo!

Steht das nicht im aktuellen Java Magazin drin?

Wenn man sich die "spärliche" Doku (jconfig.pdf im doc Verzeichnis") dann entdeckt man nach kurzem Suchen die Klasse:
Code:
5.3 NestedConfigParser (bzw. NestedConfiguration)
The NestedConfigParser lets you defined categories inside categories.
This is an example that sums it up:

<properties>
    <variables>
        <variable name="base_dir" value="${system:java.io.tmpdir}"/>
    </variables>
<category name="general">
    <server_port>8080</server_port>
    <server_root>${base_dir}/docs</server_root>
</category>
    <category name="settings">
        <category name="client">
            <screen_size>1024,768</screen_size>
        </category>
    <category name="server">
            <home_dir>${base_dir}/app</home_dir>
    </category>
</category>

Gruß Tom
 
Zuletzt bearbeitet:
Original geschrieben von Thomas Darimont
Hallo!

Steht das nicht im aktuellen Java Magazin drin?

Wenn man sich die "spärliche" Doku (jconfig.pdf im doc Verzeichnis") dann entdeckt man nach kurzem Suchen die Klasse:
Code:
5.3 NestedConfigParser (bzw. NestedConfiguration)
The NestedConfigParser lets you defined categories inside categories.
This is an example that sums it up:

<properties>
    <variables>
        <variable name="base_dir" value="${system:java.io.tmpdir}"/>
    </variables>
<category name="general">
    <server_port>8080</server_port>
    <server_root>${base_dir}/docs</server_root>
</category>
    <category name="settings">
        <category name="client">
            <screen_size>1024,768</screen_size>
        </category>
    <category name="server">
            <home_dir>${base_dir}/app</home_dir>
    </category>
</category>


Gruß Tom

Und wie ist der Zugriff darauf, sowohl lesend als auch schreibend?
 
Also um das Problem zu verdeutlichen:
Angenommen, ich habe eine XML-Datei, die ungefähr so aussieht:

Code:
<?xml version="1.0" encoding="iso-8859-1" ?>
<properties>
  <variables>
    <variable name="mypath" value="blub"/>
  </variables>
  <category name="Hauptanwendung1"/>
	  <category name="Teilanwendung1">
	    <property name="name" value="ftp-Test"/>
	    <property name="groesse" value="182"/>
	  </category>
	  <category name="Teilanwendung2">
	    <property name="name" value="http-Test"/>
	    <property name="groesse" value="253"/>
	  </category>
  </category>
  <category name="Hauptanwendung2"/>
	  <category name="Teilanwendung1">
	    <property name="name" value="noch ein Test"/>
	    <property name="groesse" value="456"/>
	  </category>
	  <category name="Teilanwendung2">
	    <property name="name" value="Grillen-Test"/>
	    <property name="groesse" value="71"/>
	  </category>
  </category>
  <category name="general">
    <property name="TEST" value="added property"/>
    <property name="upload_dir" value="my_path"/>
    <property name="showNews" value="true"/>
    <property name="MyProp" value="Hello World"/>
    <property name="Newscounter" value="10"/>
  </category>
</properties>

Nun möchte ich die property "name" aus Teilanwendung 2 aus Hauptanwendung 2 auslesen. Üblicherweise funktioniert der Zugriff laut Doku so:

String jdbcUser = config.getProperty("USER", null, "JDBC");

Also welche property ausgelesen werden soll ("USER"), welcher default-Wert benutzt werden soll, falls dieser nicht gefunden wird, und in welcher category geschaut werden soll ("JDBC").
In meinem Fall habe ich ja die Ober- und Unterkategorien "Hauptanwendung 2" und "Teilanwendung 2".

Wie funktioniert der Zugriff also hier? Geht das in diesem Fall nicht oder habe ich lediglich eine Denkblockade? :)
 
Hallo!

Ich habs in der Mittagspause mal versucht:

Code:
<?xml version="1.0" encoding="iso-8859-1" ?>
<properties>
  <variables>
    <variable name="mypath" value="blub"/>
  </variables>
  <category name="Hauptanwendung1">
	  <category name="HA1_Teilanwendung1">
	    <property name="name" value="ftp-Test"/>
	    <property name="groesse" value="182"/>
	  </category>
	  <category name="HA1_Teilanwendung2">
	    <property name="name" value="http-Test"/>
	    <property name="groesse" value="253"/>
	  </category>
  </category>
  <category name="Hauptanwendung2">
	  <category name="HA2_Teilanwendung1">
	    <property name="name" value="noch ein Test"/>
	    <property name="groesse" value="456"/>
	  </category>
	  <category name="HA2_Teilanwendung2">
	    <property name="name" value="Grillen-Test"/>
	    <property name="groesse" value="71"/>
	  </category>
  </category>
  <category name="general">
    <property name="TEST" value="added property"/>
    <property name="upload_dir" value="my_path"/>
    <property name="showNews" value="true"/>
    <property name="MyProp" value="Hello World"/>
    <property name="Newscounter" value="10"/>
  </category>
</properties>

Das ist mein Beispiel Config.xml ...
Anscheinend müssne die Kategorienamen jeweils Eindeutig sein, sonst wills bei mir nicht klappen...

Code:
import java.util.Iterator;
import java.util.Properties;

import org.jconfig.Category;
import org.jconfig.Configuration;
import org.jconfig.ConfigurationManager;

/**
 * @author      Darimont<br>
 * @version     1.0<br>
 * Date of creation:  02.06.2004<br>
 * File:         ConfigTest.java<br>
 * Modifier:     Darimont<br>
 * Revision:     Revision<br>
 * State:        Germany<br>
 */

public class ConfigTest {

	public static void main(String[] args) {
		new ConfigTest().doIt();
	}

	/**
	 * 
	 */
	private void doIt() {
		Configuration configuration = ConfigurationManager.getConfiguration();
		
		String[] catNames = configuration.getCategoryNames();
		for (int i = 0; i < catNames.length; i++) {
			Category category = configuration.getCategory(catNames[i]);
			System.out.println("Category: " + catNames[i]);
			
			Properties props = category.getProperties();
			Iterator iter = props.keySet().iterator();
			while (iter.hasNext()) {
				String key = (String) iter.next();
				System.out.println(key + " : " + props.getProperty(key));
			}
		}
	}
}

Ergibt bei mit folgende Ausgabe:

Code:
C:\asw\eclipse\workspace\InfoTest>java -cp .;C:\jConfig\dist\jconfig.jar ConfigT
est
trying to find encoding
Category: HA2_Teilanwendung1
groesse : 456
name : noch ein Test
Category: Hauptanwendung2
Category: HA1_Teilanwendung1
groesse : 182
name : ftp-Test
Category: HA1_Teilanwendung2
groesse : 253
name : http-Test
Category: HA2_Teilanwendung2
groesse : 71
name : Grillen-Test
Category: general
TEST : added property
upload_dir : my_path
MyProp : Hello World
showNews : true
Newscounter : 10
Category: Hauptanwendung1

Vielleicht hilft Dir das ja weiter...

Gruß Tom
 
Original geschrieben von Thomas Darimont
Hallo!
Ich habs in der Mittagspause mal versucht:

;-)

Anscheinend müssne die Kategorienamen jeweils Eindeutig sein, sonst wills bei mir nicht klappen...

Das hatte ich befürchtet, denn wie sonst soll man darauf zugreifen können, da ja nur eine category zum Auslesen angegeben werden kann...

Vielleicht hilft Dir das ja weiter...
Gruß Tom

Nicht wirklich, da ich ja auch wahlfrei zugreifen können möchte/muss. Aber trotzdem danke für die Mühe, werde mich bei Gelegenheit an den Autor wenden.
 
Zurück