public boolean hasNext()

in src/java/org/apache/ivy/osgi/repo/ResolverManifestIterable.java [101:189]


        public boolean hasNext() {
            while (next == null) {
                if (organisation == null) {
                    if (indexOrganisation >= organisations.length) {
                        return false;
                    }
                    organisation = organisations[indexOrganisation++];
                    modules = resolver.listModules(organisation);
                    indexModule = 0;
                    module = null;
                }
                if (module == null) {
                    if (indexModule >= modules.length) {
                        organisation = null;
                        continue;
                    }
                    module = modules[indexModule++];
                    revisions = resolver.listRevisions(module);
                    indexRevision = 0;
                    revision = null;
                }
                if (revision == null) {
                    if (indexRevision >= revisions.length) {
                        module = null;
                        continue;
                    }
                    revision = revisions[indexRevision++];
                    mrid = ModuleRevisionId.newInstance(organisation.getOrganisation(),
                        module.getModule(), revision.getRevision());
                    DefaultDependencyDescriptor dd = new DefaultDependencyDescriptor(mrid, false);
                    ResolvedModuleRevision dependency;
                    try {
                        dependency = resolver.getDependency(dd, data);
                    } catch (ParseException e) {
                        Message.error("Error while resolving " + mrid + " : " + e.getMessage());
                        revision = null;
                        continue;
                    }
                    if (dependency == null) {
                        revision = null;
                        continue;
                    }
                    ModuleDescriptor md = dependency.getDescriptor();
                    mrid = md.getModuleRevisionId();
                    artifacts = md.getAllArtifacts();
                    indexArtifact = 0;
                    artifact = null;
                }
                if (artifact == null) {
                    if (indexArtifact >= artifacts.length) {
                        revision = null;
                        continue;
                    }
                    artifact = artifacts[indexArtifact++];
                }
                ResolvedResource resource = resolver.doFindArtifactRef(artifact, null);
                if (resource == null) {
                    artifact = null;
                    continue;
                }
                JarInputStream in;
                try {
                    in = new JarInputStream(resource.getResource().openStream());
                } catch (IOException e) {
                    Message.warn("Unreadable jar " + resource.getResource().getName() + " ("
                            + e.getMessage() + ")");
                    artifact = null;
                    continue;
                }
                Manifest manifest;
                try {
                    manifest = in.getManifest();
                } finally {
                    try {
                        in.close();
                    } catch (IOException e) {
                        // don't care
                    }
                }
                if (manifest == null) {
                    Message.debug("No manifest on " + artifact);
                } else {
                    URI uri = BundleInfoAdapter.buildIvyURI(artifact);
                    next = new ManifestAndLocation(manifest, uri, null);
                }
                artifact = null;
            }
            return true;
        }