|
Elexis API documentationVersion 2.1.6 as of December 11 2011 | |||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectch.elexis.data.PersistentObject
public abstract class PersistentObject
Base class for all objects to be stored in the database. A PersistentObject has an unique ID, which is assigned as the object is created. Every object is accessed "lazily" which means that "loading" an object instantiates only a proxy with the ID of the requested object. Members are read only as needed. The class provides static functions to log into the database, and provides methods for reading and writing of fields for derived classes. The get method uses a cache to reduce the number of costly database operations. Repeated read-requests within a configurable life-time (defaults to 15 seconds) are satisfied from the cache. PersistentObject can log every write-access in a trace-table, as desired. get- and set- methods perform necessary coding/decoding of fields as needed. Basisklasse für alle Objekte, die in der Datenbank gespeichert werden sollen. Ein PersistentObject hat eine eindeutige ID, welche beim Erstellen des Objekts automatisch vergeben wird. Grundsätzlich wird jedes Objekt "lazy" geladen, indem jede Leseanforderung zunächst nur einen mit der ID des Objekts versehenen Proxy instantiiert und jedes Member-Feld erst auf Anfrage nachlädt. Die Klasse stellt statische Funktionen zur Kontaktaufnahme mit der Datenbank und member-Funktionen zum Lesen und Schreiben von Feldern der Tochterobjekte zur Verfügung. Die get-Methode verwendet einen zeitlich limitierten Cache. um die Zahl teurer Datenbankoperationen zu minimieren: Wiederholte Lesezugriffe innerhalb einer einstellbaren lifetime (Standardmässig 15 Sekunden) werden aus dem cache bedient. PersistentObject kann auch alle Schreibvorgänge in einer speziellen Trace-Tabelle dokumentieren. Die get- und set- Methoden kümmern sich selbst um codierung/decodierung der Felder, wenn nötig. Aufeinanderfolgende und streng zusammengehörende Schreibvorgänge können auch in einer Transaktion zusammengefasst werden, welche nur ganz oder gar nicht ausgeführt wird. (begin()). Es ist aber zu beachten, das nicht alle Datenbanken Transaktionen unterstützen. MySQL beispielsweise nur, wenn es mit InnoDB-Tabellen eingerichtet wurde (welche langsamer sind, als die standardmässig verwendeten MyISAM-Tabellen).
Nested Class Summary | |
---|---|
static class |
PersistentObject.FieldType
|
Field Summary | |
---|---|
static int |
CACHE_DEFAULT_LIFETIME
|
static int |
CACHE_MIN_LIFETIME
|
static java.lang.String |
CFG_CONNECTSTRING
|
static java.lang.String |
CFG_DRIVER
|
static java.lang.String |
CFG_PWD
|
static java.lang.String |
CFG_TYPE
|
static java.lang.String |
CFG_USER
|
static int |
DELETED
An object with this ID exists but is marked deleted |
static int |
EXISTS
This is an existing object |
static int |
INEXISTENT
An object with this ID does not exist |
static int |
INVALID_ID
This id is not valid |
static int |
MATCH_AUTO
Try to find match method. |
static int |
MATCH_CONTAINS
String must contain test (ignoring case) |
static int |
MATCH_EXACT
Strings must match exactly (but ignore case) |
static int |
MATCH_REGEXP
String must match as regular expression |
static int |
MATCH_START
String must start with test (ignoring case) |
Fields inherited from interface ch.elexis.core.data.IPersistentObject |
---|
FLD_DATE, FLD_DELETED, FLD_EXTINFO, FLD_ID, FLD_LASTUPDATE, STATE_EXISTING, STATE_INEXISTENT, STATE_INVALID_ID |
Method Summary | |
---|---|
void |
addChangeListener(IChangeListener listener,
java.lang.String fieldToObserve)
Add a listener to this object that will be informed, if a given property gets changed. |
void |
addSticker(ISticker st)
Add a Sticker to this object |
int |
addToList(java.lang.String field,
java.lang.String oID,
java.lang.String... extra)
Eine Element einer n:m Verknüpfung eintragen. |
boolean |
addXid(java.lang.String domain,
java.lang.String domain_id,
boolean updateIfExists)
Assign a XID to this object. |
Transaction |
begin()
Eine Transaktion beginnen. schreiboperationen müssen auf das zurückgelieferte Transactions-Objekt erfolgen. |
static java.lang.String |
checkNull(java.lang.Object in)
Return a String field making sure that it will never be null |
static int |
checkZero(java.lang.Object in)
return a numeric field making sure the call will not fail on illegal values |
static double |
checkZeroDouble(java.lang.String in)
return a numeric field making sure the call will not fail on illegal values |
static void |
clearCache()
|
static boolean |
connect(JdbcLink jd)
|
static boolean |
connect(Settings cfg,
Shell loginshell)
Connect to a database. |
boolean |
delete()
Ein Objekt und ggf. dessen XID's aus der Datenbank löschen the object is not deleted but rather marked as deleted. |
boolean |
deleteList(java.lang.String field)
Alle Bezüge aus einer n:m-Verknüpfung zu diesem Objekt löschen |
static void |
disconnect()
Verbindung zur Datenbank trennen |
boolean |
equals(java.lang.Object arg0)
|
static void |
executeSQLScript(java.lang.String filepath,
java.lang.String plugin)
public helper to execute an sql script iven as file path. |
boolean |
exists()
Feststellen, ob ein PersistentObject bereits in der Datenbank existiert |
java.lang.String |
exportData()
Exports a persistentobject to an xml string |
void |
fireChangeEvent(java.lang.String field,
java.lang.Object oldValue,
java.lang.Object newValue)
|
static byte[] |
flatten(java.util.Hashtable<java.lang.Object,java.lang.Object> hash)
Convert a Hashtable into a compressed byte array. |
static java.util.Hashtable<java.lang.Object,java.lang.Object> |
fold(byte[] flat)
Recreate a Hashtable from a byte array as created by flatten() |
java.lang.String |
get(java.lang.String field)
Ein Feld aus der Datenbank auslesen. |
boolean |
get(java.lang.String[] fields,
java.lang.String[] values)
Mehrere Felder auf einmal auslesen |
int |
getCacheTime()
Return time-to-live in cache for this object |
static JdbcLink |
getConnection()
Return the Object containing the cdecodeonnection. |
static int |
getDefaultCacheLifetime()
|
PersistentObject.FieldType |
getFieldType(java.lang.String f)
|
java.lang.String |
getId()
Die eindeutige Identifikation dieses Objektes/Datensatzes liefern. |
int |
getInt(java.lang.String field)
Bequemlichkeitsmethode zum lesen eines Integer. |
abstract java.lang.String |
getLabel()
Einen menschenlesbaren Identifikationsstring für dieses Objet liefern |
long |
getLastUpdate()
return the time of the last update of this object |
java.util.List<java.lang.String> |
getList(java.lang.String field,
boolean reverse)
Eine 1:n Verknüpfung aus der Datenbank auslesen. |
java.util.List<java.lang.String[]> |
getList(java.lang.String field,
java.lang.String[] extra)
Eine n:m - Verknüpfung auslesen |
java.util.Map<java.lang.Object,java.lang.Object> |
getMap(java.lang.String field)
Eine Hashtable auslesen |
ISticker |
getSticker()
holt den "höchstwertigen" Sticker, falls mehrere existieren |
java.util.List<ISticker> |
getStickers()
Return all Stickers attributed to this objecz |
java.lang.String |
getWrappedId()
Die ID in einen datenbankgeeigneten Wrapper verpackt (je nach Datenbank; meist Hochkommata). |
IXid |
getXid()
return the "best" xid for a given object. |
java.lang.String |
getXid(java.lang.String domain)
Return a xid (domain_id) for a specified domain |
java.util.List<IXid> |
getXids()
retrieve all XIDs of this object |
int |
hashCode()
|
boolean |
isAvailable()
Check whether the object exists in the database. |
boolean |
isDeleted()
Feststellen, ob ein PersistentObject als gelöscht markiert wurde |
boolean |
isDragOK()
Darf dieses Objekt mit Drag&Drop verschoben werden? |
boolean |
isMatching(IPersistentObject other,
int mode,
java.lang.String... fields)
Testet ob zwei Objekte bezüglich definierbarer Felder übereinstimmend sind |
boolean |
isMatching(java.util.List<Query.Term> terms)
|
boolean |
isMatching(java.util.Map<java.lang.String,java.lang.String> fields,
int mode,
boolean bSkipInexisting)
Testet ob dieses Objekt den angegebenen Feldern entspricht. |
boolean |
isMatching(java.lang.String[] fields,
int mode,
java.lang.String... others)
testet, ob die angegebenen Felder den angegebenen Werten entsprechen. |
static boolean |
isShowDeleted()
|
boolean |
isValid()
Angeben, ob dieses Objekt gültig ist. |
static java.lang.String |
lock(java.lang.String name,
boolean wait)
Exklusiven Zugriff auf eine Ressource verlangen. |
java.lang.String |
map(java.lang.String f)
Aus einem Feldnamen das dazugehörige Datenbankfeld ermitteln |
static boolean |
relock(java.lang.String name,
java.lang.String lockid)
Extend lifetime of an existing lock by 2 more seconds |
void |
removeChangeListener(IChangeListener listener,
java.lang.String fieldObserved)
Remove a property change listener. |
void |
removeFromList(java.lang.String field)
Remove all relations to this object from link |
void |
removeFromList(java.lang.String field,
java.lang.String oID)
Remove a relation to this object from link |
void |
removeSticker(ISticker et)
Remove a Sticker from this object |
static void |
resetCache()
|
boolean |
set(java.lang.String[] fields,
java.lang.String... values)
Mehrere Felder auf einmal setzen (Effizienter als einzelnes set) |
boolean |
set(java.lang.String field,
java.lang.String value)
Ein Feld in die Datenbank übertragen. |
static void |
setDefaultCacheLifetime(int seconds)
|
boolean |
setInt(java.lang.String field,
int value)
Set a value of type int. |
void |
setMap(java.lang.String field,
java.util.Map<java.lang.Object,java.lang.Object> map)
Eine Hashtable speichern. |
static void |
setShowDeleted(boolean showDeleted)
|
static void |
setTrace(java.lang.String Tablename)
Trace (protokollieren aller Schreibvorgänge) ein- und ausschalten. |
int |
state()
Check the state of an object with this ID Note: This method accesses the database and therefore is much more costly than the simple instantaniation of a PersistentObject |
java.lang.String |
storeToString()
Objekt in einen String serialisieren. |
static boolean |
tableExists(java.lang.String tableName)
|
static java.lang.String |
ts(java.lang.Object in)
Convert an arbitrary value into the database format |
boolean |
undelete()
We can undelete any object by simply clearing the deleted-flag and reanimate dependend XID's |
static boolean |
unlock(java.lang.String name,
java.lang.String id)
Exklusivzugriff wieder aufgeben |
Methods inherited from class java.lang.Object |
---|
getClass, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
public static final java.lang.String CFG_CONNECTSTRING
public static final java.lang.String CFG_TYPE
public static final java.lang.String CFG_PWD
public static final java.lang.String CFG_USER
public static final java.lang.String CFG_DRIVER
public static final int CACHE_DEFAULT_LIFETIME
public static final int CACHE_MIN_LIFETIME
public static final int INEXISTENT
public static final int INVALID_ID
public static final int DELETED
public static final int EXISTS
public static final int MATCH_EXACT
public static final int MATCH_START
public static final int MATCH_REGEXP
public static final int MATCH_CONTAINS
public static final int MATCH_AUTO
Method Detail |
---|
public static boolean connect(Settings cfg, Shell loginshell)
public static boolean connect(JdbcLink jd)
public static JdbcLink getConnection()
public static void setTrace(java.lang.String Tablename)
Tablename
- Name der Trace-tabelle oder null: Trace aus.public static java.lang.String lock(java.lang.String name, boolean wait)
name
- Name der gewünschten Sperrewait
- wenn True, warten bis die sperre frei oder abgelaufen ist
public static boolean relock(java.lang.String name, java.lang.String lockid)
name
- name of the lockid
- id as returned by lock() call
public static boolean unlock(java.lang.String name, java.lang.String id)
name
- Name des Locksid
- bei "lock" erhaltene LockID
public abstract java.lang.String getLabel()
getLabel
in interface IPersistentObject
public boolean isValid()
isValid
in interface IPersistentObject
public java.lang.String getId()
getId
in interface IPersistentObject
public java.lang.String getWrappedId()
public java.lang.String storeToString()
storeToString
in interface IPersistentObject
PersistentObjectFactory
.createFromString wieder
das Objekt erstellt werden kannpublic int state()
state
in interface IPersistentObject
public boolean exists()
exists
in interface IPersistentObject
public boolean isAvailable()
isAvailable
in interface IPersistentObject
public java.lang.String getXid(java.lang.String domain)
getXid
in interface IPersistentObject
domain
-
public IXid getXid()
getXid
in interface IPersistentObject
public java.util.List<IXid> getXids()
getXids
in interface IPersistentObject
public boolean addXid(java.lang.String domain, java.lang.String domain_id, boolean updateIfExists)
addXid
in interface IPersistentObject
domain
- the domain whose ID will be assigneddomain_id
- the id out of the given domain fot this objectupdateIfExists
- if true update values if Xid with same domain and domain_id exists. Otherwise the
method will fail if a collision occurs.
public ISticker getSticker()
getSticker
in interface IPersistentObject
public java.util.List<ISticker> getStickers()
getStickers
in interface IPersistentObject
public void removeSticker(ISticker et)
removeSticker
in interface IPersistentObject
et
- the Sticker to removepublic void addSticker(ISticker st)
addSticker
in interface IPersistentObject
st
- the Sticker to addpublic boolean isDeleted()
isDeleted
in interface IPersistentObject
public boolean isDragOK()
isDragOK
in interface IPersistentObject
public java.lang.String map(java.lang.String f)
f
- Der Feldname
public PersistentObject.FieldType getFieldType(java.lang.String f)
public java.lang.String get(java.lang.String field)
get
in interface IPersistentObject
field
- Name des Felds
public java.util.Map<java.lang.Object,java.lang.Object> getMap(java.lang.String field)
getMap
in interface IPersistentObject
field
- Feldname der Hashtable
public int getInt(java.lang.String field)
getInt
in interface IPersistentObject
field
-
public java.util.List<java.lang.String> getList(java.lang.String field, boolean reverse)
field
- das Feld, wie in der mapping-Deklaration angegebenreverse
- wenn true wird rückwärts sortiert
public java.util.List<java.lang.String[]> getList(java.lang.String field, java.lang.String[] extra)
field
- Das Feld, für das ein entsprechendes mapping existiertextra
- Extrafelder, die aus der joint-Tabelle ausgelesen werden sollen
public boolean set(java.lang.String field, java.lang.String value)
set
in interface IPersistentObject
field
- Name des Feldesvalue
- Einzusetzender Wert (der vorherige Wert wird überschrieben)
public void setMap(java.lang.String field, java.util.Map<java.lang.Object,java.lang.Object> map)
setMap
in interface IPersistentObject
field
- map
- public boolean setInt(java.lang.String field, int value)
setInt
in interface IPersistentObject
field
- a table field of numeric typevalue
- the value to be set
public int addToList(java.lang.String field, java.lang.String oID, java.lang.String... extra)
field
- Das n:m Feld, für das ein neuer Eintrag erstellt werden soll.oID
- ID des Zielobjekts, auf das der Eintrag zeigen sollextra
- Definition der zusätzlichen Felder der Joint-Tabelle. Jeder Eintrag in der Form
Feldname=Wert
public void removeFromList(java.lang.String field)
field
- public void removeFromList(java.lang.String field, java.lang.String oID)
field
- oID
- public boolean delete()
public boolean deleteList(java.lang.String field)
field
- Feldname, der die Liste definiert
public boolean undelete()
public boolean set(java.lang.String[] fields, java.lang.String... values)
set
in interface IPersistentObject
fields
- die Feldnamenvalues
- die Werte
public boolean get(java.lang.String[] fields, java.lang.String[] values)
get
in interface IPersistentObject
fields
- die Feldervalues
- String Array für die gelesenen Werte
public boolean isMatching(IPersistentObject other, int mode, java.lang.String... fields)
isMatching
in interface IPersistentObject
other
- anderes Objektmode
- gleich, LIKE oder Regexpfields
- die interessierenden Felder
public boolean isMatching(java.lang.String[] fields, int mode, java.lang.String... others)
isMatching
in interface IPersistentObject
fields
- die zu testenden Feldemode
- Testmodus (MATCH_EXACT, MATCH_LIKE oder MATCH_REGEXP)others
- die Vergleichswerte
public boolean isMatching(java.util.Map<java.lang.String,java.lang.String> fields, int mode, boolean bSkipInexisting)
isMatching
in interface IPersistentObject
fields
- HashMap mit name,wert paaren für die Feldermode
- Testmodus (MATCH_EXACT, MATCH_BEGIN, MATCH_REGEXP, MATCH_CONTAIN oder MATCH_AUTO)bSkipInexisting
- don't return false if a fieldname is not found but skip this field instead
public boolean isMatching(java.util.List<Query.Term> terms)
isMatching
in interface IPersistentObject
public Transaction begin()
public static void disconnect()
public boolean equals(java.lang.Object arg0)
equals
in class java.lang.Object
public static java.lang.String checkNull(java.lang.Object in)
in
- name of the field to retrieve
public static int checkZero(java.lang.Object in)
in
- name of the field
public static double checkZeroDouble(java.lang.String in)
in
- name of the field
public long getLastUpdate()
getLastUpdate
in interface IPersistentObject
public int hashCode()
hashCode
in class java.lang.Object
public static void clearCache()
public static void resetCache()
public int getCacheTime()
public static void setDefaultCacheLifetime(int seconds)
public static int getDefaultCacheLifetime()
public static boolean isShowDeleted()
public static void setShowDeleted(boolean showDeleted)
public static void executeSQLScript(java.lang.String filepath, java.lang.String plugin) throws java.io.IOException
filepath
- where the script isplugin
- name of the originating plugin
java.io.IOException
- file not found or not readablepublic static byte[] flatten(java.util.Hashtable<java.lang.Object,java.lang.Object> hash)
hash
- the hashtable to store
public static java.util.Hashtable<java.lang.Object,java.lang.Object> fold(byte[] flat)
flat
- the byte array
public java.lang.String exportData()
public static boolean tableExists(java.lang.String tableName)
public static java.lang.String ts(java.lang.Object in)
in
- Object
public void addChangeListener(IChangeListener listener, java.lang.String fieldToObserve)
IPersistentObject
addChangeListener
in interface IPersistentObject
listener
- The Listener to attachfieldToObserve
- the name of the property to observepublic void removeChangeListener(IChangeListener listener, java.lang.String fieldObserved)
IPersistentObject
removeChangeListener
in interface IPersistentObject
listener
- the listener to removefieldObserved
- the property that was observed by this listener.public void fireChangeEvent(java.lang.String field, java.lang.Object oldValue, java.lang.Object newValue)
|
Elexis API documentationVersion 2.1.6 as of December 11 2011 | |||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |