[izpack-users] Reading Attributes from install.xml

Hal Vaughan hal at thresholddigital.com
Mon Jan 9 21:23:23 CET 2006


On Monday 09 January 2006 02:09 pm, Klaus Bartz wrote:
> Hi Hal,
> it is often a play between make it "as simple as possible" and
> as free as possible". I agree, that a separate file with dtd and docu
> and so on is a little bit oversized for two or three lines.
> But I am really not "assumed" about the config files
> without a dtd because it is more difficult to validate. Many calls on
> this list are related to bad written config files. I will nag if IzPack
> gets a new spec file without a dtd.

I understand.  Please don't think I'm complaining.  I'm trying to understand 
how to implement my ideas within the current IzPack framework.  That way they 
benefit you and everyone else and not just me.  I have no problem with being 
told that isn't the way it is done and given information on why or shown how 
to do it better or in a way that is more fitting.

> Therefore a SimplePanelsSpec.xml ( or CommonPanelsSpec.xml ??) should
> have a dtd. But in what manner we can define the syntax in a common way
> useable from different panels where we do not know what they are needed.
> In the moment I think with key value pairs. Uups, we have key value pairs
> allready with element <variable> of installation.dtd.
> Is it the right way to use an IzPack variable for configure a panel?
> Good question, I do it in JDKPathPanel with the range values (line 66f).
> Therefore I prefer to use an IzPack variable if only one or three values
> are needed.

I don't know how to express it technically, so here's an example of 
SimplePanelsSpec.xml:

<simplespecs>
	<simplestuff1panel>
		<panel txt="Select a background color" variableName="bgcolor">
		<panel order="1" txt="Select a foreground color" variableName="fgcolor">
		<panel order="2" txt="Select a font color" variableName="fontcolor">
	<simplestuff1panel/>
	<simplestuff2panel>
		<panel txt="Select mirror site for updates" variableName="updMirrir">
		<panel order="1" txt="Pick a download protocol" variableName="dlproto">
		<panel order="2" txt="How often should we update?" variableName="updfreq">
	<simplestuff2panel/>
<simplespecs/>

The <panel> elements would NOT have children.  (If they did, they would not be 
simple.  You may notice this also allows the same panel to be used multiple 
times.  I looked at UserInput and found all that was needed for multiple 
instances of a panel was 2 integers, a static one that keeps count of the 
number of instances of a panel and a protected one that is the instance 
number.  (Note that if no order attribute is given, it defaults to 0, for the 
first or only instance of that panel.)

A side note: I've noticed some comments about how it would be nice to have 
multiple InfoPanels or HTMLInfoPanels.  This would make it a snap with 
something like this added to SimplePanelsSpec.xml for a panel named 
MultiInfoPanel:

	<multiinfopanel>
		<panel order="0" resource="generalInfo.xml"/>
		<panel order="1" resource="upgradeInfo.xml"/>
	<multiinfopanel/>

I don't know if there is any reluctance to use multiple instances of panels, 
but I think this would provide an easy way for a simple panel to be used as 
many times as needed.

> But if you would, why not a SimplePanelsSpec.xml. If so, I prefer if
> there will be a (static ?) method in SpecHelper like
> XMLElement getCommonPanelsSpec()
> which loads once the spec and returns every call the root of the spec.

If you use that with my idea and the file format I just specified, then 
SpecHelper could load SimplePanelsSpec.xml at the start, and whenever it is 
called from a panel, it can determine the panel name automatically, so all it 
would need as a parameter is the instance number and it could return a 
Properties object with all the properties (or just the instance number and 
Attribute name and it would return the attribute value for that instance of 
the panel -- this method would be overloaded to not need an instance number 
and default to the first or only instance).

> Or - if elements are fixed -
> String getCommonPanelsValue(String panelName, String valueKey)
> One point for a generic solution is the docu. It is not relevant
> whether we love it or not (I hate it) but it has do be written.
>
> I can do for it nothing next time because tomorrow is the last day I can
> write during the next six or ten weeks (at 12.01.06 I have an OP at
> my right wrist).

Is OP operation?  If so, good luck!

I don't mind doing it.  I have to parse some XML for my panels, and I might as 
well do the routines only once, in another class, than doing them over and 
over.  I just don't want to start hacking things in IzPack, come up with a 
huge and, to me, amazing idea, and find out it messes up other plans or 
ideas.

Hal



More information about the izpack-users mailing list