You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-dev@xmlgraphics.apache.org by John Austin <jw...@sympatico.ca> on 2003/11/26 02:56:47 UTC

Property classes and eventually, new Property handling.

After my last post I went away to play in the code for a while.

Mostly to see what is necessary to isolate a minmal set of
classes related to Property handling.

What I found is:

1) Property is ubiquitous: every client class knows what package
   it lives in. As a planning point, I better think about keeping
   a Property class (or prepare to make a lot more changes and
   lose a few friends). 

2) PropertyList and PropertyListBuilder are used in fewer places.
   but they are used a lot. PropertyList is referenced 129 times  
   and PropertyListBuilder only 8 times. Most of these references 
   are in the Property class. If they can be hidden, the problem
   is bounded by the Property class.

One way to discover the scope of an API is to rename a class or a
package. Doing so breaks all of the compile units that depend on
the renamed class(es). Restoring the missing interfaces restores
the system if the restoration obeys the previous class contracts.

As I suspected, automated code generation for properties is
do-able. There are more than 17,000 lines in files generated
through Ant target: 'codegen'. Many of these are clients of the
Property class. Changes here can be localized to the XSL files
that generate the code.

-- 
John Austin <jw...@sympatico.ca>

Re: Property classes and eventually, new Property handling.

Posted by "Peter B. West" <pb...@powerup.com.au>.
Glen Mazza wrote:
> --- "Peter B. West" <pb...@powerup.com.au> wrote:
> 
>>And now for a little digression on code generation. 
>>My own view of code 
>>generation by XSLT transformation can be summed up
>>as:
>>
> 
> 
> Why, Peter, you're in disagreement with everyone else
> on this issue!  (So what else is new? ;)

Everyone else *here*, I think.  I'm sure there are some others out there 
who agree with me.  When they're released, we'll have a get-together.

>>* the canonical source is the Java code.
>>* transformations are a tool for developer
>>convenience.
>>* they should be used to generate files which are
>>then committed like 
>>any others.
>>* transformation is generally a one-off process,
>>only to be re-used in 
>>extremis.
> 
> 
> BTW, what is a "one-off process"?


Needed once - for the initial generation of the Java source.  From then 
on, required changes are minimal enough (or general enough) to be 
handled bu direct manipulation of the Java source.

>>* it is the developer's responsibility to ensure
>>that any re-generation 
>>does not lose patches to the previously generated
>>and committed source.
>>

Peter
-- 
Peter B. West <http://www.powerup.com.au/~pbwest/resume.html>


Re: Property classes and eventually, new Property handling.

Posted by Glen Mazza <gr...@yahoo.com>.
--- "Peter B. West" <pb...@powerup.com.au> wrote:
> 
> And now for a little digression on code generation. 
> My own view of code 
> generation by XSLT transformation can be summed up
> as:
> 

Why, Peter, you're in disagreement with everyone else
on this issue!  (So what else is new? ;)

> * the canonical source is the Java code.
> * transformations are a tool for developer
> convenience.
> * they should be used to generate files which are
> then committed like 
> any others.
> * transformation is generally a one-off process,
> only to be re-used in 
> extremis.

BTW, what is a "one-off process"?

> * it is the developer's responsibility to ensure
> that any re-generation 
> does not lose patches to the previously generated
> and committed source.
> 

Glen

__________________________________
Do you Yahoo!?
Free Pop-Up Blocker - Get it now
http://companion.yahoo.com/

Re: Property classes and eventually, new Property handling.

Posted by "Peter B. West" <pb...@powerup.com.au>.
John Austin wrote:
> After my last post I went away to play in the code for a while.
> 
> Mostly to see what is necessary to isolate a minmal set of
> classes related to Property handling.
> 
> What I found is:
> 
> 1) Property is ubiquitous: every client class knows what package
>    it lives in. As a planning point, I better think about keeping
>    a Property class (or prepare to make a lot more changes and
>    lose a few friends). 
> 
> 2) PropertyList and PropertyListBuilder are used in fewer places.
>    but they are used a lot. PropertyList is referenced 129 times  
>    and PropertyListBuilder only 8 times. Most of these references 
>    are in the Property class. If they can be hidden, the problem
>    is bounded by the Property class.

In alt.design individual classes in fop.fo.properties extend 
fop.fo.Property, but these classes are singletons, providing access to 
what is effectively static information about the properties.

The multitude of property instances is represented by the interface 
fop.datatypes.PropertyValue, the abstract class AbstractPropertyValue 
and the class PropertyValueList, which implements PropertyValue, and the 
other classes in fop.datatypes which generally extend AbstractPropertyValue.

> One way to discover the scope of an API is to rename a class or a
> package. Doing so breaks all of the compile units that depend on
> the renamed class(es). Restoring the missing interfaces restores
> the system if the restoration obeys the previous class contracts.
> 
> As I suspected, automated code generation for properties is
> do-able. There are more than 17,000 lines in files generated
> through Ant target: 'codegen'. Many of these are clients of the
> Property class. Changes here can be localized to the XSL files
> that generate the code.

The classes in fop.fo.properties (apart from Property.java itself) 
*could* be generated by XSLT.  I used perl, one-off.  If I need to make 
global changes, I'll use perl again.  If I need to change, add or delete 
individual classes, I'll do it manually, based on a like-minded class if 
necessary.  Should take about two minutes.  How dramatically is the set 
of properties in XSL-FO going to change?

And now for a little digression on code generation.  My own view of code 
generation by XSLT transformation can be summed up as:

* the canonical source is the Java code.
* transformations are a tool for developer convenience.
* they should be used to generate files which are then committed like 
any others.
* transformation is generally a one-off process, only to be re-used in 
extremis.
* it is the developer's responsibility to ensure that any re-generation 
does not lose patches to the previously generated and committed source.

Using this approach, the source you extract from CVS is the source you 
compile.  If you apply a fix to that source, you know that it can go 
directly into the codebase.

An example is src/codegen/xml-lang.xml, which is transformed by 
src/codegen/xml-lang.xsl into 
org/apache/fop/datatypes/CountryLanguageScript.java.  All that I could 
find about countries, languages and scripts is in xml-lang.xml. The 
result is checked-in to CVS, and will be part of the code base of any 
checkout.  How often is this information going to change?  Only if there 
are major changes to the information content of the relevant documents 
will the structure of the files need to be revisited, and it is no 
particular hardship to manage such cases.

Yes, there are situations in which it is *extremely* convenient to use 
code-munging - the Java 1.3/1.4 situation springs to mind.  The CPP was 
extremely convenient too, for similar reasons.  XSLT is much more 
powerful than CPP.  Why is there no equivalent of CPP in Java?  Why are 
we going to such trouble to create a situation which has even greater 
capacity for obfuscation that CPP?  Because we're smarter than the 
developers of Java?  Or because we have short memories?

Peter
-- 
Peter B. West <http://www.powerup.com.au/~pbwest/resume.html>