001 package org.cumulus4j.store.crypto;
002
003 import javax.jdo.PersistenceManager;
004
005 import org.cumulus4j.store.EncryptionCoordinateSetManager;
006 import org.cumulus4j.store.PersistenceManagerConnection;
007 import org.datanucleus.store.ExecutionContext;
008
009 /**
010 * Context for encryption and decryption.
011 * @author Marco หงุ่ยตระกูล-Schulze - marco at nightlabs dot de
012 */
013 public class CryptoContext
014 {
015 /**
016 * Create a new context.
017 * @param encryptionCoordinateSetManager the <code>EncryptionCoordinateSetManager</code> to be used in this context; must not be <code>null</code>.
018 * @param executionContext the <code>ExecutionContext</code> to be used in this context; must not be <code>null</code>.
019 * @param persistenceManagerConnection the <code>PersistenceManagerConnection</code> to be used in this context; must not be <code>null</code>.
020 */
021 public CryptoContext(EncryptionCoordinateSetManager encryptionCoordinateSetManager, ExecutionContext executionContext, PersistenceManagerConnection persistenceManagerConnection)
022 {
023 if (encryptionCoordinateSetManager == null)
024 throw new IllegalArgumentException("encryptionCoordinateSetManager == null");
025
026 if (executionContext == null)
027 throw new IllegalArgumentException("executionContext == null");
028
029 if (persistenceManagerConnection == null)
030 throw new IllegalArgumentException("persistenceManagerConnection == null");
031
032 this.encryptionCoordinateSetManager = encryptionCoordinateSetManager;
033 this.executionContext = executionContext;
034 this.persistenceManagerConnection = persistenceManagerConnection;
035 this.persistenceManagerForData = persistenceManagerConnection.getDataPM();
036 this.persistenceManagerForIndex = persistenceManagerConnection.getIndexPM();
037 }
038
039 private EncryptionCoordinateSetManager encryptionCoordinateSetManager;
040
041 /**
042 * Get the <code>EncryptionCoordinateSetManager</code> to be used in this context; never <code>null</code>.
043 * @return the <code>EncryptionCoordinateSetManager</code> to be used in this context; never <code>null</code>.
044 */
045 public EncryptionCoordinateSetManager getEncryptionCoordinateSetManager() {
046 return encryptionCoordinateSetManager;
047 }
048
049 private ExecutionContext executionContext;
050
051 /**
052 * Get the <code>ExecutionContext</code> to be used in this context; never <code>null</code>.
053 * @return the <code>ExecutionContext</code> to be used in this context; never <code>null</code>.
054 */
055 public ExecutionContext getExecutionContext() {
056 return executionContext;
057 }
058
059 private PersistenceManagerConnection persistenceManagerConnection;
060
061 /**
062 * Get the <code>PersistenceManagerConnection</code> to be used in this context; never <code>null</code>.
063 * @return the <code>PersistenceManagerConnection</code> to be used in this context; never <code>null</code>.
064 */
065 public PersistenceManagerConnection getPersistenceManagerConnection() {
066 return persistenceManagerConnection;
067 }
068
069 private PersistenceManager persistenceManagerForData;
070
071 /**
072 * Convenience method synonymous to {@link PersistenceManagerConnection#getDataPM()}.
073 * @return the PM used for the actual data.
074 */
075 public PersistenceManager getPersistenceManagerForData() {
076 return persistenceManagerForData;
077 }
078
079 private PersistenceManager persistenceManagerForIndex;
080
081 /**
082 * Convenience method synonymous to {@link PersistenceManagerConnection#getIndexPM()}.
083 * @return the PM used for index data. If there is no separate index-datastore, this
084 * is the same as {@link #getPersistenceManagerForData()}.
085 */
086 public PersistenceManager getPersistenceManagerForIndex() {
087 return persistenceManagerForIndex;
088 }
089 }