Update of 
/cvsroot/xdoclet-plugins/xdoclet-plugins/plugin-actionscript/src/main/java/org/xdoclet/plugin/actionscript
In directory 
sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9614/plugin-actionscript/src/main/java/org/xdoclet/plugin/actionscript

Added Files:
        ActionScript3Plugin.java ActionScript3Plugin.vm 
        ActionScriptPlugin.java ActionScriptPlugin.vm 
        ActionScriptPluginBase.java DependencyFragmentPlugin.java 
        DependencyFragmentPlugin.vm 
Log Message:
XDP-136 : adding Joe Berkovitz's contribution : Actionscript plugin

--- NEW FILE: DependencyFragmentPlugin.vm ---
##
## Template for static dependencies citing generated AS value objects.
##
## Author: Joe Berkovitz
##
// ${dontedit}
// Generated by ${plugin.class.name} from ${class.fullyQualifiedName}
// Static Dependencies on generated ActionScript Beans

#foreach( $class in $metadata )
    private static var _dep_${class.name}:Function = 
${class.fullyQualifiedName};
#end

--- NEW FILE: DependencyFragmentPlugin.java ---
package org.xdoclet.plugin.actionscript;

import com.thoughtworks.qdox.model.DocletTag;
import com.thoughtworks.qdox.model.JavaClass;
import org.generama.QDoxCapableMetadataProvider;
import org.generama.VelocityTemplateEngine;
import org.generama.WriterMapper;
import org.generama.defaults.QDoxPlugin;
import org.xdoclet.plugin.actionscript.qtags.ActionScriptClassTagImpl;
import org.xdoclet.plugin.actionscript.qtags.ActionScriptPropertyTagImpl;

/**
 * @author Joe Berkovitz
 */
public class DependencyFragmentPlugin extends QDoxPlugin {
    /** Default name for generated file */
    private String fileName = "StaticDependencies.as";

    public DependencyFragmentPlugin(VelocityTemplateEngine 
velocityTemplateEngine, QDoxCapableMetadataProvider metadataProvider, 
WriterMapper writerMapper) {
        super(velocityTemplateEngine, metadataProvider, writerMapper);

        setMultioutput(false);
        setFileregex("\\.java");
        setFilereplace(fileName);
        
metadataProvider.getDocletTagFactory().registerTag(ActionScriptClassTagImpl.NAME,
 ActionScriptClassTagImpl.class);
    }

    public String getDestinationFilename(Object metadata) {
        return fileName;
    }

    public boolean shouldGenerate(Object metadata) {
        JavaClass javaClass = (JavaClass) metadata;
        DocletTag asTag = javaClass.getTagByName("actionscript.class");
        return (asTag != null);
    }
}


--- NEW FILE: ActionScriptPluginBase.java ---
package org.xdoclet.plugin.actionscript;

import com.thoughtworks.qdox.model.BeanProperty;
import com.thoughtworks.qdox.model.DocletTag;
import com.thoughtworks.qdox.model.JavaClass;
import com.thoughtworks.qdox.model.JavaField;
import com.thoughtworks.qdox.model.Type;
import org.generama.QDoxCapableMetadataProvider;
import org.generama.VelocityTemplateEngine;
import org.generama.WriterMapper;
import org.generama.defaults.JavaGeneratingPlugin;
import org.xdoclet.plugin.actionscript.qtags.ActionScriptClassTagImpl;
import org.xdoclet.plugin.actionscript.qtags.ActionScriptPropertyTagImpl;

/**
 * @author Joe Berkovitz
 */
abstract public class ActionScriptPluginBase extends JavaGeneratingPlugin {
    public ActionScriptPluginBase(VelocityTemplateEngine 
velocityTemplateEngine, QDoxCapableMetadataProvider metadataProvider, 
WriterMapper writerMapper) {
        super(velocityTemplateEngine, metadataProvider, writerMapper);

        setMultioutput(true);

        setFileregex("\\.java");
        setFilereplace(".as");

        
metadataProvider.getDocletTagFactory().registerTag(ActionScriptClassTagImpl.NAME,
 ActionScriptClassTagImpl.class);
        
metadataProvider.getDocletTagFactory().registerTag(ActionScriptPropertyTagImpl.NAME,
 ActionScriptPropertyTagImpl.class);
    }

    public boolean shouldGenerate(Object metadata) {
        JavaClass javaClass = (JavaClass) metadata;
        DocletTag asTag = javaClass.getTagByName("actionscript.class");
        return (asTag != null);
    }

    // Callback methods from Velocity Template

