com.waveset.adapter
Class ExampleTableResourceAdapter

java.lang.Object
  extended bycom.waveset.adapter.ResourceAdapterBase
      extended bycom.waveset.adapter.JdbcResourceAdapter
          extended bycom.waveset.adapter.ExampleTableResourceAdapter
All Implemented Interfaces:
ResourceAdapter

public class ExampleTableResourceAdapter
extends JdbcResourceAdapter


Nested Class Summary
 class ExampleTableResourceAdapter.TableAccountIterator
          The implementation of the AccountIterator returned by getAccountIterator.
 
Nested classes inherited from class com.waveset.adapter.ResourceAdapterBase
ResourceAdapterBase.SimpleAccountIterator
 
Nested classes inherited from class com.waveset.adapter.ResourceAdapter
ResourceAdapter.ActionResult, ResourceAdapter.Features, ResourceAdapter.ObjectType
 
Field Summary
static java.lang.String AA_DEPARTMENT
          The name of the department the account owner is in.
static java.lang.String AA_FIRST_NAME
          The first name of the account owner.
static java.lang.String AA_GROUPS
          Optional group(s) to which this account is to be a member.
static java.lang.String AA_LAST_NAME
          The last name of the account owner.
static java.lang.String code_id
           
static java.lang.String DEFAULT_DRIVER
          The default value for the RA_DRIVER resource attribute.
static java.lang.String DEFAULT_TEMPLATE
          The default connect URL template.
protected static java.lang.String GROUPS_SCHEMA
           
protected static java.lang.String GROUPS_TABLE
           
protected static java.lang.String MEMBERS_SCHEMA
           
protected static java.lang.String MEMBERS_TABLE
           
static java.lang.String RA_GROUPS
          The optional group(s) to assign to accounts created by this adapter.
static java.lang.String RESOURCE_NAME
           
static java.lang.String RESOURCE_TYPE
           
protected static java.lang.String USERS_SCHEMA
           
protected static java.lang.String USERS_TABLE
           
 
Fields inherited from class com.waveset.adapter.JdbcResourceAdapter
RA_DATABASE, RA_DRIVER, RA_HOST, RA_PASSWORD, RA_PORT, RA_QUOTING, RA_URL_PREFIX, RA_URL_TEMPLATE, RA_USER
 
Fields inherited from class com.waveset.adapter.ResourceAdapterBase
_cache, _context, _excludedAccountsRule, _excludedAccountsRuleInited, _listAllObjectsAttrParse, _listAllObjectsAttrParseName, _listUserAttrParse, _listUserAttrParseName, _listUserGroupsAttrParse, _listUserGroupsAttrParseName, _resource, _thread, _trace, displayInfoCode, RA_BLOCKCOUNT, RA_LOGIN_ACTION, RA_LOGOFF_ACTION, RA_MULTI_VALUED_ATTRS, RA_TEST_MODE
 
Fields inherited from interface com.waveset.adapter.ResourceAdapter
CHANGE_PASSWORD_LOCATION, DISABLE, ENABLE, EXPIRE_PASSWORD, GUID, IGNORE_ATTR, NEW_ACCOUNT_ID, OP_DAYS_INACTIVE, OP_DISABLED, OP_DORMANT, OP_EXPIRED, OP_EXPIREDPWD, OP_INACTIVE, OP_LOCKED, OP_NO_PASSWORD_SET, OP_NOOWNERSHIP, OP_NOPASSWORDREQ, OP_NUMINACTIVEDAYS, OP_NUMPWDAYS, OP_PWNUMDAYS, RA_BASE_CTX, RA_DISPLAY_NAME_ATTR, RA_NEW_OBJECT_ID, RA_NEW_OBJECT_NAME, RA_OBJECT_ATTRIBUTES, RA_OBJECT_CLASS, RA_OBJECT_ID, RA_OBJECT_TYPE, RA_OP_TYPE, RA_RENAME_OP, RA_REQUESTOR, RA_SAVEAS_OP, RA_SEARCH_ATTRIBUTE_NAMES, RA_SEARCH_ATTRS_TO_GET, RA_SEARCH_CONTEXT, RA_SEARCH_FILTER, RA_SEARCH_RUN_AS_PASSWORD, RA_SEARCH_RUN_AS_USER, RA_SEARCH_SCOPE, RA_SEARCH_SCOPE_OBJECT, RA_SEARCH_SCOPE_ONE_LEVEL, RA_SEARCH_SCOPE_SUBTREE, RA_SEARCH_TIME_LIMIT, RESET_PASSWORD, SYSTEM_ATTRIBUTES, UNLOCK, WS_USER_PASSWORD
 
