Search in sources :

Example 1 with AnnotationSource

use of org.jboss.forge.roaster.model.source.AnnotationSource in project camel by apache.

the class CamelJavaParserHelper method extractEndpointUriFromArgument.

private static void extractEndpointUriFromArgument(String node, JavaClassSource clazz, Block block, List<ParserResult> uris, Object arg, boolean strings, boolean fields) {
    if (strings) {
        String uri = getLiteralValue(clazz, block, (Expression) arg);
        if (!Strings.isBlank(uri)) {
            int position = ((Expression) arg).getStartPosition();
            // if the node is fromF or toF, then replace all %X with {{%X}} as we cannot parse that value
            if ("fromF".equals(node) || "toF".equals(node)) {
                uri = uri.replaceAll("\\%s", "\\{\\{\\%s\\}\\}");
                uri = uri.replaceAll("\\%d", "\\{\\{\\%d\\}\\}");
                uri = uri.replaceAll("\\%b", "\\{\\{\\%b\\}\\}");
            }
            uris.add(new ParserResult(node, position, uri));
            return;
        }
    }
    if (fields && arg instanceof SimpleName) {
        FieldSource field = getField(clazz, block, (SimpleName) arg);
        if (field != null) {
            // find the endpoint uri from the annotation
            AnnotationSource annotation = field.getAnnotation("org.apache.camel.cdi.Uri");
            if (annotation == null) {
                annotation = field.getAnnotation("org.apache.camel.EndpointInject");
            }
            if (annotation != null) {
                Expression exp = (Expression) annotation.getInternal();
                if (exp instanceof SingleMemberAnnotation) {
                    exp = ((SingleMemberAnnotation) exp).getValue();
                } else if (exp instanceof NormalAnnotation) {
                    List values = ((NormalAnnotation) exp).values();
                    for (Object value : values) {
                        MemberValuePair pair = (MemberValuePair) value;
                        if ("uri".equals(pair.getName().toString())) {
                            exp = pair.getValue();
                            break;
                        }
                    }
                }
                String uri = CamelJavaParserHelper.getLiteralValue(clazz, block, exp);
                if (!Strings.isBlank(uri)) {
                    int position = ((SimpleName) arg).getStartPosition();
                    uris.add(new ParserResult(node, position, uri));
                }
            } else {
                // the field may be initialized using variables, so we need to evaluate those expressions
                Object fi = field.getInternal();
                if (fi instanceof VariableDeclaration) {
                    Expression exp = ((VariableDeclaration) fi).getInitializer();
                    String uri = CamelJavaParserHelper.getLiteralValue(clazz, block, exp);
                    if (!Strings.isBlank(uri)) {
                        // we want the position of the field, and not in the route
                        int position = ((VariableDeclaration) fi).getStartPosition();
                        uris.add(new ParserResult(node, position, uri));
                    }
                }
            }
        }
    }
    // cannot parse it so add a failure
    uris.add(new ParserResult(node, -1, arg.toString(), false));
}
Also used : SingleMemberAnnotation(org.jboss.forge.roaster._shade.org.eclipse.jdt.core.dom.SingleMemberAnnotation) SimpleName(org.jboss.forge.roaster._shade.org.eclipse.jdt.core.dom.SimpleName) ParserResult(org.apache.camel.parser.ParserResult) MemberValuePair(org.jboss.forge.roaster._shade.org.eclipse.jdt.core.dom.MemberValuePair) Expression(org.jboss.forge.roaster._shade.org.eclipse.jdt.core.dom.Expression) InfixExpression(org.jboss.forge.roaster._shade.org.eclipse.jdt.core.dom.InfixExpression) ParenthesizedExpression(org.jboss.forge.roaster._shade.org.eclipse.jdt.core.dom.ParenthesizedExpression) AnnotationSource(org.jboss.forge.roaster.model.source.AnnotationSource) NormalAnnotation(org.jboss.forge.roaster._shade.org.eclipse.jdt.core.dom.NormalAnnotation) ArrayList(java.util.ArrayList) List(java.util.List) VariableDeclaration(org.jboss.forge.roaster._shade.org.eclipse.jdt.core.dom.VariableDeclaration) FieldSource(org.jboss.forge.roaster.model.source.FieldSource) StatementFieldSource(org.apache.camel.parser.roaster.StatementFieldSource)

