/******************************************************************************* | |
* Copyright (c) 2011, 2013 Oracle and/or its affiliates. All rights reserved. | |
* This program and the accompanying materials are made available under the | |
* terms of the Eclipse Public License v1.0 and Eclipse Distribution License v. 1.0 | |
* which accompanies this distribution. | |
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html | |
* and the Eclipse Distribution License is available at | |
* http://www.eclipse.org/org/documents/edl-v10.php. | |
* | |
* Contributors: | |
* Oracle - initial API and implementation | |
******************************************************************************/ | |
package org.eclipse.persistence.descriptors; | |
import java.io.*; | |
import java.util.ArrayList; | |
import java.util.List; | |
import org.eclipse.persistence.internal.helper.ClassConstants; | |
import org.eclipse.persistence.internal.helper.DatabaseField; | |
/** | |
* <p><b>Purpose</b>: | |
* Define a secondary index on the cache. | |
* | |
* @see CachePolicy | |
*/ | |
public class CacheIndex implements Cloneable, Serializable { | |
protected boolean isUpdateable = true; | |
protected boolean isInsertable = true; | |
protected List<DatabaseField> fields; | |
/** Allows the cache size to be set. */ | |
protected int cacheSize; | |
/** Allows the identity map class type to be set. */ | |
protected Class cacheType = ClassConstants.WeakIdentityMap_Class; | |
public CacheIndex() { | |
this.fields = new ArrayList<DatabaseField>(); | |
} | |
public CacheIndex(DatabaseField fields[]) { | |
this.fields = new ArrayList<DatabaseField>(fields.length); | |
for (DatabaseField field : fields) { | |
this.fields.add(field); | |
} | |
} | |
public CacheIndex(String... fields) { | |
this.fields = new ArrayList<DatabaseField>(fields.length); | |
for (String field : fields) { | |
this.fields.add(new DatabaseField(field)); | |
} | |
} | |
public CacheIndex(List<DatabaseField> fields) { | |
this.fields = fields; | |
} | |
/** | |
* Return if the index field can be updated. | |
*/ | |
public boolean isUpdateable() { | |
return isUpdateable; | |
} | |
/** | |
* Set if the index field can be updated. | |
* If updateable the object will be re-indexed on each update/refresh. | |
*/ | |
public void setIsUpdateable(boolean isUpdateable) { | |
this.isUpdateable = isUpdateable; | |
} | |
/** | |
* Return if the index field can be inserted. | |
*/ | |
public boolean isInsertable() { | |
return isInsertable; | |
} | |
/** | |
* Set if the index field can be inserted. | |
* If insertable the object will be indexed after insert. | |
*/ | |
public void setIsInsertable(boolean isInsertable) { | |
this.isInsertable = isInsertable; | |
} | |
/** | |
* ADVANCED: | |
* Return the type of the cache used for the index. | |
* This default to a weak cache, and should normally not be changed. | |
* For a weak cache, the index will remain until the object gcs from the main cache. | |
*/ | |
public Class getCacheType() { | |
return cacheType; | |
} | |
/** | |
* ADVANCED: | |
* Set the type of the cache used for the index. | |
* This default to a weak cache, and should normally not be changed. | |
* For a weak cache, the index will remain until the object gcs from the main cache. | |
*/ | |
public void setCacheType(Class cacheType) { | |
this.cacheType = cacheType; | |
} | |
/** | |
* ADVANCED: | |
* Return the cache size. | |
* This is either the initial size, sub-cache size, or fixed size depending on the cache type. | |
*/ | |
public int getCacheSize() { | |
return cacheSize; | |
} | |
/** | |
* ADVANCED: | |
* Set the cache size. | |
* This is either the initial size, sub-cache size, or fixed size depending on the cache type. | |
*/ | |
public void setCacheSize(int cacheSize) { | |
this.cacheSize = cacheSize; | |
} | |
public void addField(DatabaseField field) { | |
this.fields.add(field); | |
} | |
/** | |
* PUBLIC: | |
* Add the database column name to the cache index. | |
*/ | |
public void addFieldName(String field) { | |
addField(new DatabaseField(field)); | |
} | |
public List<DatabaseField> getFields() { | |
return fields; | |
} | |
public void setFields(List<DatabaseField> fields) { | |
this.fields = fields; | |
} | |
public String toString() { | |
return "CacheIndex(" + getFields() + ")"; | |
} | |
} |