Search in sources :

Example 1 with Kind

use of org.apache.camel.catalog.Kind in project camel-quarkus by apache.

the class UpdateExtensionDocPageMojo method camelBits.

void camelBits(Charset charset, Configuration cfg, List<ArtifactModel<?>> models, Path multiModuleProjectDirectoryPath, CamelQuarkusExtension ext, Map<String, Object> model) {
    models.stream().filter(CqCatalog::isFirstScheme).forEach(m -> {
        final Kind kind = Kind.valueOf(m.getKind());
        final HashMap<String, Object> modelClone = new HashMap<>(model);
        modelClone.put("camelPartName", m.getName());
        modelClone.put("camelPartTitle", m.getTitle());
        modelClone.put("camelPartDescription", m.getDescription());
        final ArtifactModel<?> camelDocModel = CqCatalog.toCamelDocsModel(m);
        final Path docPagePath = multiModuleProjectDirectoryPath.resolve("docs/modules/ROOT/examples/" + CqUtils.kindPlural(kind) + "/" + camelDocModel.getName() + ".yml");
        evalTemplate(charset, docPagePath, cfg, modelClone, "extensions-camel-bits.yml", "#");
    });
}
Also used : Path(java.nio.file.Path) HashMap(java.util.HashMap) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) Kind(org.apache.camel.catalog.Kind)

Example 2 with Kind

use of org.apache.camel.catalog.Kind in project cq-maven-plugin by l2x6.

the class SyncExtensionListMojo method execute.

