@Before @Override public void beforeTest() throws Exception { super.beforeTest(); initializeJavaProject(); // setup validation queueInputLines("", ""); getShell().execute(VALIDATION_PLUGIN_NAME + " setup"); // create a class assertTrue(getProject().hasFacet(JavaSourceFacet.class)); final JavaSourceFacet javaSourceFacet = getProject().getFacet(JavaSourceFacet.class); assertNotNull(javaSourceFacet); final JavaClass fooClass = JavaParser.create(JavaClass.class) .setPackage(javaSourceFacet.getBasePackage()) .setName(CLASS_NAME); fooClass.addField("private String " + PROPERTY_NAME + ";"); fooClass.addMethod("public String " + PROPERTY_ACESSOR_NAME + "(){return foo;}"); JavaResource fooResource = javaSourceFacet.saveJavaSource(fooClass); assertNotNull(fooResource); // pick-up the created resource getShell().execute("pick-up " + fooResource.getFullyQualifiedName()); }
@Command(value = "new-page", help = "Create a new Graphene page element class") public void createTest( @Option( required = false, help = "the package in which to build this page class", description = "source package", type = PromptType.JAVA_PACKAGE, name = "package") final String packageName, @Option(required = true, name = "named", help = "the page class name") String name, @Option( required = false, name = "type", help = "Page Object or Page Fragment", defaultValue = "page") PageType type, final PipeOut out) throws Exception { if (PageType.page.equals(type) && !name.endsWith("Page")) { name = name + "Page"; } if (PageType.fragment.equals(type) && !name.endsWith("Fragment")) { name = name + "Fragment"; } final JavaSourceFacet java = project.getFacet(JavaSourceFacet.class); String pagePackage; if ((packageName != null) && !"".equals(packageName)) { pagePackage = packageName; } else if (getPackagePortionOfCurrentDirectory() != null) { pagePackage = getPackagePortionOfCurrentDirectory(); } else { pagePackage = shell.promptCommon( "In which package you'd like to create this Page, or enter for default", PromptType.JAVA_PACKAGE, java.getBasePackage() + ".pages"); } JavaClass javaClass = JavaParser.create(JavaClass.class).setPackage(pagePackage).setName(name).setPublic(); if (PageType.fragment.equals(type)) { Field<JavaClass> field = javaClass.addField(); field .setName("root") .setPrivate() .setType("org.openqa.selenium.WebElement") .addAnnotation("org.jboss.arquillian.graphene.spi.annotations.Root"); } JavaResource javaFileLocation = java.saveTestJavaSource(javaClass); shell.println("Created " + type + " [" + javaClass.getQualifiedName() + "]"); pickup.fire(new PickupResource(javaFileLocation)); }
@Command(value = "new-element", help = "Create a new WebElement in the current class") public void newElement( @Option(required = true, name = "named", help = "the element name") String name, @Option(required = true, name = "findby", help = "the locator name") FindByType findBy, @Option(required = true, name = "value", help = "the locator value") String value, @Option(required = false, name = "fragmentClass", help = "the Page Fragment class") Resource<?> fragmentClass, final PipeOut out) throws Exception { final JavaSourceFacet java = project.getFacet(JavaSourceFacet.class); JavaClass javaClass = getJavaClass(); if (javaClass.hasField(name)) { throw new IllegalStateException("Class already has a field named [" + name + "]"); } Field<JavaClass> field = javaClass.addField(); field.setName(name).setPrivate(); if (fragmentClass != null) { JavaClass javaFragment = JavaParser.parse(JavaClass.class, fragmentClass.getResourceInputStream()); if (javaFragment == null) { throw new IllegalStateException( "Class notfound in test resources [" + fragmentClass.getFullyQualifiedName() + "]"); } field.setType(javaFragment.getQualifiedName()); } else { field.setType("org.openqa.selenium.WebElement"); } Annotation<JavaClass> annotation = field.addAnnotation("org.jboss.arquillian.graphene.enricher.findby.FindBy"); annotation.setStringValue(findBy.name(), value); javaClass .addMethod() .setReturnType(field.getTypeInspector().toString()) .setName("get" + Strings.capitalize(name)) .setPublic() .setBody("return this." + name + ";"); java.saveTestJavaSource(javaClass); shell.println("Created element [" + field.getName() + "]"); }
@Override public Result execute(UIExecutionContext context) throws Exception { UIContext uiContext = context.getUIContext(); JavaResource resource = (JavaResource) uiContext.getInitialSelection().get(); String name = named.getValue(); String fieldName = conversationFieldName.getValue(); String beginName = beginMethodName.getValue(); String endName = endMethodName.getValue(); Boolean overwriteValue = overwrite.getValue(); UIOutput output = uiContext.getProvider().getOutput(); if (resource.exists()) { if (resource.getJavaSource().isClass()) { JavaClass javaClass = (JavaClass) resource.getJavaSource(); if (javaClass.hasField(fieldName) && !javaClass.getField(fieldName).isType(Conversation.class)) { if (overwriteValue) { javaClass.removeField(javaClass.getField(fieldName)); } else { return Results.fail("Field [" + fieldName + "] already exists."); } } if (javaClass.hasMethodSignature(beginName) && (javaClass.getMethod(beginName).getParameters().size() == 0)) { if (overwriteValue) { javaClass.removeMethod(javaClass.getMethod(beginName)); } else { return Results.fail("Method [" + beginName + "] exists."); } } if (javaClass.hasMethodSignature(endName) && (javaClass.getMethod(endName).getParameters().size() == 0)) { if (overwriteValue) { javaClass.removeMethod(javaClass.getMethod(endName)); } else { return Results.fail("Method [" + endName + "] exists."); } } javaClass .addField() .setPrivate() .setName(fieldName) .setType(Conversation.class) .addAnnotation(Inject.class); Method<JavaClass> beginMethod = javaClass.addMethod().setName(beginName).setReturnTypeVoid().setPublic(); if (Strings.isNullOrEmpty(name)) { beginMethod.setBody(fieldName + ".begin();"); } else { beginMethod.setBody(fieldName + ".begin(\"" + name + "\");"); } if (timeout.getValue() != null) { beginMethod.setBody( beginMethod.getBody() + "\n" + fieldName + ".setTimeout(" + timeout + ");"); } javaClass .addMethod() .setName(endName) .setReturnTypeVoid() .setPublic() .setBody(fieldName + ".end();"); if (javaClass.hasSyntaxErrors()) { output.err().println("Modified Java class contains syntax errors:"); for (SyntaxError error : javaClass.getSyntaxErrors()) { output.err().print(error.getDescription()); } } resource.setContents(javaClass); } else { return Results.fail( "Must operate on a Java Class file, not an [" + resource.getJavaSource().getSourceType() + "]"); } } return Results.success("Conversation block created"); }
@SuppressWarnings("unchecked") @DefaultCommand(help = "Create a JPA @Entity") public void newEntity( @Option(required = true, name = "named", description = "The @Entity name") final String entityName, @Option( required = false, name = "package", type = PromptType.JAVA_PACKAGE, description = "The package name") final String packageName) throws Throwable { final PersistenceFacet jpa = project.getFacet(PersistenceFacet.class); final JavaSourceFacet java = project.getFacet(JavaSourceFacet.class); String entityPackage; if ((packageName != null) && !"".equals(packageName)) { entityPackage = packageName; } else if (getPackagePortionOfCurrentDirectory() != null) { entityPackage = getPackagePortionOfCurrentDirectory(); } else { entityPackage = shell.promptCommon( "In which package you'd like to create this @Entity, or enter for default", PromptType.JAVA_PACKAGE, jpa.getEntityPackage()); } JavaClass javaClass = JavaParser.create(JavaClass.class) .setPackage(entityPackage) .setName(entityName) .setPublic() .addAnnotation(Entity.class) .getOrigin() .addInterface(Serializable.class); Field<JavaClass> id = javaClass.addField("private Long id = null;"); id.addAnnotation(Id.class); id.addAnnotation(GeneratedValue.class).setEnumValue("strategy", GenerationType.AUTO); id.addAnnotation(Column.class) .setStringValue("name", "id") .setLiteralValue("updatable", "false") .setLiteralValue("nullable", "false"); Field<JavaClass> version = javaClass.addField("private int version = 0;"); version.addAnnotation(Version.class); version.addAnnotation(Column.class).setStringValue("name", "version"); Refactory.createGetterAndSetter(javaClass, id); Refactory.createGetterAndSetter(javaClass, version); Refactory.createToStringFromFields(javaClass, id); createHashCodeAndEquals(javaClass); JavaResource javaFileLocation = java.saveJavaSource(javaClass); shell.println("Created @Entity [" + javaClass.getQualifiedName() + "]"); /** Pick up the generated resource. */ shell.execute("pick-up " + javaFileLocation.getFullyQualifiedName()); }