    public String getStaticFieldValue(JavaClass clazz, JavaField field)
            throws Exception {
        Class c = Class.forName(clazz.getFullyQualifiedName());
        Object value = c.getField(field.getName()).get(null);
        if (value instanceof String) {
            return '"' + value.toString() + '"';
        } else {
            return value.toString();
        }
    }

    public String getPropertyType(BeanProperty property) {
        String type = getFullyQualifiedPropertyType(property);
        int idx = type.lastIndexOf(".");
        if (idx < 0) {
            return type;
        } else {
            return type.substring(idx + 1);
        }
    }

    public String getFullyQualifiedPropertyType(BeanProperty property) {
        DocletTag propTag = 
property.getAccessor().getTagByName("actionscript.property");
        if (propTag != null
                && propTag.getNamedParameter("type") != null) {
            return propTag.getNamedParameter("type");
        } else {
            return toActionScriptType(property.getType());
        }
    }

    abstract public String toActionScriptType(Type type);
}

--- NEW FILE: ActionScriptPlugin.java ---
package org.xdoclet.plugin.actionscript;

import com.thoughtworks.qdox.model.Type;
import org.generama.QDoxCapableMetadataProvider;
import org.generama.VelocityTemplateEngine;
import org.generama.WriterMapper;
import org.xdoclet.plugin.actionscript.qtags.ActionScriptClassTagImpl;
import org.xdoclet.plugin.actionscript.qtags.ActionScriptPropertyTagImpl;

import java.util.HashMap;

/**
 * @author Joe Berkovitz
 */
public class ActionScriptPlugin extends ActionScriptPluginBase {
    public ActionScriptPlugin(VelocityTemplateEngine velocityTemplateEngine, 
QDoxCapableMetadataProvider metadataProvider, WriterMapper writerMapper) {
        super(velocityTemplateEngine, metadataProvider, writerMapper);
    }

    public String toActionScriptType(Type type) {
        if (type.isArray()) {
            return "Array";
        }

        String result = type.getValue();
        if (actionScriptTypeMap.get(result) != null) {
            return (String) actionScriptTypeMap.get(result);
        }

        return result;
    }

    private static final HashMap actionScriptTypeMap = new HashMap();

    static {
        actionScriptTypeMap.put("boolean", "Boolean");
        actionScriptTypeMap.put("int", "Number");
        actionScriptTypeMap.put("long", "Number");
        actionScriptTypeMap.put("short", "Number");
        actionScriptTypeMap.put("float", "Number");
        actionScriptTypeMap.put("double", "Number");
        actionScriptTypeMap.put("byte", "Number");
        actionScriptTypeMap.put("java.lang.Boolean", "Boolean");
        actionScriptTypeMap.put("java.lang.Integer", "Number");
        actionScriptTypeMap.put("java.lang.Long", "Number");
        actionScriptTypeMap.put("java.lang.Short", "Number");
        actionScriptTypeMap.put("java.lang.Float", "Number");
        actionScriptTypeMap.put("java.lang.Double", "Number");
        actionScriptTypeMap.put("java.lang.Byte", "Number");
        actionScriptTypeMap.put("java.lang.Number", "Number");
        actionScriptTypeMap.put("java.lang.String", "String");
        actionScriptTypeMap.put("java.util.List", "Array");
        actionScriptTypeMap.put("java.util.Set", "Array");
        actionScriptTypeMap.put("java.util.Collection", "Array");
    }
}

--- NEW FILE: ActionScriptPlugin.vm ---
#set( $class = $metadata )
##
## Template for ActionScript value objects
##
## Author: Joe Berkovitz
##
// ${dontedit}
// Generated by ${plugin.class.name} from ${class.fullyQualifiedName}

#foreach( $beanProperty in $class.getBeanProperties() )
#if ($plugin.getFullyQualifiedPropertyType($beanProperty).indexOf(".") >= 0)
import ${plugin.getFullyQualifiedPropertyType($beanProperty)};
#end
#end

#if ($class.superClass.javaClass.fullyQualifiedName == "java.lang.Object")
class ${class.fullyQualifiedName}
#else
import ${class.superClass.javaClass.fullyQualifiedName};

class ${class.fullyQualifiedName} extends ${class.superClass.javaClass.name}
#end
{
    private static var regClass = 
        Object.registerClass("${class.fullyQualifiedName}", 
${class.fullyQualifiedName});

#foreach( $field in $class.getFields() )
#if ($field.static && $field.public && $field.final)
#if ($field.comment)
  /** ${field.comment} */
#end
  public static var ${field.name}:${plugin.toActionScriptType($field.type)} = 
${plugin.getStaticFieldValue($class, $field)};

#end
#end

#foreach( $beanProperty in $class.getBeanProperties() )
#if ($beanProperty.accessor.comment)
  /** ${beanProperty.accessor.comment} */
#end
  public var ${beanProperty.name}:${plugin.getPropertyType($beanProperty)};

#end
}

