[ 
https://issues.apache.org/jira/browse/JDO-615?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12654224#action_12654224
 ] 

Michael Bouschen commented on JDO-615:
--------------------------------------

Sorry for being late in this discussion.

The patch jdometadata5.patch looks good. However, I have a couple of remarks 
and most of them have been discussed during the JDO TCK conference call Friday 
Dec 4:

- I like the idea that a Metadata component serves as factory method for its 
child components. E.g. ClassMetada provides a method to add a new field or a 
method to add the inheritance metadata for the class. The method has two tasks: 
create a new subcomponent instance and automatically attach the new instance to 
the parent. Given that, I think we should skip method setParent from the super 
interface Metadata.

- In the current patch the naming pattern for single valued subcomponent is 
"Subcomponent setSubcomponent()" for the factory method and "Subcomponent 
getSubcomponent()" for the getter. I find this confusing, because this looks 
like a JavaBeans pattern where the setter method uses a very unusual signature. 
I propose to use "Subcomponent newSubcomponent()" for the factory methods for 
both single-valued and multi-valued subcomponents.

- The factory method newSubcomponent may be called multiple times in the case 
of multi-valued subcomponents, each call creates a new subcomponent. In the 
case of a single-valued subcomponent, the first call creates the subcomponent 
and further call should throw an exception.

- I propose to have two overloaded factory methods: one version taking no 
arguments and another version taking the required attributes of the 
subcomponent as parameters. E.g. ClassMetadata would have the methods:
   FieldMetadata newField();
   FieldMetadata newField(String name);
The version w/o parameters allows a tool to create the subcomponent before 
processing all the attributes of the subcomponent.

- As already included in the patch, I do not see the need for methods modifying 
the structure of the metadata graph after it is setup, so we do not need any 
unset or remove methods.

- The methods for metadata attributes (that are not subcomponents) follow the 
JavaBeans pattern, e.g.
  void setColumn(String col);
  String getColumn();

- Boolean attributes use the Java Wrapper class Boolean as the return type. 
This allows to return null in order to express, that the attribute has not been 
set. Should the corresponding setter take a Boolean argument instead of a 
boolean? This way getter and setter use the same type for the property.

> MetaData specification API
> --------------------------
>
>                 Key: JDO-615
>                 URL: https://issues.apache.org/jira/browse/JDO-615
>             Project: JDO
>          Issue Type: New Feature
>            Reporter: Andy Jefferson
>             Fix For: JDO 2 maintenance release 3
>
>         Attachments: jdometadata-5.patch
>
>
> We can specify MetaData via XML or annotations. The only way missing is via 
> an API. I propose mirroring the XML structure with interfaces of the form
> public interface MetaData
> {
>     addExtension(String key, String value);
>     removeExtension(String key, String value);
>     ...
> }
> public interface FileMetaData
> {
>     addPackage(PackageMetaData pmd);
>     ...
> }
> public interface PackageMetaData
> {
>     addClass(ClassMetaData cmd)
>     ...
> }
> public interface ClassMetaData
> {
>     addField(FieldMetaData fmd)
>     ...
> }
> public interface FieldMetaData
> {
>     setInheritance(InheritanceMetaData inhmd)
>     ...
> }
> and so on.
> We would then require a method on the PMF to register the metadata.
> If there are no objections to such a feature I'll propose a patch to try to 
> provide all current JDO2 capabilities.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to