setErrorMessage(null);
	public boolean computePageCompletion() {		boolean incompleteButNotAnError= false;		if (fJarPackage.isManifestGenerated() && fJarPackage.isManifestSaved()) {			if (fJarPackage.getManifestLocation().toString().length() == 0)					incompleteButNotAnError= true;			else {				IPath location= fJarPackage.getManifestLocation();				if (!location.toString().startsWith("/")) {					setErrorMessage("Manifest file path must be absolute (start with /)");					return false;				}							IResource resource= findResource(location);				if (resource != null && resource.getType() != IResource.FILE) {					setErrorMessage("The manifest file location must not be an existing container");					return false;				}				resource= findResource(location.removeLastSegments(1));				if (resource == null || resource.getType() == IResource.FILE) {					setErrorMessage("Container for manifest file does not exist");					return false;				}			}		}		if (!fJarPackage.isManifestGenerated() && !fJarPackage.doesManifestExist()) {			if (fJarPackage.getManifestLocation().toString().length() == 0)					incompleteButNotAnError= true;			else {							setErrorMessage("Invalid manifest file specified");				return false;			}		}		if (fJarPackage.isJarSealed()				&& !fJarPackage.getPackagesForSelectedResources().containsAll(Arrays.asList(fJarPackage.getPackagesToUnseal()))) {			setErrorMessage("Some of the unsealed packages are no longer within the selection");			return false;		}		if (!fJarPackage.isJarSealed()				&& !fJarPackage.getPackagesForSelectedResources().containsAll(Arrays.asList(fJarPackage.getPackagesToSeal()))) {			setErrorMessage("Some of the sealed packages are no longer within the selection");			return false;		}		if (incompleteButNotAnError) {			setErrorMessage(null);			return false;		}		return true;	}