Constructor Summary
ExampleTableResourceAdapter()
          Create an adapater instance, without a resource.
ExampleTableResourceAdapter(Resource res, ObjectCache cache)
          Create an adapter instance for a resource.
 
Method Summary
 void addAttributeValue(java.lang.StringBuffer b, WSUser user, java.lang.String attname)
          Helper method for building the values() list for an insert statement from account attributes.
 WavesetResult authenticate(java.util.HashMap loginInfo)
          Check to see if a user account and password is valid.
 WSUser buildUser(java.lang.String id)
          Build the base user object given an id.
 WavesetResult checkCreateAccount(WSUser user)
          Check to see if an account can be created.
 WavesetResult checkDeleteAccount(WSUser user)
          Check account deletion.
 void checkSchema()
           
protected  void checkTable(java.sql.Connection con, java.lang.String name, java.lang.String schema)
           
 WavesetResult checkUpdateAccount(WSUser user)
          Check the ability to perform an account update.
 void createGroup(java.lang.String id, java.lang.String name)
           
 Resource createPrototypeResource()
          Create the prototype instance.
 java.lang.String encryptPassword(EncryptedData ed)
          Convert a password from the Waveset encrypted form, to the encryption used in the database.
 java.lang.String encryptPassword(java.lang.String clearText)
           
 WSAttributes getAccountAttributes(java.lang.String accountIdentity)
          Deprecated method, use getUser instead.
 AccountIterator getAccountIterator()
          Return an iterator that will iterate over all the accounts on a resource.
 java.lang.String getColumn(java.sql.ResultSet result, int col)
          Get a string from a result set, trimming trailing blanks.
 GenericObject getFeatures()
          Expose features supported by the Resource Adapter.
 java.util.List getGroupIds(java.sql.Connection con, java.util.List names)
          Given a list of group names, create a list of the corresponding group ids.
 java.util.List getGroupNames(java.sql.Connection con, java.util.List ids)
          Given a list of group ids, create a list of the corresponding group names.
 WSUser getUser(WSUser idUser)
          Public adapter method to get the current user information.
protected  java.lang.String getUserPassword(WSUser user)
          Get the password for this user on this resource out of the res info.
protected  void realCreate(WSUser user, WavesetResult result)
          Create a new account.
protected  void realDelete(WSUser user, WavesetResult result)
          Delete the account for real.
protected  void realUpdate(WSUser user, WavesetResult result)
          Perform the actual account update.
 void startConnection()
          Needs to be overridden by subclass if default createAccounts() implementation is used.
static Resource staticCreatePrototypeResource()
          Create the prototype instance.
 void stopConnection()
          Needs to be overridden by subclass if default createAccounts() implementation is used.
 
Methods inherited from class com.waveset.adapter.JdbcResourceAdapter
addAttributeValue, addQuoted, attributeRequiresQuotingInSQL, closeConnection, closeResult, closeStatement, decodeCommaList, dumpResult, encodeCommaList, execProcedure, execProcedure, execSql, execSql, execSql, flushResults, flushResultsQuietly, formatTemplateUrl, formatUrl, formatUrl, getConnection, getConnection, getConnection, getConnectionString, getConnectionUrl, getConnectionUrl, getEncryptedResourceAttribute, getResourceAttribute, mergeCommaLists, mergeStringLists, println, queryInt, queryString, setDebug
 
