|
RSE Release 1.0 |
|||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||||
java.lang.Objectorg.eclipse.rse.core.model.PropertySetContainer
org.eclipse.rse.core.model.RSEModelObject
org.eclipse.rse.internal.references.SystemReferencedObject
org.eclipse.rse.internal.references.SystemPersistableReferencedObject
org.eclipse.rse.filters.SystemFilterPool
| Field Summary | |
|---|---|
protected boolean |
default_
|
protected static boolean |
DEFAULT_EDEFAULT
The default value of the ' Default' attribute |
protected boolean |
deletable
|
protected static boolean |
DELETABLE_EDEFAULT
The default value of the ' Deletable' attribute |
protected static String |
DELIMITER
|
protected List |
filters
|
protected static String |
NAME_EDEFAULT
The default value of the ' Name' attribute |
protected static boolean |
NON_RENAMABLE_EDEFAULT
The default value of the ' Non Renamable' attribute |
protected boolean |
nonRenamable
The cached value of the ' Non Renamable' attribute |
protected static String |
OWNING_PARENT_NAME_EDEFAULT
The default value of the ' Owning Parent Name' attribute |
protected String |
owningParentName
The cached value of the ' Owning Parent Name' attribute |
protected int |
release
|
protected static int |
RELEASE_EDEFAULT
The default value of the ' Release' attribute |
protected static boolean |
SINGLE_FILTER_STRING_ONLY_EDEFAULT
The default value of the ' Single Filter String Only' attribute |
protected boolean |
singleFilterStringOnly
The cached value of the ' Single Filter String Only' attribute |
protected boolean |
singleFilterStringOnlyESet
This is true if the Single Filter String Only attribute has been set |
protected boolean |
specialCaseNoDataRestored
|
protected static boolean |
STRINGS_CASE_SENSITIVE_EDEFAULT
The default value of the ' Strings Case Sensitive' attribute |
protected boolean |
stringsCaseSensitive
|
protected boolean |
stringsCaseSensitiveESet
This is true if the Strings Case Sensitive attribute has been set |
protected static boolean |
SUPPORTS_DUPLICATE_FILTER_STRINGS_EDEFAULT
The default value of the ' Supports Duplicate Filter Strings' attribute |
protected static boolean |
SUPPORTS_NESTED_FILTERS_EDEFAULT
The default value of the ' Supports Nested Filters' attribute |
protected boolean |
supportsDuplicateFilterStrings
|
protected boolean |
supportsNestedFilters
|
protected String |
type
|
protected static String |
TYPE_EDEFAULT
The default value of the ' Type' attribute |
| Fields inherited from class org.eclipse.rse.internal.references.SystemReferencedObject |
|---|
helper |
| Fields inherited from class org.eclipse.rse.core.model.RSEModelObject |
|---|
_isDirty, _wasRestored |
| Fields inherited from interface org.eclipse.rse.core.filters.ISystemFilterSavePolicies |
|---|
SAVE_POLICY_NONE, SAVE_POLICY_ONE_FILE_PER_FILTER, SAVE_POLICY_ONE_FILE_PER_MANAGER, SAVE_POLICY_ONE_FILE_PER_POOL_SAME_FOLDER, SAVE_POLICY_ONE_FILEANDFOLDER_PER_POOL |
| Fields inherited from interface org.eclipse.rse.core.filters.ISystemFilterConstants |
|---|
DEFAULT_TYPE, SAVEFILE_SUFFIX, TRY_TO_RESTORE_NO, TRY_TO_RESTORE_YES |
| Constructor Summary | |
|---|---|
protected |
SystemFilterPool()
Default constructor |
| Method Summary | |
|---|---|
boolean |
addSystemFilter(ISystemFilter filter)
Adds given filter to the list. |
boolean |
areStringsCaseSensitive()
Same as isStringsCaseSensitive() |
ISystemFilter |
cloneSystemFilter(ISystemFilter filter,
String aliasName)
Duplicates a given filter in the list. |
void |
cloneSystemFilterPool(ISystemFilterPool targetPool)
Clone this filter pools' attributes and filters into another filter pool. |
boolean |
commit()
Request a persistence manager to persist this object. |
ISystemFilter |
copySystemFilter(ISystemFilterPool targetPool,
ISystemFilter oldFilter,
String newName)
Copy a system filter to this or another filter pool. |
protected static SystemFilterPool |
createPool()
|
ISystemFilter |
createSystemFilter(String aliasName,
Vector filterStrings)
Creates a new system filter within this pool. |
ISystemFilterPool |
createSystemFilterPool(String name,
boolean allowNestedFilters,
boolean isDeletable,
boolean tryToRestore)
Static factory method for creating a new filter pool. |
protected static Vector |
deduceFilterNames(IFolder folder,
IRSEFilterNamingPolicy namingPolicy)
Private helper method to deduce filter names from disk files. |
void |
deleteSystemFilter(ISystemFilter filter)
Removes a given filter from the list. |
Object |
getAdapter(Class adapterType)
This is the method required by the IAdaptable interface. |
static SystemFilterPool |
getDefault()
|
String |
getDescription()
|
List |
getFilters()
|
String |
getId()
|
String |
getName()
|
IRSEFilterNamingPolicy |
getNamingPolicy()
Get the naming policy currently used when saving data to disk. |
String |
getOwningParentName()
|
ISystemFilterPoolManagerProvider |
getProvider()
Return the caller which instantiated the filter pool manager overseeing this filter framework instance |
String |
getReferenceName()
Return the unique reference name of this object. |
int |
getRelease()
|
protected static String |
getRootSaveFileName(IRSEFilterNamingPolicy namingPolicy,
String poolName)
Return the root save file name without the extension .xmi |
protected static String |
getRootSaveFileName(ISystemFilterPool pool)
Return the root save file name without the extension .xmi |
protected static String |
getRootSaveFileName(ISystemFilterPool pool,
String newName)
Return the root save file name without the extension .xmi |
ISystemFilter |
getSystemFilter(String aliasName)
Return a filter object, given its aliasname. |
int |
getSystemFilterCount()
Return how many filters are defined in this filter container |
Vector |
getSystemFilterNames()
Return Vector of String objects: the names of existing filters in this container. |
ISystemFilterPool |
getSystemFilterPool()
From SystemFilterContainer. |
Object |
getSystemFilterPoolData()
Return transient data set via setFilterPoolData. |
ISystemFilterPoolManager |
getSystemFilterPoolManager()
Return the filter pool manager managing this collection of filter pools and their filters. |
int |
getSystemFilterPosition(ISystemFilter filter)
Return a given filter's zero-based location |
ISystemFilter[] |
getSystemFilters()
Return filters in this pool, as an array. |
Vector |
getSystemFiltersVector()
Return the nested filters as a Vector |
String |
getType()
Returns the type attribute. |
String |
getTypeGen()
|
protected void |
initialize(String name,
boolean allowNestedFilters,
boolean isDeletable)
|
protected void |
initialize(String name,
int savePolicy,
IRSEFilterNamingPolicy namingPolicy)
|
protected void |
initializeFilterStrings()
Internal use method |
protected List |
internalGetFilters()
|
boolean |
isDefault()
|
boolean |
isDeletable()
|
boolean |
isNonRenamable()
|
boolean |
isSetSingleFilterStringOnly()
|
boolean |
isSetStringsCaseSensitive()
|
boolean |
isSingleFilterStringOnly()
Returns true if this filter is limited to a single filter string. |
boolean |
isSingleFilterStringOnlyGen()
|
boolean |
isStringsCaseSensitive()
|
boolean |
isSupportsDuplicateFilterStrings()
|
boolean |
isSupportsNestedFilters()
|
void |
moveSystemFilter(int pos,
ISystemFilter filter)
Move a given filter to a given zero-based location |
void |
orderSystemFilters(String[] names)
Order filters according to user preferences. |
void |
renameSystemFilter(ISystemFilter filter,
String newName)
Rename a given filter in the list. |
protected static ISystemFilterPool |
restore(String name,
int savePolicy,
IRSEFilterNamingPolicy namingPolicy)
Restore specific filter pool. |
void |
setDefault(boolean newDefault)
|
void |
setDeletable(boolean newDeletable)
|
void |
setName(String name)
Set the name of this filter pool. |
void |
setNamingPolicy(IRSEFilterNamingPolicy namingPolicy)
Set the naming policy used when saving data to disk. |
void |
setNonRenamable(boolean newNonRenamable)
|
void |
setOwningParentName(String newOwningParentName)
|
void |
setRelease(int newRelease)
|
void |
setSavePolicy(int policy)
Set the save file policy. |
void |
setSingleFilterStringOnly(boolean newSingleFilterStringOnly)
|
void |
setStringsCaseSensitive(boolean supports)
Set whether filters in this pool support case-sensitive filter strings. |
void |
setStringsCaseSensitiveGen(boolean newStringsCaseSensitive)
|
void |
setSupportsDuplicateFilterStrings(boolean supports)
Set whether filters in this pool support duplicate filter strings. |
void |
setSupportsDuplicateFilterStringsGen(boolean newSupportsDuplicateFilterStrings)
|
void |
setSupportsNestedFilters(boolean supports)
Set whether filters in this pool support nested filters. |
void |
setSupportsNestedFiltersGen(boolean newSupportsNestedFilters)
|
void |
setSystemFilterPoolData(Object data)
While setData is for global data to set in all objects in the filter framework, this is to set transient data that only the filter pool holds. |
void |
setSystemFilterPoolManager(ISystemFilterPoolManager mgr)
Set the filter pool manager. |
void |
setType(String newType)
|
protected void |
sortFilters()
When saving one file per filter, we store the relative order of each filter within each filter. |
boolean |
supportsDuplicateFilterStrings()
Does this support duplicate filter strings? |
boolean |
supportsNestedFilters()
Does this support nested filters? |
String |
toString()
|
void |
unsetSingleFilterStringOnly()
|
void |
unsetStringsCaseSensitive()
|
void |
updateSystemFilter(ISystemFilter filter,
String newName,
String[] newStrings)
Updates a given filter in the list. |
| Methods inherited from class org.eclipse.rse.internal.references.SystemReferencedObject |
|---|
addReference, getReferenceCount, getReferencingObjects, removeAllReferences, removeReference |
| Methods inherited from class org.eclipse.rse.core.model.RSEModelObject |
|---|
compareStrings, isDirty, setDirty, setWasRestored, wasRestored |
| Methods inherited from class org.eclipse.rse.core.model.PropertySetContainer |
|---|
addPropertySet, addPropertySets, createPropertySet, createPropertySet, getPropertySet, getPropertySets, removePropertySet |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
| Methods inherited from interface org.eclipse.rse.core.references.IRSEBaseReferencedObject |
|---|
addReference, getReferenceCount, getReferencingObjects, removeAllReferences, removeReference |
| Methods inherited from interface org.eclipse.rse.core.persistance.IRSEPersistableContainer |
|---|
isDirty, setDirty, setWasRestored, wasRestored |
| Methods inherited from interface org.eclipse.rse.core.model.IPropertySetContainer |
|---|
addPropertySet, addPropertySets, createPropertySet, createPropertySet, getPropertySet, getPropertySets, removePropertySet |
| Field Detail |
protected static final String NAME_EDEFAULT
Name' attribute.
getName()protected static final String TYPE_EDEFAULT
Type' attribute.
getType()protected boolean specialCaseNoDataRestored
protected static final String DELIMITER
protected String type
protected static final boolean SUPPORTS_NESTED_FILTERS_EDEFAULT
Supports Nested Filters' attribute.
isSupportsNestedFilters(),
Constant Field Valuesprotected boolean supportsNestedFilters
protected static final boolean DELETABLE_EDEFAULT
Deletable' attribute.
isDeletable(),
Constant Field Valuesprotected boolean deletable
protected static final boolean DEFAULT_EDEFAULT
Default' attribute.
isDefault(),
Constant Field Valuesprotected boolean default_
protected static final boolean STRINGS_CASE_SENSITIVE_EDEFAULT
Strings Case Sensitive' attribute.
isStringsCaseSensitive(),
Constant Field Valuesprotected boolean stringsCaseSensitive
protected boolean stringsCaseSensitiveESet
protected static final boolean SUPPORTS_DUPLICATE_FILTER_STRINGS_EDEFAULT
Supports Duplicate Filter Strings' attribute.
isSupportsDuplicateFilterStrings(),
Constant Field Valuesprotected boolean supportsDuplicateFilterStrings
protected static final int RELEASE_EDEFAULT
Release' attribute.
getRelease(),
Constant Field Valuesprotected int release
protected static final boolean SINGLE_FILTER_STRING_ONLY_EDEFAULT
Single Filter String Only' attribute.
isSingleFilterStringOnly(),
Constant Field Valuesprotected boolean singleFilterStringOnly
Single Filter String Only' attribute.
isSingleFilterStringOnly()protected boolean singleFilterStringOnlyESet
protected static final String OWNING_PARENT_NAME_EDEFAULT
Owning Parent Name' attribute.
getOwningParentName()protected String owningParentName
Owning Parent Name' attribute.
getOwningParentName()protected static final boolean NON_RENAMABLE_EDEFAULT
Non Renamable' attribute.
isNonRenamable(),
Constant Field Valuesprotected boolean nonRenamable
Non Renamable' attribute.
isNonRenamable()protected List filters
| Constructor Detail |
protected SystemFilterPool()
| Method Detail |
public static SystemFilterPool getDefault()
public ISystemFilterPool createSystemFilterPool(String name,
boolean allowNestedFilters,
boolean isDeletable,
boolean tryToRestore)
Use this method only if you are not using a SystemFilterPoolManager, else use the createSystemFilterPool method in that class.
createSystemFilterPool in interface ISystemFilterPoolname - the name of the filter pool. Typically this is also the name
of the given folder, but this is not required. For the save policy of one file
per pool, the name of the file is derived from this.allowNestedFilters - true if filters inside this filter pool are
to allow nested filters.isDeletable - true if this filter pool is allowed to be deleted by users.tryToRestore - true to attempt a restore first, false if a pure create operation.protected static SystemFilterPool createPool()
protected void initialize(String name,
boolean allowNestedFilters,
boolean isDeletable)
protected void initialize(String name,
int savePolicy,
IRSEFilterNamingPolicy namingPolicy)
protected List internalGetFilters()
public ISystemFilterPoolManagerProvider getProvider()
getProvider in interface ISystemFilterPoolpublic void setSavePolicy(int policy)
SystemFilterConstants.
One of:
setSavePolicy in interface ISystemFilterPoolpublic void setNamingPolicy(IRSEFilterNamingPolicy namingPolicy)
setNamingPolicy in interface ISystemFilterPoolIRSEFilterNamingPolicypublic IRSEFilterNamingPolicy getNamingPolicy()
getNamingPolicy in interface ISystemFilterPoolIRSEFilterNamingPolicypublic void setSupportsNestedFilters(boolean supports)
setSupportsNestedFilters in interface ISystemFilterPoolsupports - The new value of the SupportsNestedFilters attributepublic void setSupportsNestedFiltersGen(boolean newSupportsNestedFilters)
public void setSupportsDuplicateFilterStrings(boolean supports)
setSupportsDuplicateFilterStrings in interface ISystemFilterPoolsupports - The new value of the SupportsDuplicateFilterStrings attributepublic void setSupportsDuplicateFilterStringsGen(boolean newSupportsDuplicateFilterStrings)
public void setStringsCaseSensitive(boolean supports)
setStringsCaseSensitive in interface ISystemFilterPoolsupports - The new value of the StringsCaseSensitive attributepublic void setStringsCaseSensitiveGen(boolean newStringsCaseSensitive)
public void setSystemFilterPoolManager(ISystemFilterPoolManager mgr)
setSystemFilterPoolManager in interface ISystemFilterPoolpublic ISystemFilterPoolManager getSystemFilterPoolManager()
getSystemFilterPoolManager in interface ISystemFilterPoolpublic void setSystemFilterPoolData(Object data)
setSystemFilterPoolData in interface ISystemFilterPoolpublic Object getSystemFilterPoolData()
getSystemFilterPoolData in interface ISystemFilterPoolpublic String getId()
getId in interface ISystemFilterPoolpublic String getName()
getName in interface ISystemFilterPoolISystemFilterPool.getName()public String getDescription()
getDescription in interface IRSEModelObjectgetDescription in class RSEModelObjectpublic void setName(String name)
setName in interface ISystemFilterPoolname - The new value of the Name attributepublic String getType()
getType in interface ISystemFilterPoolpublic String getTypeGen()
public boolean isDeletable()
isDeletable in interface ISystemFilterPoolpublic void setDeletable(boolean newDeletable)
setDeletable in interface ISystemFilterPoolnewDeletable - The new value of the Deletable attributepublic boolean isDefault()
isDefault in interface ISystemFilterPoolpublic void setDefault(boolean newDefault)
setDefault in interface ISystemFilterPoolnewDefault - The new value of the Default attributepublic boolean supportsNestedFilters()
supportsNestedFilters in interface ISystemFilterPoolpublic boolean supportsDuplicateFilterStrings()
supportsDuplicateFilterStrings in interface ISystemFilterPoolpublic boolean isStringsCaseSensitive()
isStringsCaseSensitive in interface ISystemFilterPoolpublic boolean areStringsCaseSensitive()
areStringsCaseSensitive in interface ISystemFilterContainer
public void cloneSystemFilterPool(ISystemFilterPool targetPool)
throws Exception
cloneSystemFilterPool in interface ISystemFilterPoolException
public ISystemFilter copySystemFilter(ISystemFilterPool targetPool,
ISystemFilter oldFilter,
String newName)
throws Exception
copySystemFilter in interface ISystemFilterPoolExceptionpublic ISystemFilter[] getSystemFilters()
getSystemFilters in interface ISystemFilterContainerpublic ISystemFilterPool getSystemFilterPool()
getSystemFilterPool in interface ISystemFilterContainer
public ISystemFilter createSystemFilter(String aliasName,
Vector filterStrings)
createSystemFilter in interface ISystemFilterContaineraliasName - The name to give the new filter. Must be unique for this pool.filterStrings - The list of String objects that represent the filter strings.public Vector getSystemFilterNames()
getSystemFilterNames in interface ISystemFilterContainerpublic Vector getSystemFiltersVector()
getSystemFiltersVector in interface ISystemFilterContainerpublic int getSystemFilterCount()
getSystemFilterCount in interface ISystemFilterContainerpublic ISystemFilter getSystemFilter(String aliasName)
getSystemFilter in interface ISystemFilterContaineraliasName - unique aliasName (case insensitive) to search on.
public boolean addSystemFilter(ISystemFilter filter)
PLEASE NOTE:
addSystemFilter in interface ISystemFilterContainerfilter - SystemFilter object to add
public void deleteSystemFilter(ISystemFilter filter)
deleteSystemFilter in interface ISystemFilterContainerfilter - SystemFilter object to remove
public void renameSystemFilter(ISystemFilter filter,
String newName)
renameSystemFilter in interface ISystemFilterContainerfilter - SystemFilter object to removenewName - New name to assign it. Assumes unique checking already done.
public void updateSystemFilter(ISystemFilter filter,
String newName,
String[] newStrings)
updateSystemFilter in interface ISystemFilterContainerfilter - SystemFilter object to updatenewName - New name to assign it. Assumes unique checking already done.newStrings - New strings to assign it. Replaces current strings.
public ISystemFilter cloneSystemFilter(ISystemFilter filter,
String aliasName)
filter - SystemFilter object to clonepublic int getSystemFilterPosition(ISystemFilter filter)
getSystemFilterPosition in interface ISystemFilterContainer
public void moveSystemFilter(int pos,
ISystemFilter filter)
moveSystemFilter in interface ISystemFilterContainerpublic Object getAdapter(Class adapterType)
getAdapter in interface IAdaptable
protected static Vector deduceFilterNames(IFolder folder,
IRSEFilterNamingPolicy namingPolicy)
public void orderSystemFilters(String[] names)
While the framework has all the code necessary to arrange filters and save/restore that arrangement, you may choose to use preferences instead of this support. In this case, call this method and pass in the saved and sorted filter name list.
Called by someone after restore.
orderSystemFilters in interface ISystemFilterPool
protected static ISystemFilterPool restore(String name,
int savePolicy,
IRSEFilterNamingPolicy namingPolicy)
throws Exception
name - name of pool to restore. Used to deduce file name for save policy of one file per pool.savePolicy - policy used to save the pool. One of the following from SystemFilterPoolManager:
namingPolicy - The names to use for file and folders when persisting to disk. Pass
null to just use the defaults.
ExceptionISystemFilterConstantsprotected void initializeFilterStrings()
protected void sortFilters()
protected static String getRootSaveFileName(ISystemFilterPool pool)
protected static String getRootSaveFileName(ISystemFilterPool pool,
String newName)
protected static String getRootSaveFileName(IRSEFilterNamingPolicy namingPolicy,
String poolName)
public String getReferenceName()
As required by the IRSEPersistableReferencedObject
interface.
getReferenceName in interface IRSEBasePersistableReferencedObjectpublic String toString()
public void setType(String newType)
setType in interface ISystemFilterPoolnewType - The new value of the Type attributepublic boolean isSupportsNestedFilters()
isSupportsNestedFilters in interface ISystemFilterPoolpublic void unsetStringsCaseSensitive()
unsetStringsCaseSensitive in interface ISystemFilterPoolpublic boolean isSetStringsCaseSensitive()
isSetStringsCaseSensitive in interface ISystemFilterPoolpublic List getFilters()
getFilters in interface ISystemFilterPoolpublic boolean isSupportsDuplicateFilterStrings()
isSupportsDuplicateFilterStrings in interface ISystemFilterPoolpublic int getRelease()
getRelease in interface ISystemFilterPoolpublic void setRelease(int newRelease)
setRelease in interface ISystemFilterPoolnewRelease - The new value of the Release attributepublic boolean isSingleFilterStringOnly()
isSingleFilterStringOnly in interface ISystemFilterPoolISystemFilterPool.isSetSingleFilterStringOnly(),
ISystemFilterPool.unsetSingleFilterStringOnly(),
ISystemFilterPool.setSingleFilterStringOnly(boolean),
org.eclipse.rse.filters.FiltersPackage#getSystemFilterPool_SingleFilterStringOnly()public boolean isSingleFilterStringOnlyGen()
public void setSingleFilterStringOnly(boolean newSingleFilterStringOnly)
setSingleFilterStringOnly in interface ISystemFilterPoolnewSingleFilterStringOnly - the new value of the 'Single Filter String Only' attribute.ISystemFilterPool.isSetSingleFilterStringOnly(),
ISystemFilterPool.unsetSingleFilterStringOnly(),
ISystemFilterPool.isSingleFilterStringOnly()public void unsetSingleFilterStringOnly()
unsetSingleFilterStringOnly in interface ISystemFilterPoolISystemFilterPool.isSetSingleFilterStringOnly(),
ISystemFilterPool.isSingleFilterStringOnly(),
ISystemFilterPool.setSingleFilterStringOnly(boolean)public boolean isSetSingleFilterStringOnly()
isSetSingleFilterStringOnly in interface ISystemFilterPoolISystemFilterPool.unsetSingleFilterStringOnly(),
ISystemFilterPool.isSingleFilterStringOnly(),
ISystemFilterPool.setSingleFilterStringOnly(boolean)public String getOwningParentName()
getOwningParentName in interface ISystemFilterPoolISystemFilterPool.setOwningParentName(String),
org.eclipse.rse.filters.FiltersPackage#getSystemFilterPool_OwningParentName()public void setOwningParentName(String newOwningParentName)
setOwningParentName in interface ISystemFilterPoolnewOwningParentName - the new value of the 'Owning Parent Name' attribute.ISystemFilterPool.getOwningParentName()public boolean isNonRenamable()
isNonRenamable in interface ISystemFilterPoolISystemFilterPool.setNonRenamable(boolean),
org.eclipse.rse.filters.FiltersPackage#getSystemFilterPool_NonRenamable()public void setNonRenamable(boolean newNonRenamable)
setNonRenamable in interface ISystemFilterPoolnewNonRenamable - the new value of the 'Non Renamable' attribute.ISystemFilterPool.isNonRenamable()public boolean commit()
org.eclipse.rse.core.persistance.IRSEPersistableContainer
commit in interface org.eclipse.rse.core.persistance.IRSEPersistableContainer
|
RSE Release 1.0 |
|||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||||