public void removeMethodByParamsClass(JavaClassSource javaClassSource, String methodName, Class<?>... paramTypes) { logger.debug("Removing method: " + methodName + ", form class: " + javaClassSource.getName()); MethodSource<JavaClassSource> method = javaClassSource.getMethod(methodName, paramTypes); if (method != null) { javaClassSource.removeMethod(method); logger.debug("Method method: " + methodName + ", was removed from class: " + javaClassSource.getName()); } else { logger.debug("Method method: " + methodName + " not exists for class: " + javaClassSource.getName()); } }
public void removeMethodByParamsClassName(JavaClassSource javaClassSource, String methodName, String... paramTypes) { logger.debug("Removing method: " + methodName + ", form class: " + javaClassSource.getName()); MethodSource<JavaClassSource> method = javaClassSource.getMethod(methodName, paramTypes); if (method != null) { javaClassSource.removeMethod(method); logger.debug("Method method: " + methodName + ", was removed from class: " + javaClassSource.getName()); } else { logger.debug("Method method: " + methodName + " not exists for class: " + javaClassSource.getName()); } }
public boolean updateClassName(JavaClassSource javaClassSource, String name) throws Exception { String oldName = javaClassSource.getName(); javaClassSource.setName(name); return StringUtils.equals(oldName, name); }
private void addGetMetdataMethod(JavaClassSource command) { MethodSource<JavaClassSource> method = command.addMethod() .setPublic() .setName("getMetadata").setReturnType(UICommandMetadata.class) .setParameters("UIContext context"); method.addAnnotation(Override.class); StringBuilder body = new StringBuilder() .append("return Metadata.forCommand(") .append(command.getName()).append(".class)").append('\n') .append("\t.name(\"").append(commandName.getValue()) .append("\")"); Iterator<String> iterator = categories.getValue().iterator(); if (iterator.hasNext()) { body.append("\t.category(Categories.create("); while (iterator.hasNext()) { body.append('"').append(iterator.next()).append('"'); if (iterator.hasNext()) body.append(", "); } body.append("))"); } body.append(';'); method.setBody(body.toString()); }
private void updateJavaClassSource(DataObject dataObject, JavaClassSource javaClassSource, Map<String, String> renames, List<String> deletions, ClassTypeResolver classTypeResolver) throws Exception { if (javaClassSource == null || !javaClassSource.isClass()) { logger.warn("A null javaClassSource or javaClassSouce is not a Class, no processing will be done. javaClassSource: " + javaClassSource + " className: " + (javaClassSource != null ? javaClassSource.getName() : null)); return; } JavaRoasterModelDriver modelDriver = new JavaRoasterModelDriver(filterHolder); UpdateInfo updateInfo = new UpdateInfo(); //prepare additional update info prior update if (renames != null) { for (Map.Entry<String, String> entry : renames.entrySet()) { updateInfo.addClassRename(entry.getKey(), entry.getValue()); } } if (deletions != null) { for (String deletion : deletions) { updateInfo.addDeletedClass(deletion); } } modelDriver.updateSource(javaClassSource, dataObject, updateInfo, classTypeResolver); }
/** * Create a <i>hashCode</i> and <i>equals</i> implementation for the given class and fields * * @deprecated Use {@link Refactory#createHashCodeAndEquals(JavaClass, Field<O>...)} instead, since this method relies * on the existence of the id field */ @Deprecated public static void createHashCodeAndEquals(final JavaClassSource clazz) { clazz.addMethod( "public boolean equals(Object that) { " + "if (this == that) { return true; } " + "if (that == null) { return false; } " + "if (getClass() != that.getClass()) { return false; } " + "if (id != null) { return id.equals(((" + clazz.getName() + ") that).id); } " + "return super.equals(that); " + "}") .addAnnotation(Override.class); clazz.addMethod( "public int hashCode() { " + "if (id != null) { return id.hashCode(); } " + "return super.hashCode(); }") .addAnnotation(Override.class); }
/** * Create a <i>hashCode</i> and <i>equals</i> implementation for the given class and fields * * @deprecated Use {@link Refactory#createHashCodeAndEquals(JavaClass, Field<O>...)} instead, since this method * relies on the existence of the id field */ @Deprecated public static void createHashCodeAndEquals(final JavaClassSource clazz) { clazz.addMethod( "public boolean equals(Object that) { " + "if (this == that) { return true; } " + "if (that == null) { return false; } " + "if (getClass() != that.getClass()) { return false; } " + "if (id != null) { return id.equals(((" + clazz.getName() + ") that).id); } " + "return super.equals(that); " + "}") .addAnnotation(Override.class); clazz.addMethod( "public int hashCode() { " + "if (id != null) { return id.hashCode(); } " + "return super.hashCode(); }") .addAnnotation(Override.class); }
/** * Create a <i>hashCode</i> and <i>equals</i> implementation for the given class and fields * * @deprecated Use {@link Refactory#createHashCodeAndEquals(JavaClass, Field<O>...)} instead, since this method * relies on the existence of the id field */ @Deprecated public static void createHashCodeAndEquals(final JavaClassSource clazz) { clazz.addMethod( "public boolean equals(Object that) { " + "if (this == that) { return true; } " + "if (that == null) { return false; } " + "if (getClass() != that.getClass()) { return false; } " + "if (id != null) { return id.equals(((" + clazz.getName() + ") that).id); } " + "return super.equals(that); " + "}") .addAnnotation(Override.class); clazz.addMethod( "public int hashCode() { " + "if (id != null) { return id.hashCode(); } " + "return super.hashCode(); }") .addAnnotation(Override.class); }
/** * Takes care of field and the corresponding setter/getter removal. */ public void removeField(JavaClassSource javaClassSource, String fieldName, ClassTypeResolver classTypeResolver) throws Exception { logger.debug("Removing field: " + fieldName + ", from class: " + javaClassSource.getName()); FieldSource<JavaClassSource> field; GenerationTools genTools = new GenerationTools(); String methodName; field = javaClassSource.getField(fieldName); if (field != null) { //check if the class has a setter/getter for the given field. Class<?> fieldClass = classTypeResolver.resolveType(field.getType().getName()); methodName = genTools.toJavaGetter(fieldName, fieldClass.getName()); removeMethodByParamsClass(javaClassSource, methodName); methodName = genTools.toJavaSetter(fieldName); removeMethodByParamsClass(javaClassSource, methodName, fieldClass); //finally remove the field. javaClassSource.removeField(field); } else { logger.debug("Field field: " + fieldName + " was not found in class: " + javaClassSource.getName()); } }
private void createCRUDRepository(JavaClassSource entitySource, Project project) { // build interface declaration final String name = entitySource.getName(); final String idFieldType = entitySource.getFields().stream() .filter(field -> field.hasAnnotation(Id.class)) .findFirst() .orElseThrow(IllegalArgumentException::new) .getType() .getSimpleName(); final String repoInterfaceDeclaration = "public interface " + name + "Repository extends CrudRepository<" + name + "," + idFieldType + "> {}"; JavaInterfaceSource repoSource = Roaster.parse(JavaInterfaceSource.class, repoInterfaceDeclaration) .setPackage(entitySource.getPackage()); repoSource.addImport("org.springframework.data.repository.CrudRepository"); Roaster.format(repoSource.toString()); // Create Java Classes Greeting and GreetingProperties JavaSourceFacet facet = project.getFacet(JavaSourceFacet.class); facet.saveJavaSource(repoSource); }
private void writeMapPut(final JavaClassSource javaClass, final Property propDef) { final String name = "put" + propDef.getPropertyName(); if (!javaClass.hasMethodSignature(name)) { final StringBuilder javadoc = new StringBuilder(); javadoc .append("@return the pSourcePath\n"); String body = ""; javaClass.addImport("javafx.collections.FXCollections"); body = Templates.use(TemplateName.PropertyPutMap, propDef); final MethodSource<?> method = javaClass.addMethod() .setName(name) .setPublic() .setBody(body.toString()) .setReturnType(javaClass.getTypeVariables().isEmpty() ? javaClass.getName() : javaClass.getTypeVariables().get(0).getName()); method.getJavaDoc().setFullText(javadoc.toString()); } else { // javaClass.getMethod(propDef.getName()).setBody(javaClass.getMethod(propDef.getName()).getBody() // + body.toString()); } }
private void writeMapRemove(final JavaClassSource javaClass, final Property propDef) { final String name = "remove" + propDef.getPropertyName(); if (!javaClass.hasMethodSignature(name)) { final StringBuilder javadoc = new StringBuilder(); javadoc .append("@return the pSourcePath\n"); String body = ""; javaClass.addImport("javafx.collections.FXCollections"); body = Templates.use(TemplateName.PropertyRemoveMap, propDef); final MethodSource<?> method = javaClass.addMethod() .setName(name) .setPublic() .setBody(body.toString()) .setReturnType(javaClass.getTypeVariables().isEmpty() ? javaClass.getName() : javaClass.getTypeVariables().get(0).getName()); method.getJavaDoc().setFullText(javadoc.toString()); } else { // javaClass.getMethod(propDef.getName()).setBody(javaClass.getMethod(propDef.getName()).getBody() // + body.toString()); } }
private JavaClassSource getOrCreateSubresourceClass(ClassPlan plan, JavaClassSource javaClass) { JavaClassSource subresourceClass = plan.getSubresourceClass(); if (subresourceClass != null) { return subresourceClass; } subresourceClass = Roaster.parse( JavaClassSource.class, "class " + javaClass.getName() + "Resources" + " {}" ); subresourceClass.setPackage(plan.getPackageName()); subresourceClass.getJavaDoc().setText("Child mutators for " + javaClass.getName()); subresourceClass.setPublic(); subresourceClass.setStatic(true); javaClass.addField() .setPrivate() .setType(subresourceClass.getName()) .setName("subresources") .setLiteralInitializer("new " + subresourceClass.getName() + "();"); final MethodSource<JavaClassSource> subresourcesMethod = javaClass.addMethod() .setName("subresources") .setPublic(); subresourcesMethod.setReturnType(subresourceClass.getName()); subresourcesMethod.setBody("return this.subresources;"); javaClass.addImport("java.util.List"); javaClass.addImport(Subresource.class); plan.setSubresourceClass(subresourceClass); return subresourceClass; }
private JavaClassSource getOrCreateSubresourceClass(ClassPlan plan, JavaClassSource javaClass) { JavaClassSource subresourceClass = plan.getSubresourceClass(); if (subresourceClass != null) { return subresourceClass; } subresourceClass = Roaster.parse( JavaClassSource.class, "class " + javaClass.getName() + "Resources" + " {}" ); subresourceClass.setPackage(plan.getPackageName()); subresourceClass.getJavaDoc().setText("Child mutators for " + javaClass.getName()); subresourceClass.setPublic(); subresourceClass.setStatic(true); javaClass.addField() .setPrivate() .setType(subresourceClass.getName()) .setName("subresources") .setLiteralInitializer("new " + subresourceClass.getName() + "();"); final MethodSource<JavaClassSource> subresourcesMethod = javaClass.addMethod() .setName("subresources") .setPublic(); subresourcesMethod.setReturnType(subresourceClass.getName()); subresourcesMethod.setBody("return this.subresources;"); javaClass.addImport("java.util.List"); javaClass.addImport(Subresource.class); plan.setSubresourceClass(subresourceClass); return subresourceClass; }
private void writeListAdd(final JavaClassSource javaClass, final Property propDef) { final String name = "add" + propDef.getUpperName(); if (!javaClass.hasMethodSignature(name)) { final StringBuilder javadoc = new StringBuilder(); javadoc .append("@return the pSourcePath\n"); String body = ""; javaClass.addImport("javafx.collections.FXCollections"); javaClass.addImport("java.util.Arrays"); body = Templates.use(TemplateName.PropertyAddList, propDef); final MethodSource<?> method = javaClass.addMethod() .setName(name) .setPublic() .setBody(body.toString()) .setReturnType(javaClass.getTypeVariables().isEmpty() ? javaClass.getName() : javaClass.getTypeVariables().get(0).getName()); method.addParameter(propDef.subtype(), propDef.name()).setVarArgs(true); method.getJavaDoc().setFullText(javadoc.toString()); } else { // javaClass.getMethod(propDef.getName()).setBody(javaClass.getMethod(propDef.getName()).getBody() // + body.toString()); } }
private void addNextMethod(JavaClassSource command) { MethodSource<JavaClassSource> method = command.addMethod().setPublic() .setName("next") .setReturnType(NavigationResult.class) .setParameters("UINavigationContext context"); method.addThrows(Exception.class).addAnnotation(Override.class); try { final String bodyTemplate = loadTextResource( Boolean.TRUE.equals(requireProject.getValue()) ? "nextMethodBodyP.txt" : "nextMethodBody.txt"); method.setBody(String.format(bodyTemplate, command.getName(), script.getValue().getName())); } catch (IOException e) { method.setBody("// ERROR READING BODY TEMPLATE"); } }
private void writeListRemove(final JavaClassSource javaClass, final Property propDef) { final String name = "remove" + propDef.getUpperName(); if (!javaClass.hasMethodSignature(name)) { final StringBuilder javadoc = new StringBuilder(); javadoc .append("@return the pSourcePath\n"); String body = ""; javaClass.addImport("javafx.collections.FXCollections"); javaClass.addImport("java.util.Arrays"); body = Templates.use(TemplateName.PropertyRemoveList, propDef); final MethodSource<?> method = javaClass.addMethod() .setName(name) .setPublic() .setBody(body.toString()) .setReturnType(javaClass.getTypeVariables().isEmpty() ? javaClass.getName() : javaClass.getTypeVariables().get(0).getName()); method.addParameter(propDef.subtype(), propDef.name()).setVarArgs(true); method.getJavaDoc().setFullText(javadoc.toString()); } else { // javaClass.getMethod(propDef.getName()).setBody(javaClass.getMethod(propDef.getName()).getBody() // + body.toString()); } }
private void writeSetter(final JavaClassSource javaClass, final Property propDef) { if (propDef.needSetter()) { // if (!javaClass.hasMethodSignature(propDef.getName())) { // final StringBuilder javadoc = new StringBuilder(); // javadoc // .append("@return the sourcePath\n"); String body = ""; if (propDef.isList()) { body = Templates.use(TemplateName.Setter_List, propDef); } else if (propDef.isMap()) { body = Templates.use(TemplateName.Setter_Map, propDef); } else { body = Templates.use(TemplateName.Setter, propDef); } final MethodSource<?> method = javaClass.addMethod() .setName(propDef.name()) .setPublic() .setBody(body) // .setReturnTypeVoid(); .setReturnType(javaClass.getTypeVariables().isEmpty() ? javaClass.getName() : javaClass.getTypeVariables().get(0).getName()); method.addParameter(propDef.type().qualifiedName(), propDef.name()); // method.getJavaDoc().setFullText(javadoc.toString()); /* * } else { javaClass.getMethod(propDef.getName()).setBody(javaClass.getMethod( propDef.getName()).getBody() + body.toString()); } */ } }
String builderClassName = javaClass.getName() + "Builder"; JavaClassSource builderClass = Roaster.create(JavaClassSource.class) .setName(builderClassName) .setLiteralInitializer("new " + javaClass.getName() + "();"); builderClass.addMethod() .setPublic().setStatic(true).setName("create").setReturnType(builderClass)
String builderClassName = javaClass.getName() + "Builder"; JavaClassSource builderClass = Roaster.create(JavaClassSource.class) .setName(builderClassName) .setLiteralInitializer("new " + javaClass.getName() + "();"); builderClass.addMethod() .setPublic().setStatic(true).setName("create").setReturnType(builderClass)