private static void processPackages(FeaturePackDescription.Builder fpBuilder, Path packagesDir, String encoding) throws ProvisioningDescriptionException { assertDirectory(packagesDir); try (DirectoryStream<Path> stream = Files.newDirectoryStream(packagesDir)) { for(Path path : stream) { fpBuilder.addPackage(processPackage(path, encoding)); } } catch (IOException e) { failedToReadDirectory(packagesDir, e); } }
private static PackageSpec processPackage(Path pkgDir, String encoding) throws ProvisioningDescriptionException { assertDirectory(pkgDir); final Path pkgXml = pkgDir.resolve(Constants.PACKAGE_XML); if(!Files.exists(pkgXml)) { throw new ProvisioningDescriptionException(Errors.pathDoesNotExist(pkgXml)); } try (Reader in = Files.newBufferedReader(pkgXml, Charset.forName(encoding))) { return PackageXmlParser.getInstance().parse(in); } catch (IOException e) { throw new ProvisioningDescriptionException(Errors.openFile(pkgXml), e); } catch (XMLStreamException e) { throw new ProvisioningDescriptionException(Errors.parseXml(pkgXml), e); } }
public static FeaturePackDescription describeFeaturePack(Path fpDir, String encoding) throws ProvisioningDescriptionException { assertDirectory(fpDir); final Path fpXml = fpDir.resolve(Constants.FEATURE_PACK_XML); if(!Files.exists(fpXml)) { throw new ProvisioningDescriptionException(Errors.pathDoesNotExist(fpXml)); } final FeaturePackDescription.Builder layoutBuilder; try (Reader is = Files.newBufferedReader(fpXml, Charset.forName(encoding))) { final FeaturePackSpec.Builder specBuilder = FeaturePackSpec.builder(); XmlParsers.parse(is, specBuilder); layoutBuilder = FeaturePackDescription.builder(specBuilder); } catch (IOException e) { throw new ProvisioningDescriptionException(Errors.openFile(fpXml)); } catch (XMLStreamException e) { throw new ProvisioningDescriptionException(Errors.parseXml(fpXml), e); } final Path packagesDir = fpDir.resolve(Constants.PACKAGES); if(Files.exists(packagesDir)) { processPackages(layoutBuilder, packagesDir, encoding); } return layoutBuilder.build(); }