klass.model.meta.domain.ProjectionProjectionReferenceFinder Maven / Gradle / Ivy
The newest version!
package klass.model.meta.domain;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.util.*;
import java.io.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.gs.fw.common.mithra.*;
import com.gs.fw.common.mithra.attribute.*;
import com.gs.fw.common.mithra.util.*;
import com.gs.fw.common.mithra.notification.*;
import com.gs.fw.common.mithra.notification.listener.*;
import com.gs.fw.common.mithra.list.cursor.Cursor;
import com.gs.fw.common.mithra.bulkloader.*;
import com.gs.fw.common.mithra.*;
import com.gs.fw.common.mithra.attribute.*;
import com.gs.fw.common.mithra.attribute.calculator.procedure.ObjectProcedure;
import com.gs.fw.common.mithra.behavior.txparticipation.*;
import com.gs.fw.common.mithra.cache.Cache;
import com.gs.fw.common.mithra.cache.bean.*;
import com.gs.fw.common.mithra.extractor.*;
import com.gs.fw.common.mithra.finder.*;
import com.gs.fw.common.mithra.finder.booleanop.*;
import com.gs.fw.common.mithra.finder.integer.*;
import com.gs.fw.common.mithra.finder.longop.*;
import com.gs.fw.common.mithra.finder.orderby.OrderBy;
import com.gs.fw.common.mithra.finder.string.*;
import com.gs.fw.common.mithra.extractor.NormalAndListValueSelector;
import com.gs.fw.common.mithra.list.NulledRelation;
import com.gs.fw.common.mithra.querycache.CachedQuery;
import com.gs.fw.common.mithra.querycache.QueryCache;
import com.gs.fw.common.mithra.portal.*;
import com.gs.fw.common.mithra.remote.*;
import com.gs.fw.common.mithra.transaction.MithraObjectPersister;
import com.gs.fw.common.mithra.util.TimestampPool;
import org.eclipse.collections.impl.map.mutable.UnifiedMap;
import java.io.Serializable;
/**
* This file was automatically generated using Mithra 18.0.0. Please do not modify it.
* Add custom logic to its subclass instead.
*/
public class ProjectionProjectionReferenceFinder
{
private static final String IMPL_CLASS_NAME_WITH_SLASHES = "klass/model/meta/domain/ProjectionProjectionReference";
private static final String BUSINESS_CLASS_NAME_WITH_DOTS = "klass.model.meta.domain.ProjectionProjectionReference";
private static final FinderMethodMap finderMethodMap;
private static boolean isFullCache;
private static boolean isOffHeap;
private static volatile MithraObjectPortal objectPortal = new UninitializedPortal("klass.model.meta.domain.ProjectionProjectionReference");
private static final ProjectionProjectionReferenceSingleFinder finder = new ProjectionProjectionReferenceSingleFinder();
private static ConstantStringSet[] constantStringSets = new ConstantStringSet[0];
private static ConstantIntSet[] constantIntSets = new ConstantIntSet[0];
private static ConstantShortSet[] constantShortSets = new ConstantShortSet[0];
static
{
finderMethodMap = new FinderMethodMap(ProjectionProjectionReferenceFinder.ProjectionProjectionReferenceRelatedFinder.class);
finderMethodMap.addNormalAttributeName("id");
finderMethodMap.addNormalAttributeName("projectionName");
finderMethodMap.addRelationshipName("projection");
finderMethodMap.addRelationshipName("projectionWithAssociationEndSuperClass");
}
public static Attribute[] allPersistentAttributes()
{
return finder.getPersistentAttributes();
}
public static List allRelatedFinders()
{
return finder.getRelationshipFinders();
}
public static List allDependentRelatedFinders()
{
return finder.getDependentRelationshipFinders();
}
public static ConstantStringSet zGetConstantStringSet(int index)
{
return constantStringSets[index];
}
public static ConstantIntSet zGetConstantIntSet(int index)
{
return constantIntSets[index];
}
public static ConstantShortSet zGetConstantShortSet(int index)
{
return constantShortSets[index];
}
public static Mapper zGetConstantJoin(int index)
{
return getConstantJoinPool()[index];
}
private static Mapper[] constantJoinPool;
private static Mapper[] getConstantJoinPool()
{
if (constantJoinPool == null)
{
Mapper[] result = new Mapper[2];
result[0] = ProjectionProjectionReferenceFinder.projectionName().constructEqualityMapper(NamedProjectionFinder.name());
result[1] = NamedProjectionFinder.name().constructEqualityMapper(ProjectionProjectionReferenceFinder.projectionName());
constantJoinPool = result;
}
return constantJoinPool;
}
public static SourceAttributeType getSourceAttributeType()
{
return null;
}
public static ProjectionProjectionReference findOne(com.gs.fw.finder.Operation operation)
{
return findOne(operation, false);
}
public static ProjectionProjectionReference findOneBypassCache(com.gs.fw.finder.Operation operation)
{
return findOne(operation, true);
}
public static ProjectionProjectionReferenceList findMany(com.gs.fw.finder.Operation operation)
{
return (ProjectionProjectionReferenceList) finder.findMany(operation);
}
public static ProjectionProjectionReferenceList findManyBypassCache(com.gs.fw.finder.Operation operation)
{
return (ProjectionProjectionReferenceList) finder.findManyBypassCache(operation);
}
private static ProjectionProjectionReference findOne(com.gs.fw.finder.Operation operation, boolean bypassCache)
{
List found = getMithraObjectPortal().find((Operation) operation, bypassCache);
return (ProjectionProjectionReference) FinderUtils.findOne(found);
}
public static ProjectionProjectionReference findByPrimaryKey(long id)
{
return finder.findByPrimaryKey(id);
}
private static final RelationshipHashStrategy forPrimaryKey = new PrimaryKeyRhs();
private static final class PrimaryKeyRhs implements RelationshipHashStrategy
{
public boolean equalsForRelationship(Object _srcObject, Object _srcData, Object _targetData, Timestamp _asOfDate0, Timestamp _asOfDate1)
{
I3O3L3 _bean = (I3O3L3) _srcData;
ProjectionProjectionReferenceData _castedTargetData = (ProjectionProjectionReferenceData) _targetData;
if (_bean.getL1AsLong() == _castedTargetData.getId())
{
return true;
}
return false;
}
public int computeHashCodeFromRelated(Object _srcObject, Object _srcData)
{
I3O3L3 _bean = (I3O3L3) _srcData;
return HashUtil.hash(_bean.getL1AsLong());
}
public int computeOffHeapHashCodeFromRelated(Object _srcObject, Object _srcData)
{
I3O3L3 _bean = (I3O3L3) _srcData;
return HashUtil.hash(_bean.getL1AsLong());
}
}
public static ProjectionProjectionReference zFindOneForRelationship(Operation operation)
{
List found = getMithraObjectPortal().findAsCachedQuery(operation, null, false, true, 0).getResult();
return (ProjectionProjectionReference) FinderUtils.findOne(found);
}
public static MithraObjectPortal getMithraObjectPortal()
{
return objectPortal.getInitializedPortal();
}
public static void clearQueryCache()
{
objectPortal.clearQueryCache();
}
public static void reloadCache()
{
objectPortal.reloadCache();
}
public static class ProjectionProjectionReferenceRelatedFinder extends AbstractRelatedFinder
{
private List relationshipFinders;
private List dependentRelationshipFinders;
private LongAttribute id;
private StringAttribute projectionName;
private ProjectionProjectionReferenceProjectionFinderSubclass projection;
private ProjectionProjectionReferenceProjectionWithAssociationEndSuperClassFinderSubclass projectionWithAssociationEndSuperClass;
public ProjectionProjectionReferenceRelatedFinder()
{
super();
}
public ProjectionProjectionReferenceRelatedFinder(Mapper mapper)
{
super(mapper);
}
public String getFinderClassName()
{
return "klass.model.meta.domain.ProjectionProjectionReferenceFinder";
}
public RelatedFinder getRelationshipFinderByName(String relationshipName)
{
return ProjectionProjectionReferenceFinder.finderMethodMap.getRelationshipFinderByName(relationshipName, this);
}
public Attribute getAttributeByName(String attributeName)
{
return ProjectionProjectionReferenceFinder.finderMethodMap.getAttributeByName(attributeName, this);
}
public com.gs.fw.common.mithra.extractor.Function getAttributeOrRelationshipSelector(String attributeName)
{
return ProjectionProjectionReferenceFinder.finderMethodMap.getAttributeOrRelationshipSelectorFunction(attributeName, this);
}
public Attribute[] getPersistentAttributes()
{
Attribute[] attributes = new Attribute[2];
attributes[0] = this.id();
attributes[1] = this.projectionName();
return attributes;
}
public List getRelationshipFinders()
{
if (relationshipFinders == null)
{
List relatedFinders = new ArrayList(2);
relatedFinders.add(this.projection());
relatedFinders.add(this.projectionWithAssociationEndSuperClass());
relationshipFinders = Collections.unmodifiableList(relatedFinders);
}
return relationshipFinders;
}
public List getDependentRelationshipFinders()
{
if (dependentRelationshipFinders == null)
{
List dependentRelatedFinders = new ArrayList(0);
dependentRelationshipFinders = Collections.unmodifiableList(dependentRelatedFinders);
}
return dependentRelationshipFinders;
}
public ProjectionProjectionReference findOne(com.gs.fw.finder.Operation operation)
{
return ProjectionProjectionReferenceFinder.findOne(operation, false);
}
public ProjectionProjectionReference findOneBypassCache(com.gs.fw.finder.Operation operation)
{
return ProjectionProjectionReferenceFinder.findOne(operation, true);
}
public MithraList extends ProjectionProjectionReference> findMany(com.gs.fw.finder.Operation operation)
{
return new ProjectionProjectionReferenceList((Operation) operation);
}
public MithraList extends ProjectionProjectionReference> findManyBypassCache(com.gs.fw.finder.Operation operation)
{
ProjectionProjectionReferenceList result = (ProjectionProjectionReferenceList) this.findMany(operation);
result.setBypassCache(true);
return result;
}
public MithraList extends ProjectionProjectionReference> constructEmptyList()
{
return new ProjectionProjectionReferenceList();
}
public int getSerialVersionId()
{
return 1748522415;
}
public boolean isPure()
{
return false;
}
public boolean isTemporary()
{
return false;
}
public int getHierarchyDepth()
{
return 0;
}
public LongAttribute id()
{
LongAttribute result = this.id;
if (result == null)
{
result = mapper == null ? SingleColumnLongAttribute.generate("\"ID\"","","id",BUSINESS_CLASS_NAME_WITH_DOTS,IMPL_CLASS_NAME_WITH_SLASHES,false,false,this,null,true,false,false,-1,-1,-1,false, false) :
new MappedLongAttribute(ProjectionProjectionReferenceFinder.id(), this.mapper, this.zGetValueSelector());
result.zSetOwningRelationship("projectionWithAssociationEndSuperClass");
result.zSetOwningReverseRelationship("klass.model.meta.domain", "ProjectionWithAssociationEnd", "projectionProjectionReferenceSubClass");
this.id = result;
}
return result;
}
public StringAttribute projectionName()
{
StringAttribute result = this.projectionName;
if (result == null)
{
result = mapper == null ? SingleColumnStringAttribute.generate("\"PROJECTION_NAME\"","","projectionName",BUSINESS_CLASS_NAME_WITH_DOTS,IMPL_CLASS_NAME_WITH_SLASHES,false,false,this,null,true,false,-1,-1,-1,256,false, false) :
new MappedStringAttribute(ProjectionProjectionReferenceFinder.projectionName(), this.mapper, this.zGetValueSelector());
result.zSetOwningRelationship("projection");
result.zSetOwningReverseRelationship("klass.model.meta.domain", "NamedProjection", "projectionProjectionReferences");
this.projectionName = result;
}
return result;
}
public NamedProjectionFinder.NamedProjectionSingleFinderForRelatedClasses projection()
{
ProjectionProjectionReferenceProjectionFinderSubclass result = this.projection;
if (result == null)
{
Mapper newMapper = combineWithMapperIfExists(ProjectionProjectionReferenceFinder.zGetProjectionProjectionReferenceProjectionReverseMapper());
newMapper.setToMany(false);
result = new ProjectionProjectionReferenceProjectionFinderSubclass(newMapper , this.zGetValueSelector() );
this.projection = result;
}
return result;
}
public ProjectionWithAssociationEndFinder.ProjectionWithAssociationEndSingleFinderForRelatedClasses projectionWithAssociationEndSuperClass()
{
ProjectionProjectionReferenceProjectionWithAssociationEndSuperClassFinderSubclass result = this.projectionWithAssociationEndSuperClass;
if (result == null)
{
Mapper newMapper = combineWithMapperIfExists(ProjectionWithAssociationEndFinder.zGetProjectionWithAssociationEndProjectionProjectionReferenceSubClassMapper());
newMapper.setToMany(false);
result = new ProjectionProjectionReferenceProjectionWithAssociationEndSuperClassFinderSubclass(newMapper , this.zGetValueSelector() );
this.projectionWithAssociationEndSuperClass = result;
}
return result;
}
public Attribute getSourceAttribute()
{
return null;
}
private Mapper combineWithMapperIfExists(Mapper newMapper)
{
if (this.mapper != null)
{
return new LinkedMapper(this.mapper, newMapper);
}
return newMapper;
}
public Attribute[] getPrimaryKeyAttributes()
{
return ProjectionProjectionReferenceFinder.getPrimaryKeyAttributes();
}
public VersionAttribute getVersionAttribute()
{
return null;
}
public MithraObjectPortal getMithraObjectPortal()
{
return ProjectionProjectionReferenceFinder.getMithraObjectPortal();
}
}
public static class ProjectionProjectionReferenceCollectionFinder extends ProjectionProjectionReferenceRelatedFinder
{
public ProjectionProjectionReferenceCollectionFinder(Mapper mapper)
{
super(mapper);
}
}
public static abstract class ProjectionProjectionReferenceCollectionFinderForRelatedClasses
extends ProjectionProjectionReferenceCollectionFinder
implements DeepRelationshipAttribute
{
public ProjectionProjectionReferenceCollectionFinderForRelatedClasses(Mapper mapper)
{
super(mapper);
}
protected NormalAndListValueSelector zGetValueSelector()
{
return this;
}
}
public static class ProjectionProjectionReferenceSingleFinder extends ProjectionProjectionReferenceRelatedFinder
implements ToOneFinder
{
public ProjectionProjectionReferenceSingleFinder(Mapper mapper)
{
super(mapper);
}
public ProjectionProjectionReferenceSingleFinder()
{
super(null);
}
public Operation eq(ProjectionProjectionReference other)
{
return this.id().eq(other.getId())
;
}
// this implementation uses private API. Do NOT copy to application code. Application code must use normal operations for lookups.
public ProjectionProjectionReference findByPrimaryKey(long id)
{
ProjectionProjectionReference _result = null;
Operation _op = null;
Object _related = null;
{
I3O3L3 _bean = I3O3L3.POOL.getOrConstruct();
_bean.setL1AsLong(id);
MithraObjectPortal _portal = this.getMithraObjectPortal();
_related = _portal.getAsOneFromCacheForFind(_bean, _bean, forPrimaryKey, null, null);
_bean.release();
}
if (!(_related instanceof NulledRelation)) _result = (ProjectionProjectionReference) _related;
if (_related == null)
{
_op = this.id().eq(id);
}
if (_op != null)
{
_result = this.findOne(_op);
}
return _result;
}
}
public static abstract class ProjectionProjectionReferenceSingleFinderForRelatedClasses extends ProjectionProjectionReferenceSingleFinder implements DeepRelationshipAttribute
{
public ProjectionProjectionReferenceSingleFinderForRelatedClasses(Mapper mapper)
{
super(mapper);
}
protected NormalAndListValueSelector zGetValueSelector()
{
return this;
}
}
private static Mapper projectionReverseMapper = null;
public static Mapper zGetProjectionProjectionReferenceProjectionReverseMapper()
{
if (projectionReverseMapper == null)
{
projectionReverseMapper = zConstructProjectionProjectionReferenceProjectionReverseMapper();
}
return projectionReverseMapper;
}
private static Mapper projectionMapper = null;
public static Mapper zGetProjectionProjectionReferenceProjectionMapper()
{
if (projectionMapper == null)
{
projectionMapper = zConstructProjectionProjectionReferenceProjectionMapper();
}
return projectionMapper;
}
private static Mapper projectionPureReverseMapper = null;
public static Mapper zGetProjectionProjectionReferenceProjectionPureReverseMapper()
{
if (projectionPureReverseMapper == null)
{
projectionPureReverseMapper = zConstructProjectionProjectionReferenceProjectionPureReverseMapper();
}
return projectionPureReverseMapper;
}
private static Mapper zConstructProjectionProjectionReferenceProjectionPureReverseMapper()
{
Mapper projectionMapper = ProjectionProjectionReferenceFinder.zGetConstantJoin(0);
projectionMapper.setName("projection");
return projectionMapper;
}
private static Mapper zConstructProjectionProjectionReferenceProjectionReverseMapper()
{
Mapper projectionMapper = ProjectionProjectionReferenceFinder.zGetConstantJoin(0);
projectionMapper.setName("projection");
return projectionMapper;
}
private static Mapper zConstructProjectionProjectionReferenceProjectionMapper()
{
Mapper projectionMapper = ProjectionProjectionReferenceFinder.zGetConstantJoin(1);
projectionMapper.setName("projectionProjectionReferences");
return projectionMapper;
}
/** maps to \"PROJECTION_PROJECTION_REFERENCE\".\"ID\" **/
public static LongAttribute id()
{
return finder.id();
}
/** maps to \"PROJECTION_PROJECTION_REFERENCE\".\"PROJECTION_NAME\" **/
public static StringAttribute projectionName()
{
return finder.projectionName();
}
public static NamedProjectionFinder.NamedProjectionSingleFinderForRelatedClasses projection()
{
return finder.projection();
}
public static class ProjectionProjectionReferenceProjectionFinderSubclass extends NamedProjectionFinder.NamedProjectionSingleFinderForRelatedClasses
{
public ProjectionProjectionReferenceProjectionFinderSubclass(Mapper mapper, NormalAndListValueSelector parentSelector )
{
super(mapper);
this._parentSelector = (AbstractRelatedFinder) parentSelector;
this._orderBy = null;
this._type = SIMPLE_TO_ONE;
this._name = "projection";
}
public DeepRelationshipAttribute copy()
{
return new ProjectionProjectionReferenceProjectionFinderSubclass(zGetMapper(), (NormalAndListValueSelector) this._parentSelector
);
}
protected NamedProjection plainValueOf(ProjectionProjectionReference _obj)
{
return _obj.getProjection();
}
protected NamedProjectionList plainListValueOf(Object _obj)
{
return ((ProjectionProjectionReferenceList)_obj).getProjections();
}
}
public static ProjectionWithAssociationEndFinder.ProjectionWithAssociationEndSingleFinderForRelatedClasses projectionWithAssociationEndSuperClass()
{
return finder.projectionWithAssociationEndSuperClass();
}
public static class ProjectionProjectionReferenceProjectionWithAssociationEndSuperClassFinderSubclass extends ProjectionWithAssociationEndFinder.ProjectionWithAssociationEndSingleFinderForRelatedClasses
{
public ProjectionProjectionReferenceProjectionWithAssociationEndSuperClassFinderSubclass(Mapper mapper, NormalAndListValueSelector parentSelector )
{
super(mapper);
this._parentSelector = (AbstractRelatedFinder) parentSelector;
this._orderBy = null;
this._type = SIMPLE_TO_ONE;
this._name = "projectionWithAssociationEndSuperClass";
}
public DeepRelationshipAttribute copy()
{
return new ProjectionProjectionReferenceProjectionWithAssociationEndSuperClassFinderSubclass(zGetMapper(), (NormalAndListValueSelector) this._parentSelector
);
}
protected ProjectionWithAssociationEnd plainValueOf(ProjectionProjectionReference _obj)
{
return _obj.getProjectionWithAssociationEndSuperClass();
}
protected ProjectionWithAssociationEndList plainListValueOf(Object _obj)
{
return ((ProjectionProjectionReferenceList)_obj).getProjectionWithAssociationEndSuperClass();
}
}
public static Operation eq(ProjectionProjectionReference other)
{
return finder.eq(other);
}
public static Operation all()
{
return new All(id());
}
public static ProjectionProjectionReferenceSingleFinder getFinderInstance()
{
return finder;
}
public static Attribute[] getPrimaryKeyAttributes()
{
return new Attribute[]
{
id()
}
;
}
public static Attribute[] getImmutableAttributes()
{
return new Attribute[]
{
id()
, id()
}
;
}
public static AsOfAttribute[] getAsOfAttributes()
{
return null;
}
protected static void initializeIndicies(Cache cache)
{
cache.addIndex("0 Index", new Attribute[]
{
projectionName()
}
);
}
protected static void initializePortal(MithraObjectDeserializer objectFactory, Cache cache,
MithraConfigurationManager.Config config)
{
initializeIndicies(cache);
isFullCache = cache.isFullCache();
isOffHeap = cache.isOffHeap();
MithraObjectPortal portal;
if (config.isParticipatingInTx())
{
portal = new MithraTransactionalPortal(objectFactory, cache, getFinderInstance(),
config.getRelationshipCacheSize(), config.getMinQueriesToKeep(), null,
null, null, 0,
(MithraObjectPersister) objectFactory);
}
else
{
portal = new MithraReadOnlyPortal(objectFactory, cache, getFinderInstance(),
config.getRelationshipCacheSize(), config.getMinQueriesToKeep(), null,
null, null, 0,
(MithraObjectPersister) objectFactory);
}
portal.setParentFinders(new RelatedFinder[]
{
NamedProjectionFinder.getFinderInstance(),ProjectionWithAssociationEndFinder.getFinderInstance(),
}
);
config.initializePortal(portal);
objectPortal.destroy();
objectPortal = portal;
}
protected static void initializeClientPortal(MithraObjectDeserializer objectFactory, Cache cache,
MithraConfigurationManager.Config config)
{
initializeIndicies(cache);
isFullCache = cache.isFullCache();
isOffHeap = cache.isOffHeap();
MithraObjectPortal portal;
if (config.isParticipatingInTx())
{
portal = new MithraTransactionalPortal(objectFactory, cache, getFinderInstance(),
config.getRelationshipCacheSize(), config.getMinQueriesToKeep(),
null, null,
null, 0,
new RemoteMithraObjectPersister(config.getRemoteMithraService(), getFinderInstance(), false));
}
else
{
portal = new MithraReadOnlyPortal(objectFactory, cache, getFinderInstance(),
config.getRelationshipCacheSize(), config.getMinQueriesToKeep(),
null, null,
null, 0,
new RemoteMithraObjectPersister(config.getRemoteMithraService(), getFinderInstance(), false));
}
portal.setParentFinders(new RelatedFinder[]
{
NamedProjectionFinder.getFinderInstance(),ProjectionWithAssociationEndFinder.getFinderInstance(),
}
);
config.initializePortal(portal);
objectPortal.destroy();
objectPortal = portal;
}
public static boolean isFullCache()
{
return isFullCache;
}
public static boolean isOffHeap()
{
return isOffHeap;
}
public static Attribute getAttributeByName(String attributeName)
{
return finder.getAttributeByName(attributeName);
}
public static com.gs.fw.common.mithra.extractor.Function getAttributeOrRelationshipSelector(String attributeName)
{
return finder.getAttributeOrRelationshipSelector(attributeName);
}
public static RelatedFinder getRelatedFinderByName(String relationshipName)
{
return finder.getRelationshipFinderByName(relationshipName);
}
public static DoubleAttribute[] zGetDoubleAttributes()
{
DoubleAttribute[] result = new DoubleAttribute[0];
return result;
}
public static BigDecimalAttribute[] zGetBigDecimalAttributes()
{
BigDecimalAttribute[] result = new BigDecimalAttribute[0];
return result;
}
public static void zResetPortal()
{
objectPortal.destroy();
objectPortal = new UninitializedPortal("klass.model.meta.domain.ProjectionProjectionReference");
isFullCache = false;
isOffHeap = false;
}
public static void setTransactionModeFullTransactionParticipation(MithraTransaction tx)
{
tx.setTxParticipationMode(objectPortal, FullTransactionalParticipationMode.getInstance());
}
public static void setTransactionModeReadCacheUpdateCausesRefreshAndLock(MithraTransaction tx)
{
tx.setTxParticipationMode(objectPortal, ReadCacheUpdateCausesRefreshAndLockTxParticipationMode.getInstance());
}
public static void registerForNotification(MithraApplicationClassLevelNotificationListener listener)
{
getMithraObjectPortal().registerForApplicationClassLevelNotification(listener);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy