Index: lams_central/src/java/org/lamsfoundation/lams/workspace/service/WorkspaceManagementService.java =================================================================== diff -u -r2394f483084185d5e05ddc62bdc85b232786c9ff -r4450b43d9111279ae6f34ffff9e8938feefc3915 --- lams_central/src/java/org/lamsfoundation/lams/workspace/service/WorkspaceManagementService.java (.../WorkspaceManagementService.java) (revision 2394f483084185d5e05ddc62bdc85b232786c9ff) +++ lams_central/src/java/org/lamsfoundation/lams/workspace/service/WorkspaceManagementService.java (.../WorkspaceManagementService.java) (revision 4450b43d9111279ae6f34ffff9e8938feefc3915) @@ -33,17 +33,21 @@ import java.util.SortedSet; import java.util.Vector; +import org.apache.log4j.Logger; import org.lamsfoundation.lams.authoring.service.IAuthoringService; import org.lamsfoundation.lams.contentrepository.AccessDeniedException; import org.lamsfoundation.lams.contentrepository.FileException; import org.lamsfoundation.lams.contentrepository.ICredentials; import org.lamsfoundation.lams.contentrepository.ITicket; import org.lamsfoundation.lams.contentrepository.IVersionedNode; import org.lamsfoundation.lams.contentrepository.InvalidParameterException; +import org.lamsfoundation.lams.contentrepository.ItemExistsException; import org.lamsfoundation.lams.contentrepository.ItemNotFoundException; import org.lamsfoundation.lams.contentrepository.LoginException; import org.lamsfoundation.lams.contentrepository.NodeKey; +import org.lamsfoundation.lams.contentrepository.RepositoryCheckedException; import org.lamsfoundation.lams.contentrepository.WorkspaceNotFoundException; +import org.lamsfoundation.lams.contentrepository.client.ToolContentHandler; import org.lamsfoundation.lams.contentrepository.service.IRepositoryService; import org.lamsfoundation.lams.contentrepository.service.RepositoryProxy; import org.lamsfoundation.lams.contentrepository.service.SimpleCredentials; @@ -77,6 +81,8 @@ */ public class WorkspaceManagementService implements IWorkspaceManagementService{ + protected Logger log = Logger.getLogger(WorkspaceManagementService.class.getName()); + private FlashMessage flashMessage; public static final Integer AUTHORING = new Integer(1); @@ -694,36 +700,59 @@ } return flashMessage.serializeMessage(); } + + /** Set up the content repository - create the workspace and the credentials. */ + private void configureContentRepository(ICredentials cred) throws RepositoryCheckedException { + try { + repositoryService.createCredentials(cred); + repositoryService.addWorkspace(cred,IWorkspaceManagementService.REPOSITORY_WORKSPACE); + } catch (ItemExistsException ie) { + log.warn("Tried to configure repository but it " + +" appears to be already configured." + +"Workspace name "+IWorkspaceManagementService.REPOSITORY_WORKSPACE + +". Exception thrown by repository being ignored. ", ie); + } catch (RepositoryCheckedException e) { + log.error("Error occured while trying to configure repository." + +"Workspace name "+IWorkspaceManagementService.REPOSITORY_WORKSPACE + +" Unable to recover from error: "+e.getMessage(), e); + throw e; + } + } + /** * This method verifies the credentials of the Workspace Manager * and gives him the Ticket to login and access the Content Repository. * A valid ticket is needed in order to access the content from the repository. * This method would be called evertime the user(Workspace Manager) receives * a request to get the contents of the Folder or to add/update a file into * the WorkspaceFodler (Repository). + * + * If the workspace/credential hasn't been set up, then it will be set up automatically. * * @return ITicket The ticket for repostory access */ private ITicket getRepositoryLoginTicket(){ repositoryService = RepositoryProxy.getLocalRepositoryService(); ICredentials credentials = new SimpleCredentials(IWorkspaceManagementService.REPOSITORY_USERNAME, IWorkspaceManagementService.REPOSITORY_PASSWORD.toCharArray()); + ITicket ticket = null; + try{ - ITicket ticket = repositoryService.login(credentials,IWorkspaceManagementService.REPOSITORY_WORKSPACE); - return ticket; - }catch(AccessDeniedException ae){ - ae.printStackTrace(); + try { + ticket = repositoryService.login(credentials,IWorkspaceManagementService.REPOSITORY_WORKSPACE); + } catch(WorkspaceNotFoundException we){ + log.error("Content Repository workspace "+IWorkspaceManagementService.REPOSITORY_WORKSPACE + +" not configured. Attempting to configure now."); + configureContentRepository(credentials); + ticket = repositoryService.login(credentials,IWorkspaceManagementService.REPOSITORY_WORKSPACE); + } + } catch ( RepositoryCheckedException e ) { + log.error("Unable to get ticket for workspace "+IWorkspaceManagementService.REPOSITORY_WORKSPACE,e); return null; - }catch(WorkspaceNotFoundException we){ - we.printStackTrace(); - return null; - }catch (LoginException e) { - e.printStackTrace(); - return null; } + return ticket; } - /** * @see org.lamsfoundation.lams.workspace.service.IWorkspaceManagementService#createWorkspaceFolderContent(java.lang.Integer, java.lang.String, java.lang.String, java.lang.Integer, java.lang.String, java.lang.String) */