001 package org.cumulus4j.store.model; 002 003 import javax.jdo.annotations.Column; 004 import javax.jdo.annotations.IdGeneratorStrategy; 005 import javax.jdo.annotations.IdentityType; 006 import javax.jdo.annotations.NullValue; 007 import javax.jdo.annotations.PersistenceCapable; 008 import javax.jdo.annotations.Persistent; 009 import javax.jdo.annotations.PrimaryKey; 010 import javax.jdo.annotations.Queries; 011 import javax.jdo.annotations.Query; 012 import javax.jdo.annotations.Sequence; 013 import javax.jdo.annotations.SequenceStrategy; 014 import javax.jdo.annotations.Unique; 015 import javax.jdo.annotations.Version; 016 import javax.jdo.annotations.VersionStrategy; 017 018 @PersistenceCapable(identityType=IdentityType.APPLICATION, detachable="true") 019 @Version(strategy=VersionStrategy.VERSION_NUMBER) 020 @Sequence(name="KeyStoreRefSequence", datastoreSequence="KeyStoreRefSequence", initialValue=0, strategy=SequenceStrategy.CONTIGUOUS) 021 @Queries({ 022 @Query(name="getKeyStoreRefByKeyStoreID", value="SELECT UNIQUE WHERE this.keyStoreID == :keyStoreID") 023 }) 024 public class KeyStoreRef { 025 /** 026 * Reserved value for {@link #getKeyStoreRefID() keyStoreRefID} meaning that the object referencing this <code>keyStoreRefID</code> 027 * is not related to any key-store, at all, but global. 028 */ 029 public static final int GLOBAL_KEY_STORE_REF_ID = -1; 030 031 /** 032 * Internal constructor. This exists only for JDO and should not be used by application code! 033 */ 034 protected KeyStoreRef() { } 035 036 /** 037 * Create an instance of <code>DataEntry</code>. 038 * @param keyStoreID the <code>KeyStore</code>'s ID. 039 */ 040 public KeyStoreRef(String keyStoreID) { 041 this.keyStoreID = keyStoreID; 042 } 043 044 @PrimaryKey 045 @Persistent(valueStrategy=IdGeneratorStrategy.NATIVE, sequence="KeyStoreRefSequence") 046 private Long keyStoreRefID; 047 048 @Persistent(nullValue=NullValue.EXCEPTION) 049 @Unique(name="KeyStoreRef_keyStoreID") 050 @Column(length=255) 051 private String keyStoreID; 052 053 public int getKeyStoreRefID() { 054 Long result = keyStoreRefID; 055 if (result == null) 056 return -666; 057 058 if (result.longValue() > Integer.MAX_VALUE) 059 throw new IllegalStateException("keyStoreRefID > Integer.MAX_VALUE :: " + result + " > " + Integer.MAX_VALUE); 060 061 return result.intValue(); 062 } 063 064 public String getKeyStoreID() { 065 return keyStoreID; 066 } 067 068 @Override 069 public int hashCode() { 070 final int keyStoreRefID = getKeyStoreRefID(); 071 return keyStoreRefID; 072 } 073 074 @Override 075 public boolean equals(Object obj) { 076 if (this == obj) return true; 077 if (obj == null) return false; 078 if (getClass() != obj.getClass()) return false; 079 KeyStoreRef other = (KeyStoreRef) obj; 080 return this.getKeyStoreRefID() == -666 ? false : this.getKeyStoreRefID() == other.getKeyStoreRefID(); 081 } 082 }