[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