public void removeDuplicateServiceVariables() { Set<String> duplicated = getDuplicateServiceVariables(); Map<V4<String, String, String, String>, List<V4<V2<Environment, Archive>, String, String, NodeBuilder>>> toRemove = configs. entrySet().stream(). map(v -> v.getValue(). search("services"). map(s -> s.getChildren().stream()). flatMap(n -> n).map(x -> x.search(true, "NVPairs").filter(n -> INSTANCE_VARIABLES.contains(n.getAttribute("name"))) .map(c -> c.search(true, "name").map(nn -> T.V(v.getKey(), nn.getParent().getParent().getXPath(), nn.getTextContent(), nn.getParent()))))). // search all name elements from NVPairs flatMap(n -> n). flatMap(n -> n). flatMap(n -> n). filter(v -> duplicated.contains(v.getC())). collect(Collectors.groupingBy(t -> (V4<String, String, String, String>)T.V(t.getA().getA().getValue(), t.getA().getB().getValue(), t.getB(), t.getC()))); toRemove. entrySet().stream(). forEach(v -> { v.getValue().stream().skip(1).forEach(n -> n.getD().getParent().removeChild(n.getD())); }); }
NodeBuilder config = fac.loadFromFile(v.getA()); NodeBuilder binding = v.getD().search(true, n -> "binding".equals(n.getName())).filter(n -> n.hasChild(ch -> "machine".equals(ch.getName()) && "hkvnode316.cz.tmo".equals(ch.getTextContent()))).findAny().get(); binding.searchFirstByName("machine").setTextContent("hkvnode310.cz.tmo"); binding.copy() ); fac.renderNode(config, v.getA()); final int index = i; if (!nvPairs1.get(i).equals(nvPairs2.get(i))) { System.out.println(v.getA() + " " + i + " " + nvPairs1.get(i).getFirstDiff(nvPairs2.get(i))); NodeBuilder config = fac.loadFromFile(v.getA()); NodeBuilder binding = config. binding.removeChild(nvPairs); binding.appendChild(nvPairs2.get(i)); fac.renderNode(config, v.getA()); System.out.println(v.getA()); exception.printStackTrace();
public static void main(String[] args) { ArgumentParser argParser = ArgumentParsers.newArgumentParser("EAR Version Updater", true, "-") .description("Updates version in ear files in given directory."); argParser.addArgument("-directory").type(String.class).required(true).help("Path to directory with ears"); argParser.addArgument("-version").type(String.class).required(true).help("Version that will be written in Tibco.xml"); Namespace res = argParser.parseArgsOrFail(args); String directory = res.get("directory"); String version = res.getString("version"); new FileSearcher().searchFiles(Paths.get(directory), "glob:**/*.ear", false). stream().parallel(). map(p -> T.V(p, new LoadZipFile().load(p))). map(v -> T.V(v.getA(), getVersion(v), v.getB())). filter(v -> v.getB().isPresent()). map(v -> T.V(v.getA(), new XmlBuilderFactory().parseDocument(new ByteArrayInputStream(v.getB().get().getB())), v.getB(), v.getC())). forEach(v -> { v.getB().search("version").forEach(vnode -> { System.out.println(v.getA() + " " + vnode.getTextContent() + " -> " + version); vnode.setTextContent(version); }); byte[] bytes = v.getB().toString().getBytes(); V3<String, byte[], ZipEntry> zipFileEntry = v.getC().get(); zipFileEntry.setB(bytes); new LoadZipFile().updateFile(v.getA(), v.getD()); }); }
public static <A, B, C, D, E> V5<A, B, C, D, E> copyAndAdd(V4<A, B, C, D> v, E e) { return new V5<A, B, C, D, E>(v.getA(), v.getB(), v.getC(), v.getD(), e); } public static class V1<A> {