Persistence Service Utility Class

package com.jord.xsp.file;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Arrays;

import javax.faces.context.FacesContext;

import com.ibm.commons.util.StringUtil;
import com.ibm.xsp.application.ApplicationEx;
import com.ibm.xsp.component.UIFileuploadEx.UploadedFile;
import com.ibm.xsp.http.IUploadedFile;
import com.ibm.xsp.persistence.PersistedContent;
import com.ibm.xsp.persistence.PersistenceService;
import com.ibm.xsp.util.SessionUtil;
import com.ibm.xsp.util.SystemUtil;

import lotus.domino.NotesException;

public class PersistenceUtil {

	public static String getSessionId() {
		return SessionUtil.getSessionId(FacesContext.getCurrentInstance());
	}

	@SuppressWarnings("deprecation")
	public static PersistenceService getPersistenceService() {

		ApplicationEx ex = ApplicationEx.getInstance();
		return ex.getPersistenceService();

	}

	public static String getBasePersistenceFolder() {

		ApplicationEx ex = ApplicationEx.getInstance();

		String propDir = ex.getProperty("xsp.state.persistence.directory", null);
		if (StringUtil.isEmpty(propDir)) {
			File defaultDir = SystemUtil.DEFAULT_PERSISTENCEDIR;
			return defaultDir.getAbsolutePath();
		} else {
			return propDir;
		}

	}

	public static String getPersistenceSessionFolder() {

		ApplicationEx ex = ApplicationEx.getInstance();

		return getBasePersistenceFolder() + File.separator + ex.getApplicationId() + File.separator + getSessionId();

	}

	public static File createdPath(File file) {
		File dir = file;
		if (!file.isDirectory())
			dir = file.getParentFile();
		dir.mkdirs();
		return file;
	}

	public static File getAvailableFile(final File file) {

		if (file.exists()) {
			File testFile;
			int counter = 0;
			String extension = "";
			String fileName = file.getAbsolutePath();
			int dotIndex = fileName.lastIndexOf('.');
			if (dotIndex > 0) {
				extension = fileName.substring(dotIndex);
				fileName = fileName.substring(0, dotIndex);
			}
			while ((testFile = new File(fileName + "_" + counter + extension)).exists())
				counter++;

			return testFile;

		} else {
			return file;
		}

	}

	/**
	 * Returns a safe version of a given name Currently just prevents moving
	 * directories etc
	 *
	 * @return
	 */
	public static String safeFileName(String fileName) {
		return fileName.replace("/", "").replace("\\", "");
	}

	public static File persistFile(File file, String folderName, String fileName) throws IOException, NotesException {

		String sessionId = getSessionId();
		return persistFile(file, sessionId, folderName, fileName);

	}

	public static File persistFile(File file, String sessionId, String folderName, String fileName) throws IOException {

		PersistenceService ps = getPersistenceService();

		PersistedContent pd = ps.createPersistedContent(sessionId, folderName, fileName);

		FileInputStream fis = new FileInputStream(file);
		OutputStream fos = pd.getOutputStream();

		org.apache.commons.io.IOUtils.copy(fis, fos);

		fos.close();
		fis.close();

		return pd.getContentAsFile();

	}

	public static File persistInputStream(InputStream is, String folderName, String fileName)
			throws NotesException, IOException {
		String sessionId = getSessionId();
		return persistInputStream(is, sessionId, folderName, fileName);
	}

	public static File persistInputStream(InputStream is, String sessionId, String folderName, String fileName)
			throws IOException {

		PersistenceService ps = getPersistenceService();

		PersistedContent pd = ps.createPersistedContent(sessionId, folderName, fileName);

		OutputStream fos = pd.getOutputStream();

		org.apache.commons.io.IOUtils.copy(is, fos);

		fos.close();

		return pd.getContentAsFile();

	}

	public static PersistedContent createPersistedContent(String folderName, String fileName)
			throws IOException, NotesException {

		String sessionId = getSessionId();

		PersistenceService ps = getPersistenceService();

		PersistedContent pd = ps.createPersistedContent(sessionId, folderName, fileName);

		return pd;

	}

	public static PersistedContent[] getPersistedContents(String folderName) throws IOException {

		String sessionId = getSessionId();

		PersistenceService ps = getPersistenceService();

		PersistedContent[] pcs = ps.getPersistedContents(sessionId, folderName);

		return pcs;

	}

	public static PersistedContent getPersistedContent(String folderName, String fileName)
			throws IOException, NotesException {

		String sessionId = getSessionId();

		PersistenceService ps = getPersistenceService();

		PersistedContent pd = ps.getPersistedContent(sessionId, folderName, fileName);

		return pd;

	}

	public static File persistUploadedFile(UploadedFile upload, String folderName) throws IOException, NotesException {

		String sessionId = getSessionId();
		return persistUploadedFile(upload, sessionId, folderName);

	}

	public static File persistUploadedFile(UploadedFile upload, String sessionId, String folderName)
			throws IOException {

		File file = upload.getUploadedFile().getServerFile();
		String fileName = upload.getUploadedFile().getClientFileName();

		return persistFile(file, sessionId, folderName, fileName);

	}

	public static File persistUploadedFile(IUploadedFile upload, String sessionId, String folderName)
			throws IOException {

		File file = upload.getServerFile();
		String fileName = upload.getClientFileName();

		return persistFile(file, sessionId, folderName, fileName);

	}

	public static void deletePersistenceFolder(String folderName) throws IOException {

		String sessionId = getSessionId();

		String[] folders = getPersistenceService().getFolders(sessionId);

		if (!Arrays.asList(folders).contains(folderName)) {
			return;
		}

		getPersistenceService().deleteFolder(sessionId, folderName);

	}

}





This class is a collection of methods that can be useful when trying to work with the XPages Persistence Service.
For more information check out my blog post camerongregor.com 'Generating and Downloading Files Using XPages Persistence Service'

Java
Cameron Gregor
September 12, 2017 8:44 AM
Rating
2

All code submitted to OpenNTF XSnippets, whether submitted as a "Snippet" or in the body of a Comment, is provided under the Apache License Version 2.0. See Terms of Use for full details.



No comments yetLogin first to comment...