Methods inherited from class com.waveset.adapter.ResourceAdapterBase
checkForNoPasswordInSchema, checkSyntax, createAccount, createAccounts, createIdentity, createObject, deleteAccount, deleteAccount, deleteAccounts, deleteObject, disableAccount, disableAccounts, dnsEqual, dnsEqual, enableAccount, enableAccounts, executeResourceAttributeJavascriptAction, fillInResourceInfo, fillInResourceInfo, getAccountIterator, getAccountIterator, getAction, getActionNotFoundErrorMessage, getActionNotFoundMessage, getActionRunAsPassword, getActionRunAsUser, getActionTimeout, getActionType, getAdapter, getAdapter, getAdapter, getAdapterProxy, getAdapterProxy, getAllAccounts, getAttrNameFromMapName, getAttrNameFromMapName, getAttrParse, getAttrTypeFromMapName, getAttrTypeFromMapName, getAUserName, getBaseContextAttrName, getBaseContextObject, getBaseContexts, getBlockSize, getContext, getExcludedAccountsRule, getIdentity, getListAllObjectsAttrParse, getListUserAttrParse, getListUserGroupsAttrParse, getObject, getOptionalBooleanResAttrVal, getOptionalBooleanResAttrVal, getOptionalEncryptedResAttrVal, getOptionalResAttrVal, getOptionalStringResAttrVal, getRequiredResAttr, getRequiredResAttr, getRequiredResAttrVal, getRequiredResAttrVal, getRequiredResAttrVals, getRequiredUserAttributeNames, getResAttrValActionOnUser, getResAttrVals, getResource, getResourceAccounts, getResourceInfo, getResourceObjectAttrValNameAttr, getResourceObjectClassAttr, getResourceObjectTypePrefix, getSchemaMap, getUser, getWSAttrByMapName, getWSAttrByMapName, getWSAttrFromMap, handleActionResult, handleJavascriptActionResult, isAccountAttributeSecret, isExcludedAccount, isExcludedAccount, isFeatureEnabled, isSupported, isTestMode, listAllObjects, listAllObjects, listObjects, listObjects, listObjectsOfType, lookupAction, lookupAction, lookupActions, namesEqual, objectClassesMatchType, println, realDisable, realEnable, restoreResourceObjectClassAttr, run, run, runResourceAttributeJavascriptAction, scan, setCache, setContext, setDisabled, setFromResource, setResource, setResourceObjectClassAttr, setResourceOptionAttrs, startConnectionWrapper, supportsAccountActions, supportsAccountDisable, supportsActions, supportsCaseInsensitiveAccountIds, supportsContainerObjectTypes, supportsExcludedAccounts, supportsResourceAccount, supportsScanning, testConfiguration, updateAccount, updateAccounts, updateObject, updateResourceAccount, updateResourceIdentity, vmStoreBoot, vmStoreGet, vmStoreInit, vmStoreLatch, vmStorePut
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

code_id

public static final java.lang.String code_id
See Also:
Constant Field Values

USERS_TABLE

protected static final java.lang.String USERS_TABLE
See Also:
Constant Field Values

GROUPS_TABLE

protected static final java.lang.String GROUPS_TABLE
See Also:
Constant Field Values

MEMBERS_TABLE

protected static final java.lang.String MEMBERS_TABLE
See Also:
Constant Field Values

RESOURCE_NAME

public static final java.lang.String RESOURCE_NAME
See Also:
Constant Field Values

RESOURCE_TYPE

public static final java.lang.String RESOURCE_TYPE
See Also:
Constant Field Values

DEFAULT_DRIVER

public static final java.lang.String DEFAULT_DRIVER
The default value for the RA_DRIVER resource attribute. We will be using a Sybase database in this example.

See Also:
Constant Field Values

DEFAULT_TEMPLATE

public static final java.lang.String DEFAULT_TEMPLATE
The default connect URL template.

See Also:
Constant Field Values

RA_GROUPS

public static final java.lang.String RA_GROUPS
The optional group(s) to assign to accounts created by this adapter. Groups are defined as both a resource attribute and an account attribute in this example. If a group list is specified in the resource attribute, then all users will have at least the specified groups. If a group list is also specified in the account attribute, the two lists will be merged.

See Also:
Constant Field Values

AA_FIRST_NAME