/**
 * Execute goal.
 *
 * @throws MojoExecutionException execution of the main class or one of the
 *                                threads it generated failed.
 * @throws MojoFailureException   something bad happened...
 */
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
    final Path localRepositoryPath = Paths.get(localRepository);
    final String camelVersion = findCamelVersion(localRepositoryPath);
    try {
        final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
        final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
        final List<String> SCOPES = Collections.singletonList(SheetsScopes.SPREADSHEETS);
        final Comparator<ArtifactModel<?>> comparator = CqCatalog.compareArtifactId().thenComparing(BaseModel.compareTitle());
        final Sheets service = new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT, JSON_FACTORY, SCOPES)).setApplicationName(APPLICATION_NAME).build();
        try (GavCqCatalog camelCatalog = GavCqCatalog.open(localRepositoryPath, Flavor.camel, camelVersion, repositories, repoSystem, repoSession);
            GavCqCatalog camelQuarkusCatalog = GavCqCatalog.open(localRepositoryPath, Flavor.camelQuarkus, camelQuarkusVersion, repositories, repoSystem, repoSession)) {
            Map<Kind, Map<String, NativeSupport>> nativeSupportsMap = new HashMap<>();
            CqCatalog.kinds().forEach(kind -> {
                Map<String, NativeSupport> nativeSupports = new HashMap<>();
                nativeSupportsMap.put(kind, nativeSupports);
                getLog().info("Updating " + CqCommonUtils.humanPlural(kind));
                final Set<String> allSchemes = new LinkedHashSet<>();
                final Map<String, ArtifactModel<?>> camelModels = new LinkedHashMap<>();
                camelCatalog.models(kind).filter(CqCatalog::isFirstScheme).sorted(comparator).forEach(m -> {
                    camelModels.put(m.getName(), m);
                    allSchemes.add(m.getName());
                });
                final Map<String, ArtifactModel<?>> cqModels = new LinkedHashMap<>();
                camelQuarkusCatalog.models(kind).filter(CqCatalog::isFirstScheme).sorted(comparator).forEach(m -> {
                    cqModels.put(m.getName(), m);
                    allSchemes.add(m.getName());
                });
                /* Go through extensions available in the spreadsheet and update them */
                final Sheet sheet = Sheet.read(service, googleSpreadsheetId, kind, getLog(), Column.artifactModelColumns());
                for (String scheme : allSchemes) {
                    sheet.update(scheme, camelModels.get(scheme), cqModels.get(scheme), nativeSupportsMap);
                }
                sheet.update(Comparator.comparing(Record::getArtifactIdBase).thenComparing(Record::getScheme));
            });
            {
                final Kind kind = Kind.eip;
                getLog().info("Updating " + CqCommonUtils.humanPlural(kind));
                final Set<String> allSchemes = new LinkedHashSet<>();
                final Map<String, EipModel> camelModels = new LinkedHashMap<>();
                camelCatalog.eips().sorted(BaseModel.compareTitle()).forEach(m -> {
                    camelModels.put(m.getName(), m);
                    allSchemes.add(m.getName());
                });
                final Map<String, EipModel> cqModels = new LinkedHashMap<>();
                // camelQuarkusCatalog.eips()
                // .sorted(BaseModel.compareTitle())
                // .forEach(m -> {
                // cqModels.put(m.getName(), m);
                // allSchemes.add(m.getName());
                // });
                Map<String, Set<String>> occurrences = findOccurrences(allSchemes, Paths.get("."), getLog());
                /* Go through extensions available in the spreadsheet and update them */
                final Sheet sheet = Sheet.read(service, googleSpreadsheetId, kind, getLog(), Column.eipColumns());
                for (String scheme : allSchemes) {
                    sheet.updateBase(scheme, camelModels.get(scheme), cqModels.get(scheme), occurrences.get(scheme), nativeSupportsMap);
                }
                sheet.update(Comparator.comparing(Record::getKind).thenComparing(Record::getScheme));
            }
        }
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}
Also used : LinkedHashSet(java.util.LinkedHashSet) Arrays(java.util.Arrays) Flavor(org.l2x6.cq.common.CqCatalog.Flavor) GoogleClientSecrets(com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets) Parameter(org.apache.maven.plugins.annotations.Parameter) MavenProject(org.apache.maven.project.MavenProject) Locale(java.util.Locale) Map(java.util.Map) Path(java.nio.file.Path) CqCommonUtils(org.l2x6.cq.common.CqCommonUtils) EnumMap(java.util.EnumMap) JacksonFactory(com.google.api.client.json.jackson2.JacksonFactory) FileDataStoreFactory(com.google.api.client.util.store.FileDataStoreFactory) LocalServerReceiver(com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver) Set(java.util.Set) GoogleNetHttpTransport(com.google.api.client.googleapis.javanet.GoogleNetHttpTransport) Reader(java.io.Reader) SheetsScopes(com.google.api.services.sheets.v4.SheetsScopes) Collectors(java.util.stream.Collectors) FileNotFoundException(java.io.FileNotFoundException) StandardCharsets(java.nio.charset.StandardCharsets) Objects(java.util.Objects) Sheets(com.google.api.services.sheets.v4.Sheets) List(java.util.List) Stream(java.util.stream.Stream) Entry(java.util.Map.Entry) CqCatalog(org.l2x6.cq.common.CqCatalog) Optional(java.util.Optional) GoogleAuthorizationCodeFlow(com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow) AbstractMojo(org.apache.maven.plugin.AbstractMojo) Model(org.apache.maven.model.Model) RepositorySystem(org.eclipse.aether.RepositorySystem) Component(org.apache.maven.plugins.annotations.Component) HashMap(java.util.HashMap) RepositorySystemSession(org.eclipse.aether.RepositorySystemSession) TreeSet(java.util.TreeSet) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) LinkedHashMap(java.util.LinkedHashMap) ValueRange(com.google.api.services.sheets.v4.model.ValueRange) Mojo(org.apache.maven.plugins.annotations.Mojo) Credential(com.google.api.client.auth.oauth2.Credential) ArtifactModel(org.apache.camel.tooling.model.ArtifactModel) LinkedHashSet(java.util.LinkedHashSet) GavCqCatalog(org.l2x6.cq.common.CqCatalog.GavCqCatalog) NetHttpTransport(com.google.api.client.http.javanet.NetHttpTransport) Files(java.nio.file.Files) Kind(org.apache.camel.catalog.Kind) IOException(java.io.IOException) FileInputStream(java.io.FileInputStream) BaseModel(org.apache.camel.tooling.model.BaseModel) MojoExecutionException(org.apache.maven.plugin.MojoExecutionException) Log(org.apache.maven.plugin.logging.Log) InputStreamReader(java.io.InputStreamReader) File(java.io.File) MojoFailureException(org.apache.maven.plugin.MojoFailureException) RemoteRepository(org.eclipse.aether.repository.RemoteRepository) Paths(java.nio.file.Paths) JsonFactory(com.google.api.client.json.JsonFactory) EipModel(org.apache.camel.tooling.model.EipModel) Comparator(java.util.Comparator) AuthorizationCodeInstalledApp(com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp) Collections(java.util.Collections) Record(org.l2x6.cq.maven.prod.SyncExtensionListMojo.Sheet.Record) GavCqCatalog(org.l2x6.cq.common.CqCatalog.GavCqCatalog) Set(java.util.Set) TreeSet(java.util.TreeSet) HashSet(java.util.HashSet) LinkedHashSet(java.util.LinkedHashSet) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) JsonFactory(com.google.api.client.json.JsonFactory) CqCatalog(org.l2x6.cq.common.CqCatalog) GavCqCatalog(org.l2x6.cq.common.CqCatalog.GavCqCatalog) LinkedHashMap(java.util.LinkedHashMap) GoogleNetHttpTransport(com.google.api.client.googleapis.javanet.GoogleNetHttpTransport) NetHttpTransport(com.google.api.client.http.javanet.NetHttpTransport) Kind(org.apache.camel.catalog.Kind) Record(org.l2x6.cq.maven.prod.SyncExtensionListMojo.Sheet.Record) Sheets(com.google.api.services.sheets.v4.Sheets) Path(java.nio.file.Path) FileNotFoundException(java.io.FileNotFoundException) IOException(java.io.IOException) MojoExecutionException(org.apache.maven.plugin.MojoExecutionException) MojoFailureException(org.apache.maven.plugin.MojoFailureException) ArtifactModel(org.apache.camel.tooling.model.ArtifactModel) Map(java.util.Map) EnumMap(java.util.EnumMap) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap)

