private static void parsePath( final XMLStreamReader reader, final boolean include, final MultiplePathFilterBuilder builder) throws XMLStreamException { String path = null; final Set<Attribute> required = EnumSet.of(Attribute.PATH); final int count = reader.getAttributeCount(); for (int i = 0; i < count; i++) { final Attribute attribute = Attribute.of(reader.getAttributeName(i)); required.remove(attribute); switch (attribute) { case PATH: path = reader.getAttributeValue(i); break; default: throw unexpectedContent(reader); } } if (!required.isEmpty()) { throw missingAttributes(reader.getLocation(), required); } builder.addFilter(PathFilters.match(path), include); // consume remainder of element parseNoContent(reader); }
@Override @Deprecated public Iterable<Dataset<E>> getPartitions() { Preconditions.checkState( descriptor.isPartitioned(), "Attempt to get partitions on a non-partitioned dataset (name:%s)", name); List<Dataset<E>> partitions = Lists.newArrayList(); FileStatus[] fileStatuses; try { fileStatuses = fileSystem.listStatus(directory, PathFilters.notHidden()); } catch (IOException e) { throw new DatasetException( "Unable to list partition directory for directory " + directory, e); } for (FileStatus stat : fileStatuses) { Path p = fileSystem.makeQualified(stat.getPath()); PartitionKey key = fromDirectoryName(p); PartitionStrategy subPartitionStrategy = Accessor.getDefault().getSubpartitionStrategy(partitionStrategy, 1); Builder builder = new FileSystemDataset.Builder() .name(name) .fileSystem(fileSystem) .descriptor( new DatasetDescriptor.Builder(descriptor) .location(p) .partitionStrategy(subPartitionStrategy) .build()) .partitionKey(key) .partitionListener(partitionListener); partitions.add(builder.<E>build()); } return partitions; }
private static void parseResourceRoot( final File root, final XMLStreamReader reader, final ModuleSpec.Builder specBuilder) throws XMLStreamException { final ModuleIdentifier identifier = specBuilder.getIdentifier(); String name = null; String path = null; final Set<Attribute> required = EnumSet.of(Attribute.PATH); final int count = reader.getAttributeCount(); for (int i = 0; i < count; i++) { final Attribute attribute = Attribute.of(reader.getAttributeName(i)); required.remove(attribute); switch (attribute) { case NAME: name = reader.getAttributeValue(i); break; case PATH: path = reader.getAttributeValue(i); break; default: throw unexpectedContent(reader); } } if (!required.isEmpty()) { throw missingAttributes(reader.getLocation(), required); } if (name == null) name = path; // todo add to spec final File file = new File(root, path); final ResourceLoader resourceLoader; final MultiplePathFilterBuilder builder = PathFilters.multiplePathFilterBuilder(true); while (reader.hasNext()) { switch (reader.nextTag()) { case XMLStreamConstants.END_ELEMENT: { final PathFilter exportFilter = builder.create(); if (file.isDirectory()) { resourceLoader = new FileResourceLoader(identifier, file, name, exportFilter); } else { try { resourceLoader = new JarFileResourceLoader(identifier, new JarFile(file), name, exportFilter); } catch (IOException e) { throw new XMLStreamException("Invalid JAR file specified", reader.getLocation(), e); } } specBuilder.addResourceRoot(resourceLoader); return; } case XMLStreamConstants.START_ELEMENT: { switch (Element.of(reader.getName())) { case EXPORTS: parseFilterList(reader, builder); break; default: throw unexpectedContent(reader); } break; } default: { throw unexpectedContent(reader); } } } }
private static void parseModuleDependency( final XMLStreamReader reader, final ModuleSpec.Builder specBuilder) throws XMLStreamException { String name = null; String slot = null; boolean export = false; boolean optional = false; final Set<Attribute> required = EnumSet.of(Attribute.NAME); final int count = reader.getAttributeCount(); for (int i = 0; i < count; i++) { final Attribute attribute = Attribute.of(reader.getAttributeName(i)); required.remove(attribute); switch (attribute) { case NAME: name = reader.getAttributeValue(i); break; case SLOT: slot = reader.getAttributeValue(i); break; case EXPORT: export = Boolean.parseBoolean(reader.getAttributeValue(i)); break; case OPTIONAL: optional = Boolean.parseBoolean(reader.getAttributeValue(i)); break; default: throw unexpectedContent(reader); } } if (!required.isEmpty()) { throw missingAttributes(reader.getLocation(), required); } final MultiplePathFilterBuilder importBuilder = PathFilters.multiplePathFilterBuilder(true); final MultiplePathFilterBuilder exportBuilder = PathFilters.multiplePathFilterBuilder(true); while (reader.hasNext()) { switch (reader.nextTag()) { case XMLStreamConstants.END_ELEMENT: { final PathFilter exportFilter = export ? exportBuilder.create() : PathFilters.rejectAll(); final PathFilter importFilter = importBuilder.create(); specBuilder.addDependency( DependencySpec.createModuleDependencySpec( importFilter, exportFilter, null, ModuleIdentifier.create(name, slot), optional)); return; } case XMLStreamConstants.START_ELEMENT: { switch (Element.of(reader.getName())) { case EXPORTS: parseFilterList(reader, exportBuilder); break; case IMPORTS: parseFilterList(reader, importBuilder); break; default: throw unexpectedContent(reader); } break; } default: { throw unexpectedContent(reader); } } } }