public static final java.lang.String AA_FIRST_NAME
The first name of the account owner.

See Also:
Constant Field Values

AA_LAST_NAME

public static final java.lang.String AA_LAST_NAME
The last name of the account owner.

See Also:
Constant Field Values

AA_DEPARTMENT

public static final java.lang.String AA_DEPARTMENT
The name of the department the account owner is in.

See Also:
Constant Field Values

AA_GROUPS

public static final java.lang.String AA_GROUPS
Optional group(s) to which this account is to be a member. This is merged with any groups specified by the RA_GROUPS resource attribute.

See Also:
Constant Field Values

USERS_SCHEMA

protected static final java.lang.String USERS_SCHEMA
See Also:
Constant Field Values

GROUPS_SCHEMA

protected static final java.lang.String GROUPS_SCHEMA
See Also:
Constant Field Values

MEMBERS_SCHEMA

protected static final java.lang.String MEMBERS_SCHEMA
See Also:
Constant Field Values
Constructor Detail

ExampleTableResourceAdapter

public ExampleTableResourceAdapter(Resource res,
                                   ObjectCache cache)
Create an adapter instance for a resource.


ExampleTableResourceAdapter

public ExampleTableResourceAdapter()
Create an adapater instance, without a resource.

Method Detail

staticCreatePrototypeResource

public static Resource staticCreatePrototypeResource()
                                              throws WavesetException
Create the prototype instance.

Throws:
WavesetException

createPrototypeResource

public Resource createPrototypeResource()
                                 throws WavesetException
Create the prototype instance.

Specified by:
createPrototypeResource in interface ResourceAdapter
Specified by:
createPrototypeResource in class ResourceAdapterBase
Throws:
WavesetException

startConnection

public void startConnection()
                     throws WavesetException
Description copied from class: ResourceAdapterBase
Needs to be overridden by subclass if default createAccounts() implementation is used.

Overrides:
startConnection in class ResourceAdapterBase
Throws:
WavesetException

stopConnection

public void stopConnection()
                    throws WavesetException
Description copied from class: ResourceAdapterBase
Needs to be overridden by subclass if default createAccounts() implementation is used.

Overrides:
stopConnection in class ResourceAdapterBase
Throws:
WavesetException

checkCreateAccount

public WavesetResult checkCreateAccount(WSUser user)
                                 throws WavesetException
Check to see if an account can be created. We ping the server and see if the user already exists.

Specified by:
checkCreateAccount in interface ResourceAdapter
Specified by:
checkCreateAccount in class ResourceAdapterBase
Throws:
WavesetException

getUserPassword

protected java.lang.String getUserPassword(WSUser user)
Get the password for this user on this resource out of the res info.

Returns:
null if no password.

realCreate

protected void realCreate(WSUser user,
                          WavesetResult result)
                   throws WavesetException
Create a new account.

Overrides:
realCreate in class ResourceAdapterBase
Throws:
WavesetException

addAttributeValue

public void addAttributeValue(java.lang.StringBuffer b,
                              WSUser user,
                              java.lang.String attname)
Helper method for building the values() list for an insert statement from account attributes. It simply checks for null values, and converts the to null keywords in the values list.


getGroupIds

public java.util.List getGroupIds(java.sql.Connection con,
                                  java.util.List names)
                           throws WavesetException
Given a list of group names, create a list of the corresponding group ids. For simplicity, this will be done with a sequence of queries, in practice you would try to build a more complex SQL statement to do as much of this as possible in one query. If a group does not exist, leave null at that position in the returned list so we can use them as maps into each other.

Throws:
WavesetException

getGroupNames

public java.util.List getGroupNames(java.sql.Connection con,
                                    java.util.List ids)
                             throws WavesetException
Given a list of group ids, create a list of the corresponding group names.

Throws:
WavesetException

encryptPassword

public java.lang.String encryptPassword(EncryptedData ed)
Convert a password from the Waveset encrypted form, to the encryption used in the database. For this example, we will assume that Unix style "crypt" is being used. An implementation of this exists in the com.waveset.util.Crypt class.


encryptPassword

public java.lang.String encryptPassword(java.lang.String clearText)