Example 3 with Kind

use of org.apache.camel.catalog.Kind in project camel-quarkus by apache.

the class CamelQuarkusExtension method read.

public static CamelQuarkusExtension read(Path runtimePomXmlPath) {
    try (Reader runtimeReader = Files.newBufferedReader(runtimePomXmlPath, StandardCharsets.UTF_8)) {
        final MavenXpp3Reader rxppReader = new MavenXpp3Reader();
        final Model runtimePom = rxppReader.read(runtimeReader);
        final List<Dependency> deps = runtimePom.getDependencies();
        final String aid = runtimePom.getArtifactId();
        String camelComponentArtifactId = null;
        if (deps != null && !deps.isEmpty()) {
            Optional<Dependency> artifact = deps.stream().filter(dep -> "org.apache.camel".equals(dep.getGroupId()) && ("compile".equals(dep.getScope()) || dep.getScope() == null)).findFirst();
            if (artifact.isPresent()) {
                camelComponentArtifactId = CqCatalog.toCamelComponentArtifactIdBase(artifact.get().getArtifactId());
            }
        }
        final Properties props = runtimePom.getProperties() != null ? runtimePom.getProperties() : new Properties();
        String name = props.getProperty("title");
        if (name == null) {
            name = CqUtils.getNameBase(runtimePom.getName());
        }
        final String version = CqUtils.getVersion(runtimePom);
        final boolean nativeSupported = !runtimePomXmlPath.getParent().getParent().getParent().getFileName().toString().endsWith("-jvm");
        final String extensionStatus = props.getProperty("quarkus.metadata.status");
        final ExtensionStatus status = extensionStatus == null ? ExtensionStatus.of(nativeSupported) : ExtensionStatus.valueOf(extensionStatus);
        final boolean unlisted = !nativeSupported || Boolean.parseBoolean(props.getProperty("quarkus.metadata.unlisted", "false"));
        final boolean deprecated = Boolean.parseBoolean(props.getProperty("quarkus.metadata.deprecated", "false"));
        final String rawKind = (String) props.get(CAMEL_QUARKUS_KIND);
        final Kind kind = rawKind == null ? null : Kind.valueOf(rawKind);
        return new CamelQuarkusExtension(runtimePomXmlPath, camelComponentArtifactId, (String) props.get(CAMEL_QUARKUS_JVM_SINCE), (String) props.get(CAMEL_QUARKUS_NATIVE_SINCE), aid, name, runtimePom.getDescription(), props.getProperty("label"), version, nativeSupported, status, unlisted, deprecated, deps == null ? Collections.emptyList() : Collections.unmodifiableList(deps), kind, props.getProperty("cq.quarkus.aws.client.baseName"), props.getProperty("cq.quarkus.aws.client.fqClassName"));
    } catch (IOException | XmlPullParserException e) {
        throw new RuntimeException("Could not read " + runtimePomXmlPath, e);
    }
}
Also used : Properties(java.util.Properties) Files(java.nio.file.Files) Dependency(org.apache.maven.model.Dependency) Kind(org.apache.camel.catalog.Kind) XmlPullParserException(org.codehaus.plexus.util.xml.pull.XmlPullParserException) IOException(java.io.IOException) Reader(java.io.Reader) StandardCharsets(java.nio.charset.StandardCharsets) List(java.util.List) Optional(java.util.Optional) Path(java.nio.file.Path) Collections(java.util.Collections) MavenXpp3Reader(org.apache.maven.model.io.xpp3.MavenXpp3Reader) Model(org.apache.maven.model.Model) Reader(java.io.Reader) MavenXpp3Reader(org.apache.maven.model.io.xpp3.MavenXpp3Reader) MavenXpp3Reader(org.apache.maven.model.io.xpp3.MavenXpp3Reader) Dependency(org.apache.maven.model.Dependency) IOException(java.io.IOException) Properties(java.util.Properties) Kind(org.apache.camel.catalog.Kind) Model(org.apache.maven.model.Model) XmlPullParserException(org.codehaus.plexus.util.xml.pull.XmlPullParserException)