Example 2 with AnnotationSource

use of org.jboss.forge.roaster.model.source.AnnotationSource in project camel by apache.

the class SpringBootAutoConfigurationMojo method createDataFormatAutoConfigurationSource.

private void createDataFormatAutoConfigurationSource(String packageName, DataFormatModel model, List<String> dataFormatAliases, boolean hasOptions, String overrideDataFormatName) throws MojoFailureException {
    final JavaClassSource javaClass = Roaster.create(JavaClassSource.class);
    int pos = model.getJavaType().lastIndexOf(".");
    String name = model.getJavaType().substring(pos + 1);
    name = name.replace("DataFormat", "DataFormatAutoConfiguration");
    javaClass.setPackage(packageName).setName(name);
    String doc = "Generated by camel-package-maven-plugin - do not edit this file!";
    javaClass.getJavaDoc().setFullText(doc);
    javaClass.addAnnotation(Configuration.class);
    javaClass.addAnnotation(ConditionalOnBean.class).setStringValue("type", "org.apache.camel.spring.boot.CamelAutoConfiguration");
    javaClass.addAnnotation(Conditional.class).setLiteralValue(name + ".Condition.class");
    javaClass.addAnnotation(AutoConfigureAfter.class).setStringValue("name", "org.apache.camel.spring.boot.CamelAutoConfiguration");
    String configurationName = name.replace("DataFormatAutoConfiguration", "DataFormatConfiguration");
    if (hasOptions) {
        AnnotationSource<JavaClassSource> ann = javaClass.addAnnotation(EnableConfigurationProperties.class);
        ann.setLiteralValue("value", configurationName + ".class");
        javaClass.addImport("java.util.HashMap");
        javaClass.addImport("java.util.Map");
        javaClass.addImport("org.apache.camel.util.IntrospectionSupport");
    }
    javaClass.addImport("org.apache.camel.CamelContextAware");
    javaClass.addImport(model.getJavaType());
    javaClass.addImport("org.apache.camel.CamelContext");
    javaClass.addImport("org.apache.camel.RuntimeCamelException");
    javaClass.addImport("org.apache.camel.spi.DataFormat");
    javaClass.addImport("org.apache.camel.spi.DataFormatFactory");
    String body = createDataFormatBody(model.getShortJavaType(), hasOptions);
    String methodName = "configure" + model.getShortJavaType() + "Factory";
    MethodSource<JavaClassSource> method = javaClass.addMethod().setName(methodName).setPublic().setBody(body).setReturnType("org.apache.camel.spi.DataFormatFactory");
    method.addParameter("CamelContext", "camelContext").setFinal(true);
    if (hasOptions) {
        method.addParameter(configurationName, "configuration").setFinal(true);
    }
    // Determine all the aliases
    // adding the '-dataformat' suffix to prevent collision with component names
    String[] springBeanAliases = dataFormatAliases.stream().map(alias -> alias + "-dataformat-factory").toArray(size -> new String[size]);
    method.addAnnotation(Bean.class).setStringArrayValue("name", springBeanAliases);
    method.addAnnotation(ConditionalOnClass.class).setLiteralValue("value", "CamelContext.class");
    method.addAnnotation(ConditionalOnMissingBean.class).setLiteralValue("value", model.getShortJavaType() + ".class");
    // Generate Condition
    javaClass.addNestedType(createConditionType(javaClass, "camel.dataformat", (overrideDataFormatName != null ? overrideDataFormatName : model.getName()).toLowerCase(Locale.US)));
    sortImports(javaClass);
    String fileName = packageName.replaceAll("\\.", "\\/") + "/" + name + ".java";
    writeSourceIfChanged(javaClass, fileName);
    writeAdditionalSpringMetaData("camel", "dataformat", (overrideDataFormatName != null ? overrideDataFormatName : model.getName()).toLowerCase(Locale.US));
}
Also used : NestedConfigurationProperty(org.springframework.boot.context.properties.NestedConfigurationProperty) Arrays(java.util.Arrays) AnnotationSource(org.jboss.forge.roaster.model.source.AnnotationSource) URL(java.net.URL) Type(org.jboss.forge.roaster.model.Type) ConditionMessage(org.springframework.boot.autoconfigure.condition.ConditionMessage) GsonBuilder(com.google.gson.GsonBuilder) UriParam(org.apache.camel.spi.UriParam) ConditionContext(org.springframework.context.annotation.ConditionContext) URLClassLoader(java.net.URLClassLoader) Matcher(java.util.regex.Matcher) Roaster(org.jboss.forge.roaster.Roaster) MavenProject(org.apache.maven.project.MavenProject) Locale(java.util.Locale) Gson(com.google.gson.Gson) Map(java.util.Map) EnableConfigurationProperties(org.springframework.boot.context.properties.EnableConfigurationProperties) MethodSource(org.jboss.forge.roaster.model.source.MethodSource) ConditionalOnMissingBean(org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean) Set(java.util.Set) Collectors(java.util.stream.Collectors) FileNotFoundException(java.io.FileNotFoundException) Configuration(org.springframework.context.annotation.Configuration) JSonSchemaHelper.getPropertyJavaType(org.apache.camel.maven.packaging.JSonSchemaHelper.getPropertyJavaType) List(java.util.List) RelaxedPropertyResolver(org.springframework.boot.bind.RelaxedPropertyResolver) Resource(org.apache.maven.model.Resource) Formatter(org.jboss.forge.roaster.model.util.Formatter) DataFormatOptionModel(org.apache.camel.maven.packaging.model.DataFormatOptionModel) JavaClassSource(org.jboss.forge.roaster.model.source.JavaClassSource) Modifier(java.lang.reflect.Modifier) Strings(org.jboss.forge.roaster.model.util.Strings) Lazy(org.springframework.context.annotation.Lazy) JSonSchemaHelper.getSafeValue(org.apache.camel.maven.packaging.JSonSchemaHelper.getSafeValue) Pattern(java.util.regex.Pattern) Conditional(org.springframework.context.annotation.Conditional) AbstractMojo(org.apache.maven.plugin.AbstractMojo) Import(org.jboss.forge.roaster.model.source.Import) LanguageOptionModel(org.apache.camel.maven.packaging.model.LanguageOptionModel) ConditionalOnClass(org.springframework.boot.autoconfigure.condition.ConditionalOnClass) UriPath(org.apache.camel.spi.UriPath) HashMap(java.util.HashMap) TreeSet(java.util.TreeSet) LanguageModel(org.apache.camel.maven.packaging.model.LanguageModel) Scope(org.springframework.context.annotation.Scope) ArrayList(java.util.ArrayList) AutoConfigureAfter(org.springframework.boot.autoconfigure.AutoConfigureAfter) HashSet(java.util.HashSet) JavaType(org.jboss.forge.roaster.model.JavaType) ComponentOptionModel(org.apache.camel.maven.packaging.model.ComponentOptionModel) ComponentModel(org.apache.camel.maven.packaging.model.ComponentModel) EndpointOptionModel(org.apache.camel.maven.packaging.model.EndpointOptionModel) LinkedList(java.util.LinkedList) PropertySource(org.jboss.forge.roaster.model.source.PropertySource) JSonSchemaHelper.getPropertyDefaultValue(org.apache.camel.maven.packaging.JSonSchemaHelper.getPropertyDefaultValue) ConditionalOnBean(org.springframework.boot.autoconfigure.condition.ConditionalOnBean) Iterator(java.util.Iterator) MalformedURLException(java.net.MalformedURLException) DeprecatedConfigurationProperty(org.springframework.boot.context.properties.DeprecatedConfigurationProperty) IOException(java.io.IOException) FileUtils(org.apache.commons.io.FileUtils) FileInputStream(java.io.FileInputStream) MojoExecutionException(org.apache.maven.plugin.MojoExecutionException) File(java.io.File) MojoFailureException(org.apache.maven.plugin.MojoFailureException) SpringBootCondition(org.springframework.boot.autoconfigure.condition.SpringBootCondition) ConditionOutcome(org.springframework.boot.autoconfigure.condition.ConditionOutcome) PackageHelper.loadText(org.apache.camel.maven.packaging.PackageHelper.loadText) JSonSchemaHelper.getPropertyType(org.apache.camel.maven.packaging.JSonSchemaHelper.getPropertyType) BufferedReader(java.io.BufferedReader) FileReader(java.io.FileReader) Bean(org.springframework.context.annotation.Bean) AnnotatedTypeMetadata(org.springframework.core.type.AnnotatedTypeMetadata) Collections(java.util.Collections) DataFormatModel(org.apache.camel.maven.packaging.model.DataFormatModel) InputStream(java.io.InputStream) ConditionalOnBean(org.springframework.boot.autoconfigure.condition.ConditionalOnBean) ConditionalOnMissingBean(org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean) ConditionalOnClass(org.springframework.boot.autoconfigure.condition.ConditionalOnClass) AutoConfigureAfter(org.springframework.boot.autoconfigure.AutoConfigureAfter) JavaClassSource(org.jboss.forge.roaster.model.source.JavaClassSource) Conditional(org.springframework.context.annotation.Conditional) ConditionalOnMissingBean(org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean) ConditionalOnBean(org.springframework.boot.autoconfigure.condition.ConditionalOnBean) Bean(org.springframework.context.annotation.Bean)