checkUpdateAccount

public WavesetResult checkUpdateAccount(WSUser user)
                                 throws WavesetException
Check the ability to perform an account update. The account must exist.

Specified by:
checkUpdateAccount in interface ResourceAdapter
Specified by:
checkUpdateAccount in class ResourceAdapterBase
Throws:
WavesetException

realUpdate

protected void realUpdate(WSUser user,
                          WavesetResult result)
                   throws WavesetException
Perform the actual account update.

The account ID cannot be changed.

Password changes are indiciated with a non-null password stored in the ResourceInfo object for this resource.

Extended account attribute changes are indicated with non-null attribute values in the user. If an attribute value is null, it means that the current value is to be kept, not cleared. To clear a value, the attribute value in the user must be the empty string.

We currently do not have a way to flag changes in the email value, other than reading the current user object and comparing.

Changes to group membership require that we read the current group list so we can determine which memberships to add, and which to remove.

Attribute changes will be collected in a Map which will then be used to construct a SQL update statement.

Overrides:
realUpdate in class ResourceAdapterBase
Throws:
WavesetException

checkDeleteAccount

public WavesetResult checkDeleteAccount(WSUser user)
                                 throws WavesetException
Check account deletion. We don't care if the account doesn't exist, just make sure the server is accessable.

Specified by:
checkDeleteAccount in interface ResourceAdapter
Specified by:
checkDeleteAccount in class ResourceAdapterBase
Throws:
WavesetException

realDelete

protected void realDelete(WSUser user,
                          WavesetResult result)
                   throws WavesetException
Delete the account for real.

Overrides:
realDelete in class ResourceAdapterBase
Throws:
WavesetException

getColumn

public java.lang.String getColumn(java.sql.ResultSet result,
                                  int col)
                           throws java.sql.SQLException
Get a string from a result set, trimming trailing blanks.

Throws:
java.sql.SQLException

getUser

public WSUser getUser(WSUser idUser)
               throws WavesetException
Public adapter method to get the current user information.

Specified by:
getUser in interface ResourceAdapter
Overrides:
getUser in class ResourceAdapterBase
Throws:
WavesetException

buildUser

public WSUser buildUser(java.lang.String id)
Build the base user object given an id.


getAccountAttributes

public WSAttributes getAccountAttributes(java.lang.String accountIdentity)
                                  throws WavesetException
Deprecated method, use getUser instead.

Specified by:
getAccountAttributes in interface ResourceAdapter
Overrides:
getAccountAttributes in class ResourceAdapterBase
Throws:
WavesetException

getAccountIterator

public AccountIterator getAccountIterator()
                                   throws WavesetException
Return an iterator that will iterate over all the accounts on a resource.

Specified by:
getAccountIterator in interface ResourceAdapter
Overrides:
getAccountIterator in class ResourceAdapterBase
Throws:
WavesetException

authenticate

public WavesetResult authenticate(java.util.HashMap loginInfo)
                           throws WavesetException
Check to see if a user account and password is valid.

Note that because of the distinction between an "login object" and a "securuty account", you may be able to login to Sybase but still not be able to do anything within the database.

We're only checking for valid logins, we don't care if there is a security account since its possible they might want to set up a database just to handle authentication.

Specified by:
authenticate in interface ResourceAdapter
Specified by:
authenticate in class ResourceAdapterBase
Throws:
WavesetException

createGroup

public void createGroup(java.lang.String id,
                        java.lang.String name)
                 throws WavesetException
Throws:
WavesetException

checkSchema

public void checkSchema()
                 throws WavesetException
Throws:
WavesetException

checkTable

protected void checkTable(java.sql.Connection con,
                          java.lang.String name,
                          java.lang.String schema)
                   throws WavesetException
Throws:
WavesetException

getFeatures

public GenericObject getFeatures()
Expose features supported by the Resource Adapter.

Specified by:
getFeatures in interface ResourceAdapter
Overrides:
getFeatures in class ResourceAdapterBase
Returns:
GenericObject containing Features, as both key and value, which are supported by this resource adapter.
See Also:
ResourceAdapter.Features