diff --git a/source/java/org/alfresco/repo/googledocs/GoogleDocsPermissionContext.java b/source/java/org/alfresco/repo/googledocs/GoogleDocsPermissionContext.java index 42c4edc344..d5e13def06 100644 --- a/source/java/org/alfresco/repo/googledocs/GoogleDocsPermissionContext.java +++ b/source/java/org/alfresco/repo/googledocs/GoogleDocsPermissionContext.java @@ -1,6 +1,21 @@ -/** - * - */ +/* +* Copyright (C) 2005-2010 Alfresco Software Limited. +* +* This file is part of Alfresco +* +* Alfresco is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* Alfresco is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with Alfresco. If not, see . +*/ package org.alfresco.repo.googledocs; /** diff --git a/source/java/org/alfresco/repo/googledocs/GoogleDocsService.java b/source/java/org/alfresco/repo/googledocs/GoogleDocsService.java index 4e59c55e11..1e96ea38fd 100755 --- a/source/java/org/alfresco/repo/googledocs/GoogleDocsService.java +++ b/source/java/org/alfresco/repo/googledocs/GoogleDocsService.java @@ -1,3 +1,21 @@ +/* +* Copyright (C) 2005-2010 Alfresco Software Limited. +* +* This file is part of Alfresco +* +* Alfresco is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* Alfresco is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with Alfresco. If not, see . +*/ package org.alfresco.repo.googledocs; import java.io.InputStream; @@ -9,6 +27,13 @@ import org.alfresco.service.cmr.repository.NodeRef; */ public interface GoogleDocsService { + /** + * Initialises the googles doc service, checking the provided credentials are correct. This need + * not be called manually since other service calls will initialise the service on demand, but it can + * be helpful to know the "health" of the service up front. + */ + void initialise() throws GoogleDocsServiceInitException; + /** * Create a google doc from a given node. The content of the node will be used * as a basis of the associated google doc. If the node has no content a new, empty google diff --git a/source/java/org/alfresco/repo/googledocs/GoogleDocsServiceImpl.java b/source/java/org/alfresco/repo/googledocs/GoogleDocsServiceImpl.java index 8b8958b1c0..8d8d44927f 100755 --- a/source/java/org/alfresco/repo/googledocs/GoogleDocsServiceImpl.java +++ b/source/java/org/alfresco/repo/googledocs/GoogleDocsServiceImpl.java @@ -208,7 +208,7 @@ public class GoogleDocsServiceImpl implements GoogleDocsService, GoogleDocsModel /** * Initialise google docs services */ - public void initialiseGoogleDocsService() + public void initialise() throws GoogleDocsServiceInitException { if (initialised == false) { @@ -219,7 +219,7 @@ public class GoogleDocsServiceImpl implements GoogleDocsService, GoogleDocsModel if (username == null ||username.length() == 0 || password == null) { - throw new AlfrescoRuntimeException("No Goolge Docs credentials found. Please set the Google Docs authentication configuration."); + throw new GoogleDocsServiceInitException("No Goolge Docs credentials found. Please set the Google Docs authentication configuration."); } try @@ -230,7 +230,7 @@ public class GoogleDocsServiceImpl implements GoogleDocsService, GoogleDocsModel } catch (AuthenticationException e) { - throw new AlfrescoRuntimeException("Unable to connect to Google Docs. Please check the Google Docs authentication configuration.", e); + throw new GoogleDocsServiceInitException("Unable to connect to Google Docs. Please check the Google Docs authentication configuration.", e); } initialised = true; @@ -250,7 +250,14 @@ public class GoogleDocsServiceImpl implements GoogleDocsService, GoogleDocsModel ParameterCheck.mandatory("nodeRef", nodeRef); // Initialise google doc services - initialiseGoogleDocsService(); + try + { + initialise(); + } + catch (GoogleDocsServiceInitException e) + { + throw new AlfrescoRuntimeException("Unable to create google doc, because service could not be initialised.", e); + } // Get property values String name = (String) nodeService.getProperty(nodeRef, ContentModel.PROP_NAME); @@ -295,7 +302,14 @@ public class GoogleDocsServiceImpl implements GoogleDocsService, GoogleDocsModel ParameterCheck.mandatory("nodeRef", nodeRef); // Initialise google doc services - initialiseGoogleDocsService(); + try + { + initialise(); + } + catch (GoogleDocsServiceInitException e) + { + throw new AlfrescoRuntimeException("Unable to create google doc, because service could not be initialised.", e); + } try { @@ -485,7 +499,14 @@ public class GoogleDocsServiceImpl implements GoogleDocsService, GoogleDocsModel ParameterCheck.mandatory("nodeRef", nodeRef); // Initialise google doc services - initialiseGoogleDocsService(); + try + { + initialise(); + } + catch (GoogleDocsServiceInitException e) + { + throw new AlfrescoRuntimeException("Unable to create google doc, because service could not be initialised.", e); + } try { diff --git a/source/java/org/alfresco/repo/googledocs/GoogleDocsServiceInitException.java b/source/java/org/alfresco/repo/googledocs/GoogleDocsServiceInitException.java new file mode 100644 index 0000000000..2ee68d2574 --- /dev/null +++ b/source/java/org/alfresco/repo/googledocs/GoogleDocsServiceInitException.java @@ -0,0 +1,54 @@ +/* +* Copyright (C) 2005-2010 Alfresco Software Limited. +* +* This file is part of Alfresco +* +* Alfresco is free software: you can redistribute it and/or modify +* it under the terms of the GNU Lesser General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* Alfresco is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with Alfresco. If not, see . +*/ +package org.alfresco.repo.googledocs; + + +/** + * Google docs service initialisation exception class. + */ +public class GoogleDocsServiceInitException extends Exception +{ + /** Serial version UUID */ + private static final long serialVersionUID = -2104024155137888545L; + + /** + * @param message error message + */ + public GoogleDocsServiceInitException(String message) + { + super(message); + } + + /** + * @param message error message + * @param cause causing exception + */ + public GoogleDocsServiceInitException(String message, Throwable cause) + { + super(message, cause); + } + + /** + * @param cause causing exception + */ + public GoogleDocsServiceInitException(Throwable cause) + { + super(cause); + } +} diff --git a/source/java/org/alfresco/repo/googledocs/GoogleDocumentServiceTest.java b/source/java/org/alfresco/repo/googledocs/GoogleDocumentServiceTest.java index 3d6c0aee33..3c8ee521b4 100755 --- a/source/java/org/alfresco/repo/googledocs/GoogleDocumentServiceTest.java +++ b/source/java/org/alfresco/repo/googledocs/GoogleDocumentServiceTest.java @@ -31,7 +31,6 @@ import junit.framework.TestCase; import org.alfresco.model.ContentModel; import org.alfresco.repo.content.MimetypeMap; import org.alfresco.repo.management.subsystems.ApplicationContextFactory; -import org.alfresco.repo.management.subsystems.ChildApplicationContextFactory; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.site.SiteServiceImpl; import org.alfresco.service.cmr.coci.CheckOutCheckInService; @@ -181,58 +180,78 @@ public class GoogleDocumentServiceTest extends TestCase implements GoogleDocsMod } } + private boolean isGoogleServiceAvailable() + { + boolean result = true; + try + { + googleDocsService.initialise(); + } + catch (GoogleDocsServiceInitException e) + { + result = false; + } + return result; + } + public void testGoogleDocUploadDownload() throws Exception { - googleDocsService.createGoogleDoc(nodeRefDoc, GoogleDocsPermissionContext.SHARE_WRITE); - - assertTrue(nodeService.hasAspect(nodeRefDoc, ASPECT_GOOGLERESOURCE)); - assertNotNull(nodeService.getProperty(nodeRefDoc, PROP_URL)); - assertNotNull(nodeService.getProperty(nodeRefDoc, PROP_RESOURCE_ID)); - assertNotNull(nodeService.getProperty(nodeRefDoc, PROP_RESOURCE_TYPE)); - - System.out.println("Google doc URL: " + nodeService.getProperty(nodeRefDoc, PROP_URL)); - System.out.println("Google doc type: " + nodeService.getProperty(nodeRefDoc, PROP_RESOURCE_TYPE)); - System.out.println("Google doc id: " + nodeService.getProperty(nodeRefDoc, PROP_RESOURCE_ID)); - String downloadFile = downloadFile(googleDocsService.getGoogleDocContent(nodeRefDoc), ".doc"); - System.out.println("Download file: " + downloadFile); - -// googleDocsService.upload(nodeRefSpread, GoogleDocsPermissionContext.SHARE_WRITE); -// -// assertTrue(nodeService.hasAspect(nodeRefSpread, ASPECT_GOOGLERESOURCE)); -// assertNotNull(nodeService.getProperty(nodeRefSpread, PROP_URL)); -// assertNotNull(nodeService.getProperty(nodeRefSpread, PROP_RESOURCE_ID)); -// assertNotNull(nodeService.getProperty(nodeRefSpread, PROP_RESOURCE_TYPE)); -// -// System.out.println("Google doc URL: " + nodeService.getProperty(nodeRefSpread, PROP_URL)); -// System.out.println("Google doc type: " + nodeService.getProperty(nodeRefSpread, PROP_RESOURCE_TYPE)); -// System.out.println("Google doc id: " + nodeService.getProperty(nodeRefSpread, PROP_RESOURCE_ID)); -// downloadFile = downloadFile(googleDocsService.download(nodeRefSpread), ".xls"); -// System.out.println("Download file: " + downloadFile); + if (isGoogleServiceAvailable() == true) + { + googleDocsService.createGoogleDoc(nodeRefDoc, GoogleDocsPermissionContext.SHARE_WRITE); + + assertTrue(nodeService.hasAspect(nodeRefDoc, ASPECT_GOOGLERESOURCE)); + assertNotNull(nodeService.getProperty(nodeRefDoc, PROP_URL)); + assertNotNull(nodeService.getProperty(nodeRefDoc, PROP_RESOURCE_ID)); + assertNotNull(nodeService.getProperty(nodeRefDoc, PROP_RESOURCE_TYPE)); + + System.out.println("Google doc URL: " + nodeService.getProperty(nodeRefDoc, PROP_URL)); + System.out.println("Google doc type: " + nodeService.getProperty(nodeRefDoc, PROP_RESOURCE_TYPE)); + System.out.println("Google doc id: " + nodeService.getProperty(nodeRefDoc, PROP_RESOURCE_ID)); + String downloadFile = downloadFile(googleDocsService.getGoogleDocContent(nodeRefDoc), ".doc"); + System.out.println("Download file: " + downloadFile); + + // googleDocsService.upload(nodeRefSpread, GoogleDocsPermissionContext.SHARE_WRITE); + // + // assertTrue(nodeService.hasAspect(nodeRefSpread, ASPECT_GOOGLERESOURCE)); + // assertNotNull(nodeService.getProperty(nodeRefSpread, PROP_URL)); + // assertNotNull(nodeService.getProperty(nodeRefSpread, PROP_RESOURCE_ID)); + // assertNotNull(nodeService.getProperty(nodeRefSpread, PROP_RESOURCE_TYPE)); + // + // System.out.println("Google doc URL: " + nodeService.getProperty(nodeRefSpread, PROP_URL)); + // System.out.println("Google doc type: " + nodeService.getProperty(nodeRefSpread, PROP_RESOURCE_TYPE)); + // System.out.println("Google doc id: " + nodeService.getProperty(nodeRefSpread, PROP_RESOURCE_ID)); + // downloadFile = downloadFile(googleDocsService.download(nodeRefSpread), ".xls"); + // System.out.println("Download file: " + downloadFile); + } } public void testCheckOutCheckIn() throws Exception { - ContentReader contentReader = contentService.getReader(nodeRef2, ContentModel.PROP_CONTENT); - assertNull(contentReader); - - // Check out the empty google document - NodeRef workingCopy = checkOutCheckInService.checkout(nodeRef2); - - assertTrue(nodeService.hasAspect(workingCopy, ASPECT_GOOGLERESOURCE)); - assertNotNull(nodeService.getProperty(workingCopy, PROP_URL)); - assertNotNull(nodeService.getProperty(workingCopy, PROP_RESOURCE_ID)); - assertNotNull(nodeService.getProperty(workingCopy, PROP_RESOURCE_TYPE)); - - System.out.println("Google doc URL: " + nodeService.getProperty(workingCopy, PROP_URL)); - System.out.println("Google doc type: " + nodeService.getProperty(workingCopy, PROP_RESOURCE_TYPE)); - System.out.println("Google doc id: " + nodeService.getProperty(workingCopy, PROP_RESOURCE_ID)); - - checkOutCheckInService.checkin(workingCopy, null); - - assertFalse(nodeService.hasAspect(nodeRefDoc, ASPECT_GOOGLERESOURCE)); - contentReader = contentService.getReader(nodeRef2, ContentModel.PROP_CONTENT); - assertNotNull(contentReader); + if (isGoogleServiceAvailable() == true) + { + ContentReader contentReader = contentService.getReader(nodeRef2, ContentModel.PROP_CONTENT); + assertNull(contentReader); + + // Check out the empty google document + NodeRef workingCopy = checkOutCheckInService.checkout(nodeRef2); + + assertTrue(nodeService.hasAspect(workingCopy, ASPECT_GOOGLERESOURCE)); + assertNotNull(nodeService.getProperty(workingCopy, PROP_URL)); + assertNotNull(nodeService.getProperty(workingCopy, PROP_RESOURCE_ID)); + assertNotNull(nodeService.getProperty(workingCopy, PROP_RESOURCE_TYPE)); + + System.out.println("Google doc URL: " + nodeService.getProperty(workingCopy, PROP_URL)); + System.out.println("Google doc type: " + nodeService.getProperty(workingCopy, PROP_RESOURCE_TYPE)); + System.out.println("Google doc id: " + nodeService.getProperty(workingCopy, PROP_RESOURCE_ID)); + + checkOutCheckInService.checkin(workingCopy, null); + + assertFalse(nodeService.hasAspect(nodeRefDoc, ASPECT_GOOGLERESOURCE)); + contentReader = contentService.getReader(nodeRef2, ContentModel.PROP_CONTENT); + assertNotNull(contentReader); + } } /**