docs: public void performActions() {
  		if (this.clientConfiguration.getActions().isEmpty()) {
  			this.clientConfiguration.printHelp();
  			return;
  		}
  
  		this.dumpProcessingController.setOfflineMode(this.clientConfiguration
  				.getOfflineMode());
  
  		if (this.clientConfiguration.getDumpDirectoryLocation() != null) {
  			try {
  				this.dumpProcessingController
  						.setDownloadDirectory(this.clientConfiguration
  								.getDumpDirectoryLocation());
  			} catch (IOException e) {
  				logger.error("Could not set download directory to "
  						+ this.clientConfiguration.getDumpDirectoryLocation()
  						+ ": " + e.getMessage());
  				logger.error("Aborting");
  				return;
  			}
  		}
  
  		dumpProcessingController.setLanguageFilter(this.clientConfiguration
  				.getFilterLanguages());
  		dumpProcessingController.setSiteLinkFilter(this.clientConfiguration
  				.getFilterSiteKeys());
  		dumpProcessingController.setPropertyFilter(this.clientConfiguration
  				.getFilterProperties());
  
  		MwDumpFile dumpFile = this.clientConfiguration.getLocalDumpFile();
  
  		if (dumpFile == null) {
  			dumpFile = dumpProcessingController
  					.getMostRecentDump(DumpContentType.JSON);
  		} else {
  			if (!dumpFile.isAvailable()) {
  				logger.error("Dump file not found or not readable: "
  						+ dumpFile.toString());
  				return;
  			}
  		}
  
  		this.clientConfiguration.setProjectName(dumpFile.getProjectName());
  		this.clientConfiguration.setDateStamp(dumpFile.getDateStamp());
  
  		boolean hasReadyProcessor = false;
  		for (DumpProcessingAction props : this.clientConfiguration.getActions()) {
  
  			if (!props.isReady()) {
  				continue;
  			}
  
  			if (props.needsSites()) {
  				prepareSites();
  				if (this.sites == null) { // sites unavailable
  					continue;
  				}
  				props.setSites(this.sites);
  			}
  			props.setDumpInformation(dumpFile.getProjectName(),
  					dumpFile.getDateStamp());
  			this.dumpProcessingController.registerEntityDocumentProcessor(
  					props, null, true);
  			hasReadyProcessor = true;
  		}
  
  		if (!hasReadyProcessor) {
  			return; // silent; non-ready action should report its problem
  					// directly
  		}
  
  		if (!this.clientConfiguration.isQuiet()) {
  			EntityTimerProcessor entityTimerProcessor = new EntityTimerProcessor(
  					0);
  			this.dumpProcessingController.registerEntityDocumentProcessor(
  					entityTimerProcessor, null, true);
  		}
  		openActions();
  		this.dumpProcessingController.processDump(dumpFile);
  		closeActions();
  
  		try {
  			writeReport();
  		} catch (IOException e) {
  			logger.error("Could not print report file: " + e.getMessage());
  		}
  
  	}