Author: alexsmirnov
Date: 2010-05-26 19:43:23 -0400 (Wed, 26 May 2010)
New Revision: 17300
Added:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/generate/freemarker/ClassNameModel.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/generate/freemarker/FreeMakerUtils.java
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/generate/freemarker/CdkConfiguration.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/generate/freemarker/LibraryModelWrapper.java
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/generate/freemarker/PropertyModel.java
Log:
CODING IN PROGRESS - issue RF-8568: Improve FreeMarker generator.
https://jira.jboss.org/browse/RF-8568
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/generate/freemarker/CdkConfiguration.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/generate/freemarker/CdkConfiguration.java 2010-05-26
22:16:20 UTC (rev 17299)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/generate/freemarker/CdkConfiguration.java 2010-05-26
23:43:23 UTC (rev 17300)
@@ -42,14 +42,14 @@
private Logger log;
@Inject
- public CdkConfiguration(ObjectWrapper wrapper, Logger log) {
+ public CdkConfiguration(ObjectWrapper wrapper, Logger log, FreeMakerUtils utils) {
super();
this.log = log;
- // load templates from this project.
+ // load templates from plugin classloader.
setClassForTemplateLoading(this.getClass(), TEMPLATES);
setTemplateUpdateDelay(10000);// Forever...
-
+ setSharedVariable("utils", utils);
setObjectWrapper(wrapper);
// Add context variables
Added:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/generate/freemarker/ClassNameModel.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/generate/freemarker/ClassNameModel.java
(rev 0)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/generate/freemarker/ClassNameModel.java 2010-05-26
23:43:23 UTC (rev 17300)
@@ -0,0 +1,72 @@
+/*
+ * $Id$
+ *
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.richfaces.cdk.generate.freemarker;
+
+import org.richfaces.cdk.model.ClassName;
+
+import freemarker.ext.beans.BeansWrapper;
+import freemarker.ext.beans.StringModel;
+import freemarker.ext.util.ModelFactory;
+import freemarker.template.ObjectWrapper;
+import freemarker.template.TemplateModel;
+import freemarker.template.TemplateModelException;
+
+/**
+ * <p class="changed_added_4_0">
+ * </p>
+ *
+ * @author asmirnov(a)exadel.com
+ *
+ */
+public class ClassNameModel extends StringModel {
+
+ static final ModelFactory FACTORY = new ModelFactory() {
+ public TemplateModel create(Object object, ObjectWrapper wrapper) {
+ return new ClassNameModel((ClassName) object, (BeansWrapper) wrapper);
+ }
+ };
+
+ private final ClassName className;
+
+ public ClassNameModel(ClassName object, BeansWrapper wrapper) {
+ super(object, wrapper);
+ this.className = object;
+ }
+
+ @Override
+ public TemplateModel get(String key) throws TemplateModelException {
+ Object value;
+ if ("short".equals(key)) {
+ value = this.className.isPrimitive() || isFromJavaLang();
+ } else {
+ return super.get(key);
+ }
+ return wrapper.wrap(value);
+ }
+
+ public boolean isFromJavaLang() {
+ return "java.lang".equals(className.getPackage());
+ }
+
+}
Property changes on:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/generate/freemarker/ClassNameModel.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/generate/freemarker/FreeMakerUtils.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/generate/freemarker/FreeMakerUtils.java
(rev 0)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/generate/freemarker/FreeMakerUtils.java 2010-05-26
23:43:23 UTC (rev 17300)
@@ -0,0 +1,68 @@
+/*
+ * $Id$
+ *
+ * License Agreement.
+ *
+ * Rich Faces - Natural Ajax for Java Server Faces (JSF)
+ *
+ * Copyright (C) 2007 Exadel, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1 as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+package org.richfaces.cdk.generate.freemarker;
+
+import java.util.List;
+
+import com.google.common.collect.ImmutableMap;
+
+import freemarker.template.TemplateHashModel;
+import freemarker.template.TemplateMethodModel;
+import freemarker.template.TemplateMethodModelEx;
+import freemarker.template.TemplateModel;
+import freemarker.template.TemplateModelException;
+
+/**
+ * <p class="changed_added_4_0">This class implements different utility
functions used by generator.</p>
+ * @author asmirnov(a)exadel.com
+ *
+ */
+public class FreeMakerUtils implements TemplateHashModel {
+
+ ImmutableMap<String, ? extends TemplateMethodModel> functions =
ImmutableMap.<String, TemplateMethodModel>builder().
+ put("version", new TemplateMethodModelEx() {
+
+ @Override
+ public Object exec(List arguments) throws TemplateModelException {
+ return "4.0.0";
+ }
+ }).
+ build();
+ /* (non-Javadoc)
+ * @see freemarker.template.TemplateHashModel#get(java.lang.String)
+ */
+ @Override
+ public TemplateModel get(String key) throws TemplateModelException {
+ return functions.get(key);
+ }
+
+ /* (non-Javadoc)
+ * @see freemarker.template.TemplateHashModel#isEmpty()
+ */
+ @Override
+ public boolean isEmpty() throws TemplateModelException {
+ return false;
+ }
+
+}
Property changes on:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/generate/freemarker/FreeMakerUtils.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/generate/freemarker/LibraryModelWrapper.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/generate/freemarker/LibraryModelWrapper.java 2010-05-26
22:16:20 UTC (rev 17299)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/generate/freemarker/LibraryModelWrapper.java 2010-05-26
23:43:23 UTC (rev 17300)
@@ -25,7 +25,9 @@
package org.richfaces.cdk.generate.freemarker;
+import org.richfaces.cdk.model.ClassName;
import org.richfaces.cdk.model.ModelElementBase;
+import org.richfaces.cdk.model.PropertyBase;
import freemarker.ext.beans.BeansWrapper;
import freemarker.template.ObjectWrapper;
@@ -43,18 +45,20 @@
super();
setStrict(true);
setSimpleMapWrapper(true);
-
// setNullModel(TemplateScalarModel.EMPTY_STRING);
setUseCache(true);
}
@Override
public TemplateModel wrap(Object obj) throws TemplateModelException {
- // TODO wrap specified model classes.
- if (obj instanceof ModelElementBase) {
+ if (obj instanceof PropertyBase) {
+ return new PropertyModel((PropertyBase) obj, this);
+ } else if (obj instanceof ClassName) {
+ return create(obj, ClassNameModel.FACTORY);
+ } else if (obj instanceof ModelElementBase) {
return new ModelElementBaseTemplateModel((ModelElementBase) obj, this);
+ } else {
+ return super.wrap(obj);
}
-
- return super.wrap(obj);
}
}
Modified:
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/generate/freemarker/PropertyModel.java
===================================================================
---
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/generate/freemarker/PropertyModel.java 2010-05-26
22:16:20 UTC (rev 17299)
+++
root/cdk/trunk/plugins/generator/src/main/java/org/richfaces/cdk/generate/freemarker/PropertyModel.java 2010-05-26
23:43:23 UTC (rev 17300)
@@ -72,24 +72,12 @@
value = getName();
} else if ("capitalizeName".equals(key)) {
value = capitalizeName();
- } else if ("simpleTypeName".equals(key)) {
- value = this.property.getType().getSimpleName();
- } else if ("boxingClass".equals(key)) {
- value = this.property.getType().getBoxingName();
- } else if ("isPrimitive".equals(key)) {
- value = this.property.isPrimitive();
- } else if ("isPredefined".equals(key)) {
- value = this.property.isPrimitive() ||
isFromJavaLang(this.property.getType());
} else if ("typeForCasting".equals(key)) {
value = typeForCasting();
- } else if ("required".equals(key)) {
- value = String.valueOf(this.property.isRequired());
} else if ("isBingingAttribute".equals(key)) {
value = isBingingAttribute();
} else if ("isBinging".equals(key)) {
value = isBinging();
- } else if ("type".equals(key)) {
- value = this.property.getType().getName();
} else {
return super.get(key);
}