[jbosstools-commits] JBoss Tools SVN: r43202 - in trunk/cdi/plugins/org.jboss.tools.cdi.gen/src/org/jboss/tools/cdi/gen: model and 1 other directory.
jbosstools-commits at lists.jboss.org
jbosstools-commits at lists.jboss.org
Thu Aug 23 20:40:57 EDT 2012
Author: scabanovich
Date: 2012-08-23 20:40:56 -0400 (Thu, 23 Aug 2012)
New Revision: 43202
Added:
trunk/cdi/plugins/org.jboss.tools.cdi.gen/src/org/jboss/tools/cdi/gen/model/BodyWriter.java
trunk/cdi/plugins/org.jboss.tools.cdi.gen/src/org/jboss/tools/cdi/gen/model/GenMethod.java
trunk/cdi/plugins/org.jboss.tools.cdi.gen/src/org/jboss/tools/cdi/gen/model/GenVisibility.java
Modified:
trunk/cdi/plugins/org.jboss.tools.cdi.gen/src/org/jboss/tools/cdi/gen/CDIProjectGenerator.java
trunk/cdi/plugins/org.jboss.tools.cdi.gen/src/org/jboss/tools/cdi/gen/model/GenClass.java
trunk/cdi/plugins/org.jboss.tools.cdi.gen/src/org/jboss/tools/cdi/gen/model/GenField.java
trunk/cdi/plugins/org.jboss.tools.cdi.gen/src/org/jboss/tools/cdi/gen/model/GenMember.java
trunk/cdi/plugins/org.jboss.tools.cdi.gen/src/org/jboss/tools/cdi/gen/model/GenProject.java
trunk/cdi/plugins/org.jboss.tools.cdi.gen/src/org/jboss/tools/cdi/gen/model/GenType.java
Log:
JBIDE-12446
https://issues.jboss.org/browse/JBIDE-12446
Initial implementation of plugin that allows to generate random CDI projects.
Modified: trunk/cdi/plugins/org.jboss.tools.cdi.gen/src/org/jboss/tools/cdi/gen/CDIProjectGenerator.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.gen/src/org/jboss/tools/cdi/gen/CDIProjectGenerator.java 2012-08-23 19:26:22 UTC (rev 43201)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.gen/src/org/jboss/tools/cdi/gen/CDIProjectGenerator.java 2012-08-24 00:40:56 UTC (rev 43202)
@@ -12,18 +12,22 @@
import java.io.File;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.HashSet;
+import java.util.List;
import java.util.Random;
import java.util.Set;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Platform;
+import org.jboss.tools.cdi.core.CDIConstants;
import org.jboss.tools.cdi.gen.model.GenAnnotation;
import org.jboss.tools.cdi.gen.model.GenAnnotationReference;
import org.jboss.tools.cdi.gen.model.GenClass;
import org.jboss.tools.cdi.gen.model.GenField;
import org.jboss.tools.cdi.gen.model.GenInterface;
+import org.jboss.tools.cdi.gen.model.GenMethod;
import org.jboss.tools.cdi.gen.model.GenProject;
import org.jboss.tools.cdi.gen.model.GenQualifier;
import org.jboss.tools.cdi.gen.model.GenType;
@@ -83,6 +87,9 @@
}
void createTypes() {
+ GenClass string = new GenClass();
+ string.setFullyQualifiedName("java.lang.String");
+
GenInterface[] interfaces = new GenInterface[interfaceCount];
for (int i = 0; i < interfaceCount; i++) {
String name = "MyInterface" + i;
@@ -102,6 +109,12 @@
project.addType(type);
qualifiers[i] = type;
}
+
+ List<String> beanNames = new ArrayList<String>();
+ GenQualifier named = new GenQualifier();
+ named.setName("Named");
+ named.setPackageName("javax.inject");
+
GenClass[] classes = new GenClass[classCount];
for (int i = 0; i < classCount; i++) {
String name = "MyBean" + i;
@@ -110,8 +123,12 @@
type.setTypeName(name);
GenQualifier q = qualifiers[seed.nextInt(qualifierCount)];
type.addQualifierAnnotation(q, "qvalue" + i);
+
+ String beanName = "bean" + (beanNames.size() + 1);
+ type.addQualifierAnnotation(named, beanName);
+ beanNames.add(beanName);
+
classes[i] = type;
-
project.addType(type);
}
for (int i = classes.length - 1; i > 0; i--) {
@@ -132,10 +149,10 @@
//Injections
GenAnnotation injectType = new GenAnnotation();
- injectType.setPackageName("javax.inject");
- injectType.setTypeName("Inject");
+ injectType.setFullyQualifiedName(CDIConstants.INJECT_ANNOTATION_TYPE_NAME);
GenAnnotationReference inject = new GenAnnotationReference();
inject.setAnnotation(injectType);
+
for (int i = 0; i < classes.length; i++) {
for (int j = 0; j < injectionsPerClassCount; j++) {
GenField f = new GenField();
@@ -151,7 +168,22 @@
f.setType(type);
classes[i].addField(f);
}
+ // getName();
+ GenMethod nameProperty = new GenMethod();
+ nameProperty.setReturnType(string);
+ nameProperty.setName("getName");
+ classes[i].addMethod(nameProperty);
}
+
+ //EL
+ for (int i = 0; i < classes.length; i++) {
+ GenField f = new GenField();
+ f.setName("el");
+ f.setType(string);
+ String beanName = beanNames.get(seed.nextInt(beanNames.size()));
+ f.setInitValue("\"#{" + beanName + ".name}\"");
+ classes[i].addField(f);
+ }
}
private String getRandomPackage() {
Added: trunk/cdi/plugins/org.jboss.tools.cdi.gen/src/org/jboss/tools/cdi/gen/model/BodyWriter.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.gen/src/org/jboss/tools/cdi/gen/model/BodyWriter.java (rev 0)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.gen/src/org/jboss/tools/cdi/gen/model/BodyWriter.java 2012-08-24 00:40:56 UTC (rev 43202)
@@ -0,0 +1,38 @@
+package org.jboss.tools.cdi.gen.model;
+
+public class BodyWriter {
+ StringBuilder sb = new StringBuilder();
+ int indent = 0;
+ boolean lineStarted = true;
+
+
+ public BodyWriter append(Object o) {
+ if(lineStarted) {
+ for (int i = 0; i < indent; i++) sb.append("\t");
+ lineStarted = false;
+ }
+ sb.append(o);
+ return this;
+ }
+
+ public BodyWriter newLine() {
+ sb.append("\n");
+ lineStarted = true;
+ return this;
+ }
+
+ public BodyWriter increaseIndent() {
+ indent++;
+ return this;
+ }
+
+ public BodyWriter decreaseIndent() {
+ indent--;
+ return this;
+ }
+
+ public String toString() {
+ return sb.toString();
+ }
+
+}
Property changes on: trunk/cdi/plugins/org.jboss.tools.cdi.gen/src/org/jboss/tools/cdi/gen/model/BodyWriter.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified: trunk/cdi/plugins/org.jboss.tools.cdi.gen/src/org/jboss/tools/cdi/gen/model/GenClass.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.gen/src/org/jboss/tools/cdi/gen/model/GenClass.java 2012-08-23 19:26:22 UTC (rev 43201)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.gen/src/org/jboss/tools/cdi/gen/model/GenClass.java 2012-08-24 00:40:56 UTC (rev 43202)
@@ -75,17 +75,19 @@
}
}
- public void flush(StringBuilder sb) {
- sb.append("package ").append(getPackageName()).append(";\n\n");
+ public void flush(BodyWriter sb) {
+ sb.append("package ").append(getPackageName()).append(";").newLine().newLine();
+
//imports
for (String i: imports) {
- sb.append("import ").append(i).append(";\n");
+ sb.append("import ").append(i).append(";").newLine();
}
sb.append("\n");
//annotations
flushAnnotations(sb);
//header
- sb.append("public class ").append(getTypeName());
+ flushVisibility(sb);
+ sb.append("class ").append(getTypeName());
if(extendedType != null) {
sb.append(" extends ").append(extendedType.getTypeName());
}
@@ -99,15 +101,18 @@
imported++;
sb.append(in.getTypeName());
}
- sb.append(" {\n");
+ sb.append(" {").newLine().increaseIndent();
for (GenField f: fields) {
f.flush(sb);
- sb.append("\n");
+ sb.newLine();
}
+
+ flushMethods(sb);
+
//TODO body
- sb.append("}");
+ sb.decreaseIndent().append("}");
}
}
Modified: trunk/cdi/plugins/org.jboss.tools.cdi.gen/src/org/jboss/tools/cdi/gen/model/GenField.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.gen/src/org/jboss/tools/cdi/gen/model/GenField.java 2012-08-23 19:26:22 UTC (rev 43201)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.gen/src/org/jboss/tools/cdi/gen/model/GenField.java 2012-08-24 00:40:56 UTC (rev 43202)
@@ -17,8 +17,11 @@
*/
public class GenField extends GenMember {
GenType type;
+ String initValue;
- public GenField() {}
+ public GenField() {
+ setVisibility(GenVisibility.PROTECTED);
+ }
public void setType(GenType type) {
this.type = type;
@@ -28,9 +31,17 @@
return type;
}
- public void flush(StringBuilder sb) {
+ public void setInitValue(String s) {
+ initValue = s;
+ }
+
+ public void flush(BodyWriter sb) {
flushAnnotations(sb);
- sb.append("protected ");
- sb.append(type.getTypeName()).append(" ").append(getName()).append(";\n");
+ flushVisibility(sb);
+ sb.append(type.getTypeName()).append(" ").append(getName());
+ if(initValue != null) {
+ sb.append(" = ").append(initValue);
+ }
+ sb.append(";").newLine();
}
}
Modified: trunk/cdi/plugins/org.jboss.tools.cdi.gen/src/org/jboss/tools/cdi/gen/model/GenMember.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.gen/src/org/jboss/tools/cdi/gen/model/GenMember.java 2012-08-23 19:26:22 UTC (rev 43201)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.gen/src/org/jboss/tools/cdi/gen/model/GenMember.java 2012-08-24 00:40:56 UTC (rev 43202)
@@ -22,6 +22,7 @@
public class GenMember {
protected Set<GenAnnotationReference> annotations = new HashSet<GenAnnotationReference>();
String name;
+ GenVisibility visibility = GenVisibility.LOCAL;
public GenMember() {}
@@ -41,7 +42,21 @@
return name;
}
- public void flushAnnotations(StringBuilder sb) {
+ public void setVisibility(GenVisibility visibility) {
+ this.visibility = visibility;
+ }
+
+ public GenVisibility getVisibility() {
+ return visibility;
+ }
+
+ public void flushVisibility(BodyWriter sb) {
+ if(visibility != GenVisibility.LOCAL) {
+ sb.append(visibility.toString()).append(" ");
+ }
+ }
+
+ public void flushAnnotations(BodyWriter sb) {
for (GenAnnotationReference a: getAnnotations()) {
sb.append("@").append(a.getTypeName());
Map<String, Object> vs = a.getValues();
@@ -54,7 +69,7 @@
}
sb.append(")");
}
- sb.append("\n");
+ sb.newLine();
}
}
Added: trunk/cdi/plugins/org.jboss.tools.cdi.gen/src/org/jboss/tools/cdi/gen/model/GenMethod.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.gen/src/org/jboss/tools/cdi/gen/model/GenMethod.java (rev 0)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.gen/src/org/jboss/tools/cdi/gen/model/GenMethod.java 2012-08-24 00:40:56 UTC (rev 43202)
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.cdi.gen.model;
+
+/**
+ *
+ * @author Viacheslav Kabanovich
+ *
+ */
+public class GenMethod extends GenMember {
+ GenType returnType;
+ boolean isAbstract = false;
+
+ public GenMethod() {
+ setVisibility(GenVisibility.PUBLIC);
+ }
+
+ public boolean isAbstract() {
+ return isAbstract;
+ }
+
+ public void setAbstract(boolean b) {
+ isAbstract = b;
+ }
+
+ public void setReturnType(GenType returnType) {
+ this.returnType = returnType;
+ }
+
+ public GenType getReturnType() {
+ return returnType;
+ }
+
+ public void flush(BodyWriter sb) {
+ flushAnnotations(sb);
+ flushVisibility(sb);
+ sb.append(returnType.getTypeName()).append(" ").append(getName());
+ sb.append("(");
+ //TODO parameters
+ sb.append(")");
+ if(isAbstract()) {
+ sb.append(";").newLine();
+ } else {
+ sb.append(" {").newLine().increaseIndent();
+ if(!"void".equals(returnType.getTypeName())) {
+ sb.append("return null;").newLine();
+ }
+ sb.decreaseIndent().append("}");
+ }
+ }
+
+}
Property changes on: trunk/cdi/plugins/org.jboss.tools.cdi.gen/src/org/jboss/tools/cdi/gen/model/GenMethod.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
Modified: trunk/cdi/plugins/org.jboss.tools.cdi.gen/src/org/jboss/tools/cdi/gen/model/GenProject.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.gen/src/org/jboss/tools/cdi/gen/model/GenProject.java 2012-08-23 19:26:22 UTC (rev 43201)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.gen/src/org/jboss/tools/cdi/gen/model/GenProject.java 2012-08-24 00:40:56 UTC (rev 43202)
@@ -86,7 +86,7 @@
} else if(type instanceof GenQualifier) {
flushQualifier(f, templates, (GenQualifier)type);
} else if(type instanceof GenClass) {
- StringBuilder content = new StringBuilder();
+ BodyWriter content = new BodyWriter();
((GenClass)type).flush(content);
FileUtil.writeFile(f, content.toString());
}
Modified: trunk/cdi/plugins/org.jboss.tools.cdi.gen/src/org/jboss/tools/cdi/gen/model/GenType.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.gen/src/org/jboss/tools/cdi/gen/model/GenType.java 2012-08-23 19:26:22 UTC (rev 43201)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.gen/src/org/jboss/tools/cdi/gen/model/GenType.java 2012-08-24 00:40:56 UTC (rev 43202)
@@ -10,7 +10,9 @@
******************************************************************************/
package org.jboss.tools.cdi.gen.model;
+import java.util.ArrayList;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
import org.jboss.tools.cdi.core.CDIConstants;
@@ -23,8 +25,11 @@
public class GenType extends GenMember implements CDIConstants {
Set<String> imports = new HashSet<String>();
String packageName;
+
+ List<GenMethod> methods = new ArrayList<GenMethod>();
public GenType() {
+ setVisibility(GenVisibility.PUBLIC);
}
public void setPackageName(String packageName) {
@@ -43,6 +48,12 @@
return getName();
}
+ public void setFullyQualifiedName(String qn) {
+ int dot = qn.lastIndexOf('.');
+ setTypeName(dot < 0 ? qn : qn.substring(dot + 1));
+ setPackageName(dot < 0 ? "" : qn.substring(0, dot));
+ }
+
public String getFullyQualifiedName() {
return getPackageName() + "." + getName();
}
@@ -51,4 +62,15 @@
imports.add(type);
}
+ public void addMethod(GenMethod method) {
+ methods.add(method);
+ }
+
+ public void flushMethods(BodyWriter sb) {
+ for (GenMethod m: methods) {
+ m.flush(sb);
+ sb.newLine();
+ }
+ }
+
}
Added: trunk/cdi/plugins/org.jboss.tools.cdi.gen/src/org/jboss/tools/cdi/gen/model/GenVisibility.java
===================================================================
--- trunk/cdi/plugins/org.jboss.tools.cdi.gen/src/org/jboss/tools/cdi/gen/model/GenVisibility.java (rev 0)
+++ trunk/cdi/plugins/org.jboss.tools.cdi.gen/src/org/jboss/tools/cdi/gen/model/GenVisibility.java 2012-08-24 00:40:56 UTC (rev 43202)
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.cdi.gen.model;
+
+/**
+ *
+ * @author Viacheslav Kabanovich
+ *
+ */
+public enum GenVisibility {
+ PUBLIC("public"),
+ PROTECTED("protected"),
+ PRIVATE("private"),
+ LOCAL("");
+ String value;
+ GenVisibility(String value) {
+ this.value = value;
+ }
+
+ public String toString() {
+ return value;
+ }
+}
Property changes on: trunk/cdi/plugins/org.jboss.tools.cdi.gen/src/org/jboss/tools/cdi/gen/model/GenVisibility.java
___________________________________________________________________
Added: svn:mime-type
+ text/plain
More information about the jbosstools-commits
mailing list