private File getRepositoryFile(final URI uri, final AbstractProcessor processor) { if (uri.isOpaque()) { final String path = uri.getSchemeSpecificPart(); if (path.startsWith("/")) { final File repoRoot = processor.getFactory().getRepository().getRoot(); return new File(repoRoot, path.substring(1)); } else { final File productRepo = processor .getFactory() .getRepository() .getProductDirectory(processor.getDescriptor().getProductId()); return new File(productRepo, path); } } else { final String productId = uri.getHost() == null ? processor.getDescriptor().getProductId() : uri.getHost(); return new File( processor.getFactory().getRepository().getProductDirectory(productId), uri.getPath().substring(1)); } }