All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.camel.karaf.tooling.upgrade.WrapperHandler Maven / Gradle / Ivy

The newest version!
/**
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements. See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * 

* http://www.apache.org/licenses/LICENSE-2.0 *

* Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.camel.karaf.tooling.upgrade; import java.io.FileReader; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.commons.io.FileUtils; import org.apache.maven.model.Model; import org.apache.maven.model.io.xpp3.MavenXpp3Reader; import org.codehaus.plexus.util.xml.pull.XmlPullParserException; import static org.apache.camel.karaf.tooling.upgrade.Utils.replaceFileContent; public abstract class WrapperHandler { private static final Pattern MODULE_IN_PARENT_POM = Pattern.compile("(.*)"); protected final Path camelKarafComponentRoot; protected final Path camelComponentRoot; protected final String camelVersion; protected WrapperHandler(Path camelKarafComponentRoot, Path camelComponentRoot, String camelVersion) { this.camelKarafComponentRoot = camelKarafComponentRoot; this.camelComponentRoot = camelComponentRoot; this.camelVersion = camelVersion; } protected void createModuleIfAbsent(String module) throws IOException { Path path = camelKarafComponentRoot.resolve(module); if (Files.exists(path)) { return; } Files.createDirectory(path); } protected void removeModuleIfPresent(String module) throws IOException { Path path = camelKarafComponentRoot.resolve(module); if (Files.exists(path)) { FileUtils.deleteDirectory(path.toFile()); } } protected void removeModuleFromParentPom(String component, String path) throws IOException { replaceFileContent(camelKarafComponentRoot.resolve(path), pom -> getParentPomWithoutComponent(pom, component)); } protected static String getParentPomWithoutComponent(String pom, String component) { String pattern = "%s".formatted(component); int index = pom.indexOf(pattern); if (index == -1) { // Not in the parent pom return pom; } int next = pom.indexOf("", index + 1); StringBuilder result = new StringBuilder(); if (next == -1) { next = index + pattern.length(); String endTag = ""; int previous = pom.lastIndexOf(endTag, index) + endTag.length(); result.append(pom, 0, previous); result.append(pom, next, pom.length()); } else { result.append(pom, 0, index); result.append(pom, next, pom.length()); } return result.toString(); } protected void addModuleToParentPom(String component) throws IOException { replaceFileContent(camelKarafComponentRoot.resolve("pom.xml"), pom -> getParentPomWithComponent(pom, component)); } protected static String getParentPomWithComponent(String pom, String component) { Matcher matcher = MODULE_IN_PARENT_POM.matcher(pom); StringBuilder result = new StringBuilder(); int start = 0; boolean added = false; while (matcher.find(start)) { String module = matcher.group(1); if (module.equals(component)) { // Already in the parent pom return pom; } else if (module.equals("NA")) { result.append(pom, 0, matcher.start()); result.append("%s".formatted(component)); added = true; start = matcher.end(); break; } else if (module.compareTo(component) > 0) { result.append(pom, 0, matcher.start()); result.append("%s%n ".formatted(component)); added = true; start = matcher.start(); break; } start = matcher.end(); } if (!added) { result.append(pom, 0, start); result.append("%n %s".formatted(component)); } result.append(pom, start, pom.length()); return result.toString(); } protected String getComponentName(String originalComponentPath, String component) throws IOException { Path pom = camelComponentRoot.resolve(originalComponentPath).resolve("pom.xml"); String result = null; if (Files.exists(pom)) { result = getComponentNameFomPom(pom); } if (result == null) { result = getComponentNameFromId(component); } return result; } private static String getComponentNameFomPom(Path pom) throws IOException { try { MavenXpp3Reader reader = new MavenXpp3Reader(); Model model = reader.read(new FileReader(pom.toFile())); String name = model.getName(); int index = name.lastIndexOf("::"); if (index == -1) { return null; } return name.substring(index + 2).trim(); } catch (XmlPullParserException e) { throw new RuntimeException(e); } } protected static String getComponentNameFromId(String componentId) { StringBuilder result = new StringBuilder(); boolean first = true; for (String part : componentId.substring("camel-".length()).split("-")) { if (first) { first = false; } else { result.append(' '); } result.append(part.substring(0, 1).toUpperCase()).append(part.substring(1)); } return result.toString(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy