public URI getStorageURI(URI manifestURI) throws StagingException {
		log.debug("getting storage URI for {}", manifestURI);
		URI result = null;
		List<StagingArea> possible = new ArrayList<StagingArea>();
		// look through the staging areas, see if id matches above
		for (StagingArea area : this.getAllAreas().values()) {
			if (area.isWithinManifestNamespace(manifestURI)) {
				possible.add(area);
			}
		}
		if (possible.size() == 0) {
			throw new StagingException(
					"No known staging areas match the supplied URI: "
							+ manifestURI);
		}
		// see if any matching areas are connected
		List<StagingArea> problems = new ArrayList<StagingArea>();
		for (StagingArea a : possible) {
			if (!a.isConnected()) {
				problems.add(a);
			}
		}
		possible.removeAll(problems);
		if (possible.size() == 0) {
			StringBuilder sb = new StringBuilder();
			sb.append(problems.remove(0).getName());
			for (StagingArea a : problems)
				sb.append(", ").append(a.getName());
			throw new StagingException(sb.append(
					" matched the supplied URI, but are not connected.")
					.toString());
		}
		// convert stagedURI to localURI
		result = possible.get(0).getStorageURI(manifestURI);
		log.debug("returning storage URI of {}", result);
		return result;
	}