Update of
/cvsroot/xdoclet-plugins/xdoclet-plugins/plugin-jdo/src/main/java/org/xdoclet/plugin/jdo
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27014
Added Files:
Class.jelly Field.jelly JdoPlugin.jelly Package.jelly
JdoPlugin.java JdoProperty.java
Log Message:
Add initial version of JDO plugin
--- NEW FILE: JdoPlugin.jelly ---
<?xml version="1.0" encoding="UTF-8"?>
<j:jelly xmlns:j="jelly:core" xmlns:x="jelly:xml">
<x:doctype
name="jdo"
publicId="-//Sun Microsystems, Inc.//DTD Java Data Objects Metadata
2.0//EN"
systemId="http://java.sun.com/dtd/jdo_2_0.dtd"
trim="true"
/>
<j:set var="class" value="${metadata}"/>
<jdo>
<j:import uri="org/xdoclet/plugin/jdo/Package.jelly" inherit="true"/>
</jdo>
</j:jelly>
--- NEW FILE: Class.jelly ---
<?xml version="1.0" encoding="UTF-8"?>
<j:jelly xmlns:j="jelly:core">
<j:set var="classTag" value="${class.getTagByName('jdo.class')}"/>
<class name="${class.name}" identity-type="${classTag.identityType}"
detachable="${classTag.detachable}"
embedded-only="${classTag.embeddedOnly}"
objectid-class="${classTag.objectidClass}"
persistence-modifier="${classTag.persistenceModifier}"
requires-extent="${classTag.requiresExtent}"
table="${classTag.table}">
<j:forEach var="field" items="${plugin.getClassProperties(class)}">
<!-- <j:forEach var="fieldTag"
items="${class.getTagsByName('jdo.field')}">-->
<j:import uri="org/xdoclet/plugin/jdo/Field.jelly" inherit="true"/>
</j:forEach>
</class>
</j:jelly>
--- NEW FILE: Field.jelly ---
<?xml version="1.0" encoding="UTF-8"?>
<j:jelly xmlns:j="jelly:core">
<j:set var="fieldTag" value="${field.entity.getTagByName('jdo.field')}"/>
<field name="${field.name}"
persistence-modifier="${fieldTag.persistenceModifier}"
column="${fieldTag.column}"
default-fetch-group="${fieldTag.defaultFetchGroup}"
delete-action="${fieldTag.deleteAction}"
dependent="${fieldTag.dependent}"
embedded="${fieldTag.embedded}"
fetch-depth="${fieldTag.fetchDepth}"
foreign-key="${fieldTag.foreignKey}"
indexed="${fieldTag.indexed}"
load-fetch-group="${fieldTag.loadFetchGroup}"
null-value="${fieldTag.nullValue}"
primary-key="${fieldTag.primaryKey}"
sequence="${fieldTag.sequence}"
serialized="${fieldTag.serialized}"
table="${fieldTag.table}"
unique="${fieldTag.unique}"
value-strategy="${fieldTag.valueStrategy}">
</field>
</j:jelly>
--- NEW FILE: JdoPlugin.java ---
/*
* Copyright (c) 2003
* XDoclet Team
* All rights reserved.
*/
package org.xdoclet.plugin.jdo;
import java.util.*;
import org.generama.JellyTemplateEngine;
import org.generama.QDoxCapableMetadataProvider;
import org.generama.WriterMapper;
import org.generama.defaults.QDoxPlugin;
import org.xdoclet.plugin.jdo.qtags.TagLibrary;
import com.thoughtworks.qdox.model.AbstractJavaEntity;
import com.thoughtworks.qdox.model.BeanProperty;
import com.thoughtworks.qdox.model.JavaClass;
import com.thoughtworks.qdox.model.JavaField;
/**
* DOCUMENT ME!
*
* @author Anatol Pomozov
* @version $Revision: 1.1 $
*/
public class JdoPlugin extends QDoxPlugin {
// list holding tag names defining property existence
private static final List PROPERTY_TAGS = new ArrayList();
static {
PROPERTY_TAGS.add("jdo.field");
}
public JdoPlugin(JellyTemplateEngine jellyTemplateEngine,
QDoxCapableMetadataProvider metadataProvider,
WriterMapper writerMapper) {
super(jellyTemplateEngine, metadataProvider, writerMapper);
setFileregex("\\.java");
setFilereplace("\\.jdo.xml");
setMultioutput(true);
new TagLibrary(metadataProvider);
}
/**
* provide list of hibernate properties for class. it could be getter, as
well as
* field ( for direct property access )
*
* @param clazz DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public List getClassProperties(JavaClass clazz) {
List retval = new ArrayList();
getProperties(clazz, PROPERTY_TAGS, retval);
return retval;
}
/**
* provide list of valid property tags
*
* @return DOCUMENT ME!
*/
public List getPropertyTagList() {
return PROPERTY_TAGS;
}
public boolean shouldGenerate(Object metadata) {
JavaClass clazz = (JavaClass) metadata;
return clazz.getTagByName("jdo.class") != null;
}
/**
* gather hibernate propertis from given class into list
*
* @param clazz DOCUMENT ME!
* @param requierdTags DOCUMENT ME!
* @param accumulate DOCUMENT ME!
*/
private void getProperties(JavaClass clazz, Collection requierdTags, List
accumulate) {
// walk through property getters
BeanProperty[] beanProperties = clazz.getBeanProperties();
JdoProperty property;
for (int i = 0; i < beanProperties.length; i++) {
// property is ours, if we have at least one of designated property
// tags
// and there is accessor
if ((beanProperties[i] != null) && (beanProperties[i].getAccessor()
!= null) &&
!getTags(beanProperties[i].getAccessor(),
requierdTags).isEmpty()) {
property = new JdoProperty();
property.setName(beanProperties[i].getName());
property.setEntity(beanProperties[i].getAccessor());
if (!accumulate.contains(property)) {
accumulate.add(property);
}
}
}
JavaField[] fields = clazz.getFields();
for (int i = 0; i < fields.length; i++) {
if (!getTags(fields[i], requierdTags).isEmpty()) {
property = new JdoProperty();
property.setName(fields[i].getName());
property.setEntity(fields[i]);
property.setAccess("field");
if (!accumulate.contains(property)) {
accumulate.add(property);
}
}
}
}
/**
* provide combined list of all the tags with given tag names
*
* @param metadata DOCUMENT ME!
* @param tagNames DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
private List getTags(AbstractJavaEntity metadata, Collection tagNames) {
List al = new ArrayList();
for (Iterator iter = tagNames.iterator(); iter.hasNext();) {
al.addAll(Arrays.asList(metadata.getTagsByName((String)
iter.next())));
}
return al;
}
}
--- NEW FILE: Package.jelly ---
<?xml version="1.0" encoding="UTF-8"?>
<j:jelly xmlns:j="jelly:core" xmlns:x="jelly:xml">
<package name="${class.package}">
<j:import uri="org/xdoclet/plugin/jdo/Class.jelly" inherit="true"/>
</package>
</j:jelly>
--- NEW FILE: JdoProperty.java ---
/*
* Copyright (c) 2003
* XDoclet Team
* All rights reserved.
*/
package org.xdoclet.plugin.jdo;
import com.thoughtworks.qdox.model.AbstractJavaEntity;
import com.thoughtworks.qdox.model.JavaField;
import com.thoughtworks.qdox.model.JavaMethod;
import com.thoughtworks.qdox.model.Type;
/**
* DOCUMENT ME!
*
* @author Anatol Pomozov
*/
public class JdoProperty {
private AbstractJavaEntity entity;
private String access;
private String name;
public void setAccess(String access) {
this.access = access;
}
public String getAccess() {
return access;
}
public void setEntity(AbstractJavaEntity entity) {
this.entity = entity;
}
public AbstractJavaEntity getEntity() {
return entity;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
/**
* retrtieve corresponding type from property
*
* @return DOCUMENT ME!
*/
public Type getType() {
final AbstractJavaEntity en = getEntity();
if (en instanceof JavaMethod) {
return ((JavaMethod) en).getReturns();
} else if (en instanceof JavaField) {
return ((JavaField) en).getType();
} else {
return Type.VOID;
}
}
/**
* puprose of this equality method is to allow proprety overriding
properties are
* equal, if they have the same name, regardless of access. Since we build
property
* map from top to bottom of class hierarchy, we will reflect java behaviour
*
* @param o DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public boolean equals(Object o) {
if (o == null) {
return false;
}
if (!(o instanceof JdoProperty)) {
return false;
}
if (getName() != null) {
return getName().equals(((JdoProperty) o).getName());
}
return false;
}
public int hashCode() {
if (getName() != null) {
return getName().hashCode();
}
return super.hashCode();
}
public String toString() {
return "[" + this.name + "][" + this.access + "]";
}
}
-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
xdoclet-plugins-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/xdoclet-plugins-commits