...
To enable the registering of these repository services, some new methods have been added to the repository API. Details related to these method are described below:
| Code Block | |||||||
|---|---|---|---|---|---|---|---|
| |||||||
/** * Retrieves the current list of of IRepository Services. * * @return List of repository services * @throws KettleException in case something goes horribly wrong. */ public List<Class<? extends IRepositoryService>> getServiceInterfaces() throws KettleException; /** * Retrieves a given repository service * @param service class name * @return repository service * * @throws KettleException in case something goes horribly wrong. */ public IRepositoryService getService(Class<? extends IRepositoryService> clazz) throws KettleException; /** * Checks whether a given repository service is available or not * * @param repository service class that needs to be checked for support * @throws KettleException in case something goes horribly wrong. */ public boolean hasService(Class<? extends IRepositoryService> clazz) throws KettleException; |
...
An example of a repository service that provides user management features for the repository is shown below. An interface for this service is described as follows:
| Code Block | |||||||
|---|---|---|---|---|---|---|---|
| |||||||
public interface RepositorySecurityManager extends IRepositoryService {
public List<IUser> getUsers() throws KettleException;
public void setUsers(List<IUser> users) throws KettleException;
public ObjectId getUserID(String login) throws KettleException;
public void delUser(ObjectId id_user) throws KettleException;
public void delUser(String name) throws KettleException;
public ObjectId[] getUserIDs() throws KettleException;
public void saveUserInfo(IUser user) throws KettleException;
public void renameUser(ObjectId id_user, String newname) throws KettleException;
public IUser constructUser() throws KettleException;
public void updateUser(IUser user) throws KettleException;
public void deleteUsers(List<IUser> users) throws KettleException;
public IUser loadUserInfo(String username) throws KettleException;
public boolean isManaged() throws KettleException;
}
|
In a repository's implementation the service implementation was instantiated and and the service was registered with repository.
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
securityProvider = new KettleDatabaseRepositorySecurityProvider(this, repositoryMeta, userinfo); // We need to add services in the list in the order of dependencies registerRepositoryService(RepositorySecurityManager.class, securityProvider); |
...
A UISupport class was created for RepositorySecurityManager service that extends the AbstractRepositoryExplorerUISupport class and implements the setup method.
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
public class ManageUserUISupport extends AbstractRepositoryExplorerUISupport{
@Override
protected void setup() {
SecurityController securityController = new SecurityController();
controllerNames.add(securityController.getName());
handlers.add(securityController);
overlays.add(new RepositoryExplorerDefaultXulOverlay("org/pentaho/di/ui/repository/repositoryexplorer/xul/security-enabled-layout-overlay.xul", RepositoryExplorer.class)); //$NON-NLS-1$
}
|
...
The UISupport class must register with its corresponding service interface to get consumed correctly.
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
UISupportRegistery.getInstance().registerUISupport(RepositorySecurityManager.class, ManageUserUISupport.class); |
...