Example 4 with Kind

use of org.apache.camel.catalog.Kind in project camel-quarkus by apache.

the class PrepareCatalogQuarkusMojo method execute.

@Override
public void execute() throws MojoExecutionException, MojoFailureException {
    final Path catalogPath = catalogBaseDir.toPath().resolve(CqCatalog.CQ_CATALOG_DIR);
    final Map<String, Set<String>> schemesByKind = new LinkedHashMap<>();
    CqCatalog.kinds().forEach(kind -> schemesByKind.put(kind.name(), new TreeSet<>()));
    final CqCatalog catalog = CqCatalog.findFirstFromClassPath();
    if (extendClassPathCatalog) {
        catalog.store(catalogBaseDir.toPath());
        catalog.models().forEach(model -> schemesByKind.get(model.getKind()).add(model.getName()));
    }
    findExtensions().forEach(ext -> {
        final String artifactIdBase = ext.getArtifactIdBase();
        final Path schemaFile = ext.getExtensionDir().resolve("component/src/generated/resources/org/apache/camel/component/" + artifactIdBase + "/" + artifactIdBase + ".json").toAbsolutePath().normalize();
        if (Files.isRegularFile(schemaFile)) {
            try {
                final String schema = new String(Files.readAllBytes(schemaFile), StandardCharsets.UTF_8);
                final String capBase = artifactIdBase.substring(0, 1).toUpperCase() + artifactIdBase.substring(1);
                getLog().debug("Adding an extra component " + artifactIdBase + " " + "org.apache.camel.component." + artifactIdBase + "." + capBase + "Component " + schema);
                catalog.addComponent(artifactIdBase, "org.apache.camel.component." + artifactIdBase + "." + capBase + "Component", schema);
            } catch (IOException e) {
                throw new RuntimeException("Could not read " + schemaFile, e);
            }
        }
    });
    findExtensions().forEach(extPath -> {
        final String artifactIdBase = extPath.getArtifactIdBase();
        final List<ArtifactModel<?>> models = catalog.filterModels(artifactIdBase).collect(Collectors.toList());
        final Path runtimePomXmlPath = extPath.getExtensionDir().resolve("runtime/pom.xml").toAbsolutePath().normalize();
        final CamelQuarkusExtension ext = CamelQuarkusExtension.read(runtimePomXmlPath);
        final boolean nativeSupported = ext.isNativeSupported();
        if (models.isEmpty()) {
            final ArtifactModel<?> model;
            final Kind extKind = ext.getKind();
            if (extKind == Kind.component) {
                model = new ComponentModel();
            } else if (extKind == Kind.language) {
                model = new LanguageModel();
            } else if (extKind == Kind.dataformat) {
                model = new DataFormatModel();
            } else {
                model = new OtherModel();
            }
            final String name = ext.getRuntimeArtifactId().replace("camel-quarkus-", "");
            model.setName(name);
            final String title = ext.getName().orElseThrow(() -> new RuntimeException("name is missing in " + ext.getRuntimePomXmlPath()));
            model.setTitle(title);
            model.setDescription(ext.getDescription().orElseThrow(() -> new RuntimeException("description is missing in " + ext.getRuntimePomXmlPath())));
            model.setDeprecated(CqUtils.isDeprecated(title, models, ext.isDeprecated()));
            model.setLabel(ext.getLabel().orElse("quarkus"));
            update(model, ext, nativeSupported);
            CqCatalog.serialize(catalogPath, model);
            schemesByKind.get(model.getKind()).add(model.getName());
        } else {
            for (ArtifactModel<?> model : models) {
                update(model, ext, nativeSupported);
                CqCatalog.serialize(catalogPath, model);
                schemesByKind.get(model.getKind()).add(model.getName());
            }
        }
    });
    CqCatalog.kinds().forEach(kind -> {
        final Path newCatalog = catalogPath.resolve(kind.name() + "s.properties");
        try {
            Files.createDirectories(newCatalog.getParent());
            Files.write(newCatalog, schemesByKind.get(kind.name()).stream().collect(Collectors.joining("\n")).getBytes(StandardCharsets.UTF_8));
        } catch (IOException e) {
            throw new RuntimeException("Could not write to " + newCatalog);
        }
    });
}
Also used : Path(java.nio.file.Path) Set(java.util.Set) TreeSet(java.util.TreeSet) IOException(java.io.IOException) OtherModel(org.apache.camel.tooling.model.OtherModel) LinkedHashMap(java.util.LinkedHashMap) DataFormatModel(org.apache.camel.tooling.model.DataFormatModel) ArtifactModel(org.apache.camel.tooling.model.ArtifactModel) TreeSet(java.util.TreeSet) Kind(org.apache.camel.catalog.Kind) ComponentModel(org.apache.camel.tooling.model.ComponentModel) LanguageModel(org.apache.camel.tooling.model.LanguageModel)

Aggregations

Path (java.nio.file.Path)4 Kind (org.apache.camel.catalog.Kind)4 IOException (java.io.IOException)3 Reader (java.io.Reader)2 StandardCharsets (java.nio.charset.StandardCharsets)2 Files (java.nio.file.Files)2 Collections (java.util.Collections)2 HashMap (java.util.HashMap)2 LinkedHashMap (java.util.LinkedHashMap)2 List (java.util.List)2 Optional (java.util.Optional)2 Set (java.util.Set)2 Credential (com.google.api.client.auth.oauth2.Credential)1 AuthorizationCodeInstalledApp (com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp)1 LocalServerReceiver (com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver)1 GoogleAuthorizationCodeFlow (com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow)1 GoogleClientSecrets (com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets)1 GoogleNetHttpTransport (com.google.api.client.googleapis.javanet.GoogleNetHttpTransport)1 NetHttpTransport (com.google.api.client.http.javanet.NetHttpTransport)1 JsonFactory (com.google.api.client.json.JsonFactory)1