--- NEW FILE: ActionScript3Plugin.java ---
package org.xdoclet.plugin.actionscript;

import com.thoughtworks.qdox.model.Type;
import org.generama.QDoxCapableMetadataProvider;
import org.generama.VelocityTemplateEngine;
import org.generama.WriterMapper;
import org.xdoclet.plugin.actionscript.qtags.ActionScriptClassTagImpl;
import org.xdoclet.plugin.actionscript.qtags.ActionScriptPropertyTagImpl;

import java.util.HashMap;

/**
 * @author Joe Berkovitz
 */
public class ActionScript3Plugin extends ActionScriptPluginBase {
    public ActionScript3Plugin(VelocityTemplateEngine velocityTemplateEngine, 
QDoxCapableMetadataProvider metadataProvider, WriterMapper writerMapper) {
        super(velocityTemplateEngine, metadataProvider, writerMapper);
    }

    public String toActionScriptType(Type type) {
        if (type.isArray()) {
            return "Array";
        }

        String result = type.getValue();
        if (actionScriptTypeMap.get(result) != null) {
            return (String) actionScriptTypeMap.get(result);
        }

        return result;
    }

    private static final HashMap actionScriptTypeMap = new HashMap();

    static {
        actionScriptTypeMap.put("boolean", "Boolean");
        actionScriptTypeMap.put("int", "int");
        actionScriptTypeMap.put("long", "Number");
        actionScriptTypeMap.put("short", "Number");
        actionScriptTypeMap.put("float", "Number");
        actionScriptTypeMap.put("double", "Number");
        actionScriptTypeMap.put("byte", "Number");
        actionScriptTypeMap.put("java.lang.Boolean", "Boolean");
        actionScriptTypeMap.put("java.lang.Integer", "int");
        actionScriptTypeMap.put("java.lang.Long", "Number");
        actionScriptTypeMap.put("java.lang.Short", "Number");
        actionScriptTypeMap.put("java.lang.Float", "Number");
        actionScriptTypeMap.put("java.lang.Double", "Number");
        actionScriptTypeMap.put("java.lang.Byte", "Number");
        actionScriptTypeMap.put("java.lang.Number", "Number");
        actionScriptTypeMap.put("java.lang.String", "String");
        actionScriptTypeMap.put("java.util.List", "Array");
        actionScriptTypeMap.put("java.util.Set", "Array");
        actionScriptTypeMap.put("java.util.Collection", "Array");
    }
}

--- NEW FILE: ActionScript3Plugin.vm ---
#set( $class = $metadata )
##
## Template for ActionScript value objects
##
## Author: Joe Berkovitz
##
// ${dontedit}
// Generated by ${plugin.class.name} from ${class.fullyQualifiedName}

package ${class.package}
{

#foreach( $beanProperty in $class.getBeanProperties() )
#if ($plugin.getFullyQualifiedPropertyType($beanProperty).indexOf(".") >= 0)
  import ${plugin.getFullyQualifiedPropertyType($beanProperty)};
#end
#end
#if ($class.superClass.javaClass.fullyQualifiedName == "java.lang.Object")

  public class ${class.name}
#else
  import ${class.superClass.javaClass.fullyQualifiedName};

  public class ${class.name} extends ${class.superClass.javaClass.name}
#end
  {

#foreach( $field in $class.getFields() )
#if ($field.static && $field.public && $field.final)
#if ($field.comment)
    /** ${field.comment} */
#end
    public static var ${field.name}:${plugin.toActionScriptType($field.type)} = 
${plugin.getStaticFieldValue($class, $field)};

#end
#end

#foreach( $beanProperty in $class.getBeanProperties() )
#if ($beanProperty.accessor.comment)
    /** ${beanProperty.accessor.comment} */
#end
#if 
($beanProperty.accessor.getTagByName("actionscript.property").getNamedParameter("bindable"))
    [Bindable]
#end
    public var ${beanProperty.name}:${plugin.getPropertyType($beanProperty)};

#end
  }
}



-------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc. Do you grep through log files
for problems?  Stop!  Download the new AJAX search engine that makes
searching your log files as easy as surfing the  web.  DOWNLOAD SPLUNK!
http://ads.osdn.com/?ad_id=7637&alloc_id=16865&op=click
_______________________________________________
xdoclet-plugins-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/xdoclet-plugins-commits

Reply via email to