Example 3 with AnnotationSource

use of org.jboss.forge.roaster.model.source.AnnotationSource in project Entitas-Java by Rubentxu.

the class EntityIndexDataProvider method createCustomEntityIndexData.

ComponentData createCustomEntityIndexData(ComponentData data) {
    AnnotationSource annotation = data.getSource().getAnnotation(CustomEntityIndex.class);
    setEntityIndexType(data, data.getSource().getName());
    isCustom(data, true);
    setEntityIndexName(data, data.getSource().getCanonicalName());
    setContextNames(data, Arrays.asList(annotation.getStringValue()));
    setCustomMethods(data, data.getSource().getMethods().stream().filter(m -> !m.isConstructor()).collect(Collectors.toList()));
    return data;
}
Also used : AnnotationSource(org.jboss.forge.roaster.model.source.AnnotationSource)

Example 4 with AnnotationSource

use of org.jboss.forge.roaster.model.source.AnnotationSource in project kie-wb-common by kiegroup.

the class DataModelerServiceImpl method validateValuePair.

@Override
public List<ValidationMessage> validateValuePair(String annotationClassName, ElementType target, String valuePairName, String literalValue) {
    // Currently we only validate the syntax but additional checks may be added.
    List<ValidationMessage> validationMessages = new ArrayList<ValidationMessage>();
    JavaRoasterModelDriver modelDriver = new JavaRoasterModelDriver();
    Pair<AnnotationSource<JavaClassSource>, List<DriverError>> parseResult = modelDriver.parseAnnotationWithValuePair(annotationClassName, target, valuePairName, literalValue);
    if (parseResult.getK2() != null && parseResult.getK2().size() > 0) {
        ValidationMessage validationMessage;
        for (DriverError driverError : parseResult.getK2()) {
            validationMessage = new ValidationMessage();
            validationMessage.setText(driverError.getMessage());
            validationMessage.setColumn(driverError.getColumn());
            validationMessage.setLine(driverError.getLine());
            validationMessage.setLevel(Level.ERROR);
            validationMessages.add(validationMessage);
        }
    }
    return validationMessages;
}
Also used : ValidationMessage(org.guvnor.common.services.shared.validation.model.ValidationMessage) ArrayList(java.util.ArrayList) AnnotationSource(org.jboss.forge.roaster.model.source.AnnotationSource) List(java.util.List) ArrayList(java.util.ArrayList) JavaRoasterModelDriver(org.kie.workbench.common.services.datamodeller.driver.impl.JavaRoasterModelDriver) DriverError(org.kie.workbench.common.services.datamodeller.driver.model.DriverError)

