This is Ion's activity log for the SoC work on ArgoPrint.
Unordered list with things that must be done:
- (done) ArgoPrintDialog should have as parent the ArgoUML window
- fix code-style warnings
- alternate datasources using a pluging/interface in addition
to XML imput
- the "Edit" item in the context menu should open the template
specified in the selected row in the editor
- command line utility for the manager (basically the same functionality
with the xslproc or xalan tool - input, output, template, params)
- fix code-style warnings
- "wrap" long lines - comments/text is a single node an whitespace
in the sorce-file is no longer available for use after parsing
- complete implementation of DOM-3-Val specification
- fit remaining editing functions into GUI
- guided editing for XPath (selecting data from the input sources)
- (done) speed-ul XPath evaluations using compiled expressions
and variable handlers.
- multiple schemas used simulatanously with guided editing
- preview of result (as XML as it would take additional plugins
to handle the multitude of possible outputs)
- raw text editing (I no longer think that raw editing is
a good idea - Ion Savin).
- handle xml that does not have a namespaceURI specified or
has walidation specified as DOCTYPEs
- WYSYWYG on top of basic guided editing
- (partial) XPath highlighting should work with namespaces (did'n figure out
why it doesn't work) - currently instead of "/grammar" you have to use
"/*[local-name()='grammar']" - update:
- using XPath to select nodes in the document and access to the functions
in the context menu that can be applied to all of these nodes (remove, collapse
- copy/paste functionality
- ability to drag a subtree and to move it around the document using the
mouse and the ability to drop the subtree on the places where it would be
valid to drop it (with the highlight of these places)
Guided Editing implementation
Given that the DOM validation
specification is not implemented in any available parser I decided to implement it myself trying to
make the transition to a future standard implementation, once it's available, easy.
Initially I wanted to provide an implementation of the
available in the standard and to make the parser create instances of DOM trees using these type of nodes.
I thought that it was possible to give to the parser a factory instance that would create the initial
Document instance that would then be used to create the rest of the parts of a DOM tree. Unfortunatlly I
could not find a way to achieve this so I decided to bundle all the instance methods that would have been
defined on the DOM "parts" into a single class and make them static and taking as parameter the "part"
instance to which the message would have normally been send in the standard implementation.
Provided that I understood how to implement the API correctly the transition to the standard DOM-3-Val
API should only imply the change from static calls on the GuidedEditing class to instance calls on the
For the implementation I considered DTDs, XML Schemas and Relax NG schemas. I've decided to use Relax NG
since it's less complex in comparison to the XML Schemas and since the DTDs can't handle namespaces well and
the use of XSLT implies the use of multiple namespaces in a single document.
The input Relax NG schemas must use the
simple XML syntax. Convertion tools
to Relax NG and
to the simple syntax are available and
schemas for various XML vocabularies including XSLT.
At the moment the validation queryes are answered by evaluating XPath expressions against
the parsed simple-syntax Relax NG schemas which makes them really unefficient but it's only a
temporary solution until I find a way to speed things up.
-21/08/06 Fixes, todo list items, XPATH guided editing prototype.
15/08/06 Windows env set-up for testing. Prototyped XPath guided editing
functionality. Tried to fix the XPath highlighting issue with respect to default
namespaces - without positive results - NamespaceContext seems not to be used for
the default namespaces. Digged the net for info regarding the issue Linus is having
with the generator but couldn't find anything different from the previous search -
the presence of whitespace before the "xml" processing instruction which turned out
not to be the case. Also the search for solution to the XPath evaluation issue didn't
turn out any useful result. I could not find any documentation besides the API doc
which isn't of any help as it doesn't explain how the evaluation is done and how the
nodes are considered. The W3C specification of XPath was no help either as it leaves
the implementors freedom with respect to this. The ugly part is that I have to work
with interfaces and not with implementations and a stricter specification would have
been helpful in this respect.
-14/08/06 The editor is usable but kind of primitive - it does not allow
the editing of more then one file at the time it does not have undo/redo functionality.
I consider it good for XML browsing but the editing bit needs more work. Most of the
work from the previous post consisted on looking at OSS editors, reading the DOM-3-Val
specification, reading about DTDs, XML Schemas and Relax NG in the context of using
them for guided editing. DTDs turned out to be too restrictive because they are not
aware of namespaces, XML Schema prototypes turned out impossible to write because of
the complexity of the vocabulary. Relax NG schemas are turned out to be easyer to use
for this purpose especialy in simple form. Besides this there were some modifications
to the code that can be traced in the repository.
-29/06/06 Work on the template-management GUI part; it took two
rewrites and lots of tests because of the strange depedencies between components.
Still not complete but it seems to be going in the right direction. I was unable
to figure out why the SplitPane doesn't split the space between the components
according to the specified ratio.
26/06/06 Looked into Schemas, DTDs and Relax NG to be used for
the completion/validation operations for the editor. Discovered the xmloperator
editor which is very similar to what I had in mind for the ArgoPrint editor.
22/06/06 Solved the resources-from-jar issue, edited some icons,
completed basic attribute manipulation functions.
21/06/06 Work on the CellEditor/Renderer. Considered the posibility
of implementing a system similar to ArgoUML critics for the ArgoPrint editor.
Still couldn't solve the issue with the access to the resources.
20/06/06 The editor has now basic functionality: tree representation
of XML content, new/save/load functions implemented, basic tree manipulation
(adding nodes/removing subtrees). I've experimented with various custom CellEditors
and CellRenderers that will be used as interface for altering the content of the
tree. Still haven't figured out how to access resources (icons and resource bundles)
that are located inside the same jar as the module (looked at dev@argouml archives
and the cookbook; will look at the argouml source code in the morning). I will
commit the changes after I obtain a satisfying result with the Renderers/Editors and
after I add the license/copyright headers.
-19/06/06 XMI/XSLT evaluation, looked at other XML/XSLT editors,
coding for the editor - custom widgets, basic GUI framework
11/06/06 Looked at the XMI-related material in the dev archive,
cookbook and the relation between versions of XMI and UML. Looking to see if
making ArgoPrint work with XMI 2.1 (corresponds to UML 2.0) and providing
a transformation from XMI 1.2 to XMI 2.1 would not create problems hence
solving the problem of having to modify ArgoPrint when UML 2.0 will be used.
Tried to figure out a way of using reflection with XSLT but nothing seems
to work in that direction. Considered a candidate standard XML DTD to be used
to specify data-sources and output for ArgoPrint.
10/06/06 Re-done Chapter 3 of XSLT evaluation based on
the remarks made by Linus.
09/06/06 Looked at the GUI implementation of ArgoUML, drafted
some requirements for the ArgoPrint dialog and done an interface prototype.
08/06/06 School stuff. No more school from now on.
07/06/06 School stuff.
06/06/06 School stuff.
05/06/06 JET evaluation. SoC-related papers.
04/06/06 XSLT Evaluation, learning ANT, cookbook+code exploration
03/06/06 Another distraction is over, finished the SCJP training.
02/06/06 Velocity Evaluation
29/05/06 Read JET tutorials. Set up the Eclipse to work with
JET and made some tests. Read parts of the CookBook and had a look
at the project's code.
28/05/06 Read parts from "DocBook: The Definitive Guide",
ArgoUML Cookbook, Velocity Developer's Guide.
Read Velocity User Guide at . The language seems to
have the same problems like StringTemplate. A unified model is
required for multiple data sources and sorting and filtering have to
be backed up with specific code in the model.
Read the StringTemplate 2.2 documentation  and Terence Parr's
article on MVC separation  and installed the library and made some
simple tests. The implementation is nice (a couple of Smalltalk-like
constructs) but it does not allow fitering, sorting and multiple data
sources from within the template (violation of functional requirements
F-3.2, F-3.3). I could not find an editor to know about StringTemplate
( is a relatively recent thread supporting this).