Example 5 with AnnotationSource

use of org.jboss.forge.roaster.model.source.AnnotationSource in project kie-wb-common by kiegroup.

the class JavaRoasterModelDriver method resolveAnnotationSource.

public org.kie.workbench.common.services.datamodeller.driver.model.AnnotationSource resolveAnnotationSource(Annotation annotation) {
    org.kie.workbench.common.services.datamodeller.driver.model.AnnotationSource annotationSource = new org.kie.workbench.common.services.datamodeller.driver.model.AnnotationSource();
    // TODO this method can be optimized and likely migrated to Roaster. Should be reviewed when we evaluate
    // the removal of Velocity.
    GenerationTools generationTools = new GenerationTools();
    AnnotationDefinition annotationDefinition;
    StringBuilder annotationCode = new StringBuilder();
    annotationCode.append("@");
    annotationCode.append(annotation.getClassName());
    if ((annotationDefinition = annotation.getAnnotationDefinition()) != null) {
        if (!annotationDefinition.isMarker()) {
            annotationCode.append(generationTools.resolveAnnotationType(annotation));
        }
        if (annotationDefinition.getValuePairs() != null) {
            Object value;
            String valuePairCode;
            for (AnnotationValuePairDefinition valuePairDefinition : annotationDefinition.getValuePairs()) {
                if ((value = annotation.getValue(valuePairDefinition.getName())) != null) {
                    valuePairCode = generationTools.resolveMemberTypeExpression(valuePairDefinition, value);
                } else {
                    valuePairCode = null;
                }
                annotationSource.withValuePairSource(valuePairDefinition.getName(), valuePairCode);
            }
        }
    }
    annotationSource.withSource(annotationCode.toString());
    return annotationSource;
}
Also used : GenerationTools(org.kie.workbench.common.services.datamodeller.codegen.GenerationTools) AnnotationDefinition(org.kie.workbench.common.services.datamodeller.core.AnnotationDefinition) AnnotationValuePairDefinition(org.kie.workbench.common.services.datamodeller.core.AnnotationValuePairDefinition) AnnotationSource(org.jboss.forge.roaster.model.source.AnnotationSource) DataObject(org.kie.workbench.common.services.datamodeller.core.DataObject)

Aggregations

AnnotationSource (org.jboss.forge.roaster.model.source.AnnotationSource)17 ArrayList (java.util.ArrayList)11 List (java.util.List)8 Type (org.jboss.forge.roaster.model.Type)6 IOException (java.io.IOException)4 Arrays (java.util.Arrays)4 Collectors (java.util.stream.Collectors)4 JavaClassSource (org.jboss.forge.roaster.model.source.JavaClassSource)4 Gson (com.google.gson.Gson)3 GsonBuilder (com.google.gson.GsonBuilder)3 BufferedReader (java.io.BufferedReader)3 File (java.io.File)3 FileInputStream (java.io.FileInputStream)3 FileNotFoundException (java.io.FileNotFoundException)3 FileReader (java.io.FileReader)3 InputStream (java.io.InputStream)3 Modifier (java.lang.reflect.Modifier)3 MalformedURLException (java.net.MalformedURLException)3 URL (java.net.URL)3 URLClassLoader (java.net.URLClassLoader)3