mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-06-30 18:15:39 +00:00
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@19870 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
1870 lines
78 KiB
Java
1870 lines
78 KiB
Java
/*
|
|
* Copyright (C) 2009-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 <http://www.gnu.org/licenses/>.
|
|
*/
|
|
package org.alfresco.repo.transfer;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.HashSet;
|
|
import java.util.List;
|
|
import java.util.Locale;
|
|
import java.util.Queue;
|
|
import java.util.Set;
|
|
|
|
import javax.transaction.UserTransaction;
|
|
import javax.xml.XMLConstants;
|
|
import javax.xml.transform.Source;
|
|
import javax.xml.transform.stream.StreamSource;
|
|
import javax.xml.validation.Schema;
|
|
import javax.xml.validation.SchemaFactory;
|
|
import javax.xml.validation.Validator;
|
|
|
|
import org.alfresco.model.ContentModel;
|
|
import org.alfresco.repo.security.authentication.AuthenticationComponent;
|
|
import org.alfresco.repo.transfer.manifest.TransferManifestNodeFactory;
|
|
import org.alfresco.service.cmr.action.ActionService;
|
|
import org.alfresco.service.cmr.repository.ChildAssociationRef;
|
|
import org.alfresco.service.cmr.repository.ContentReader;
|
|
import org.alfresco.service.cmr.repository.ContentService;
|
|
import org.alfresco.service.cmr.repository.ContentWriter;
|
|
import org.alfresco.service.cmr.repository.NodeRef;
|
|
import org.alfresco.service.cmr.repository.NodeService;
|
|
import org.alfresco.service.cmr.repository.Path;
|
|
import org.alfresco.service.cmr.repository.StoreRef;
|
|
import org.alfresco.service.cmr.search.ResultSet;
|
|
import org.alfresco.service.cmr.search.SearchService;
|
|
import org.alfresco.service.cmr.security.MutableAuthenticationService;
|
|
import org.alfresco.service.cmr.transfer.TransferCallback;
|
|
import org.alfresco.service.cmr.transfer.TransferDefinition;
|
|
import org.alfresco.service.cmr.transfer.TransferEvent;
|
|
import org.alfresco.service.cmr.transfer.TransferEventBegin;
|
|
import org.alfresco.service.cmr.transfer.TransferException;
|
|
import org.alfresco.service.cmr.transfer.TransferReceiver;
|
|
import org.alfresco.service.cmr.transfer.TransferService;
|
|
import org.alfresco.service.cmr.transfer.TransferTarget;
|
|
import org.alfresco.service.namespace.NamespaceService;
|
|
import org.alfresco.service.namespace.QName;
|
|
import org.alfresco.service.transaction.TransactionService;
|
|
import org.alfresco.util.BaseAlfrescoSpringTest;
|
|
import org.alfresco.util.GUID;
|
|
import org.alfresco.util.Pair;
|
|
import org.springframework.transaction.TransactionDefinition;
|
|
import org.springframework.transaction.support.DefaultTransactionDefinition;
|
|
import org.springframework.util.ResourceUtils;
|
|
|
|
/**
|
|
* Unit test for TransferServiceImpl
|
|
*
|
|
* Contains some unit tests for the transfer definitions.
|
|
*
|
|
* @author Mark Rogers
|
|
*/
|
|
@SuppressWarnings("deprecation")
|
|
public class TransferServiceImplTest extends BaseAlfrescoSpringTest
|
|
{
|
|
private TransferService transferService;
|
|
private ContentService contentService;
|
|
private TransferServiceImpl transferServiceImpl;
|
|
private SearchService searchService;
|
|
private TransactionService transactionService;
|
|
private TransferReceiver receiver;
|
|
private TransferManifestNodeFactory transferManifestNodeFactory;
|
|
|
|
String COMPANY_HOME_XPATH_QUERY = "/{http://www.alfresco.org/model/application/1.0}company_home";
|
|
String GUEST_HOME_XPATH_QUERY = "/{http://www.alfresco.org/model/application/1.0}company_home/{http://www.alfresco.org/model/application/1.0}guest_home";
|
|
|
|
|
|
|
|
@Override
|
|
public void runBare() throws Throwable
|
|
{
|
|
preventTransaction();
|
|
super.runBare();
|
|
}
|
|
|
|
/**
|
|
* Called during the transaction setup
|
|
*/
|
|
protected void onSetUp() throws Exception
|
|
{
|
|
super.onSetUp();
|
|
|
|
// Get the required services
|
|
this.transferService = (TransferService)this.applicationContext.getBean("TransferService");
|
|
this.contentService = (ContentService)this.applicationContext.getBean("ContentService");
|
|
this.transferServiceImpl = (TransferServiceImpl)this.applicationContext.getBean("transferService");
|
|
this.searchService = (SearchService)this.applicationContext.getBean("SearchService");
|
|
this.transactionService = (TransactionService)this.applicationContext.getBean("TransactionService");
|
|
this.nodeService = (NodeService) this.applicationContext.getBean("nodeService");
|
|
this.contentService = (ContentService) this.applicationContext.getBean("contentService");
|
|
this.authenticationService = (MutableAuthenticationService) this.applicationContext.getBean("authenticationService");
|
|
this.actionService = (ActionService)this.applicationContext.getBean("actionService");
|
|
this.receiver = (TransferReceiver)this.applicationContext.getBean("transferReceiver");
|
|
this.transferManifestNodeFactory = (TransferManifestNodeFactory)this.applicationContext.getBean("transferManifestNodeFactory");
|
|
this.authenticationComponent = (AuthenticationComponent) this.applicationContext.getBean("authenticationComponent");
|
|
authenticationComponent.setSystemUserAsCurrentUser();
|
|
setTransactionDefinition(new DefaultTransactionDefinition(TransactionDefinition.PROPAGATION_REQUIRES_NEW));
|
|
assertNotNull("receiver is null", this.receiver);
|
|
|
|
}
|
|
|
|
/**
|
|
* Test create target.
|
|
*
|
|
* @throws Exception
|
|
*/
|
|
public void testCreateTarget() throws Exception
|
|
{
|
|
String name = "name";
|
|
String title = "title";
|
|
String description = "description";
|
|
String endpointProtocol = "http";
|
|
String endpointHost = "localhost";
|
|
int endpointPort = 8080;
|
|
String endpointPath = "rhubarb";
|
|
String username = "admin";
|
|
char[] password = "password".toCharArray();
|
|
|
|
|
|
startNewTransaction();
|
|
try
|
|
{
|
|
/**
|
|
* Now go ahead and create our first transfer target
|
|
*/
|
|
TransferTarget ret = transferService.createAndSaveTransferTarget(name, title, description, endpointProtocol, endpointHost, endpointPort, endpointPath, username, password);
|
|
assertNotNull("return value is null", ret);
|
|
assertNotNull("node ref is null", ret.getNodeRef());
|
|
|
|
//titled aspect
|
|
assertEquals("name not equal", ret.getName(), name);
|
|
assertEquals("title not equal", ret.getTitle(), title);
|
|
assertEquals("description not equal", ret.getDescription(), description);
|
|
|
|
// endpoint
|
|
assertEquals("endpointProtocol not equal", ret.getEndpointProtocol(), endpointProtocol);
|
|
assertEquals("endpointHost not equal", ret.getEndpointHost(), endpointHost);
|
|
assertEquals("endpointPort not equal", ret.getEndpointPort(), endpointPort);
|
|
assertEquals("endpointPath not equal", ret.getEndpointPath(), endpointPath);
|
|
|
|
// authentication
|
|
assertEquals("username not equal", ret.getUsername(), username);
|
|
char[] password2 = ret.getPassword();
|
|
|
|
assertEquals(password.length, password2.length);
|
|
|
|
for(int i = 0; i < password.length; i++)
|
|
{
|
|
if(password[i] != password2[i])
|
|
{
|
|
fail("password not equal:" + new String(password) + new String(password2));
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Negative test - try to create a transfer target with a name that's already used.
|
|
*/
|
|
transferService.createAndSaveTransferTarget(name, title, description, endpointProtocol, endpointHost, endpointPort, endpointPath, username, password);
|
|
fail("duplicate name not detected");
|
|
}
|
|
catch (TransferException e)
|
|
{
|
|
// expect to go here
|
|
}
|
|
finally
|
|
{
|
|
endTransaction();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Test create target via in memory data object.
|
|
*
|
|
* @throws Exception
|
|
*/
|
|
public void testCreateTargetSyntax2() throws Exception
|
|
{
|
|
String name = "nameSyntax2";
|
|
String title = "title";
|
|
String description = "description";
|
|
String endpointProtocol = "http";
|
|
String endpointHost = "localhost";
|
|
int endpointPort = 8080;
|
|
String endpointPath = "rhubarb";
|
|
String username = "admin";
|
|
char[] password = "password".toCharArray();
|
|
|
|
|
|
startNewTransaction();
|
|
try
|
|
{
|
|
/**
|
|
* Now go ahead and create our first transfer target
|
|
*/
|
|
TransferTarget newValue = transferService.createTransferTarget(name);
|
|
newValue.setDescription(description);
|
|
newValue.setEndpointHost(endpointHost);
|
|
newValue.setEndpointPort(endpointPort);
|
|
newValue.setEndpointPath(endpointPath);
|
|
newValue.setEndpointProtocol(endpointProtocol);
|
|
newValue.setPassword(password);
|
|
newValue.setTitle(title);
|
|
newValue.setUsername(username);
|
|
|
|
TransferTarget ret = transferService.saveTransferTarget(newValue);
|
|
|
|
assertNotNull("return value is null", ret);
|
|
assertNotNull("node ref is null", ret.getNodeRef());
|
|
|
|
//titled aspect
|
|
assertEquals("name not equal", ret.getName(), name);
|
|
assertEquals("title not equal", ret.getTitle(), title);
|
|
assertEquals("description not equal", ret.getDescription(), description);
|
|
|
|
// endpoint
|
|
assertEquals("endpointProtocol not equal", ret.getEndpointProtocol(), endpointProtocol);
|
|
assertEquals("endpointHost not equal", ret.getEndpointHost(), endpointHost);
|
|
assertEquals("endpointPort not equal", ret.getEndpointPort(), endpointPort);
|
|
assertEquals("endpointPath not equal", ret.getEndpointPath(), endpointPath);
|
|
|
|
// authentication
|
|
assertEquals("username not equal", ret.getUsername(), username);
|
|
char[] password2 = ret.getPassword();
|
|
|
|
assertEquals(password.length, password2.length);
|
|
|
|
for(int i = 0; i < password.length; i++)
|
|
{
|
|
if(password[i] != password2[i])
|
|
{
|
|
fail("password not equal:" + new String(password) + new String(password2));
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Negative test - try to create a transfer target with a name that's already used.
|
|
*/
|
|
transferService.createAndSaveTransferTarget(name, title, description, endpointProtocol, endpointHost, endpointPort, endpointPath, username, password);
|
|
fail("duplicate name not detected");
|
|
}
|
|
catch (TransferException e)
|
|
{
|
|
// expect to go here
|
|
}
|
|
finally
|
|
{
|
|
endTransaction();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Test of Get TransferTargets
|
|
*
|
|
* @throws Exception
|
|
*/
|
|
public void testGetTransferTargets() throws Exception
|
|
{
|
|
String nameA = "nameA";
|
|
String nameB = "nameB";
|
|
String title = "title";
|
|
String description = "description";
|
|
String endpointProtocol = "http";
|
|
String endpointHost = "localhost";
|
|
int endpointPort = 8080;
|
|
String endpointPath = "rhubarb";
|
|
String username = "admin";
|
|
char[] password = "password".toCharArray();
|
|
|
|
startNewTransaction();
|
|
try
|
|
{
|
|
/**
|
|
* Now go ahead and create our first transfer target
|
|
*/
|
|
TransferTarget targetA = transferService.createAndSaveTransferTarget(nameA, title, description, endpointProtocol, endpointHost, endpointPort, endpointPath, username, password);
|
|
TransferTarget targetB = transferService.createAndSaveTransferTarget(nameB, title, description, endpointProtocol, endpointHost, endpointPort, endpointPath, username, password);
|
|
|
|
Set<TransferTarget> targets = transferService.getTransferTargets();
|
|
assertTrue("targets is empty", targets.size() > 0);
|
|
assertTrue("didn't find target A", targets.contains(targetA) );
|
|
assertTrue("didn't find target B", targets.contains(targetB));
|
|
for(TransferTarget target : targets)
|
|
{
|
|
System.out.println("found target: " + target.getName());
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
endTransaction();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Test of Get All Trabsfer Targets By Group
|
|
*/
|
|
//TODO Test not complete - can't yet put targets in different groups
|
|
public void testGetAllTransferTargetsByGroup() throws Exception
|
|
{
|
|
String getMe = "getMe";
|
|
String title = "title";
|
|
String description = "description";
|
|
String endpointProtocol = "http";
|
|
String endpointHost = "localhost";
|
|
int endpointPort = 8080;
|
|
String endpointPath = "rhubarb";
|
|
String username = "admin";
|
|
char[] password = "password".toCharArray();
|
|
|
|
startNewTransaction();
|
|
try
|
|
{
|
|
/**
|
|
* Now go ahead and create our first transfer target
|
|
*/
|
|
transferService.createAndSaveTransferTarget(getMe, title, description, endpointProtocol, endpointHost, endpointPort, endpointPath, username, password);
|
|
|
|
Set<TransferTarget> targets = transferService.getTransferTargets("Default Group");
|
|
assertTrue("targets is empty", targets.size() > 0);
|
|
/**
|
|
* Negative test - group does not exist
|
|
*/
|
|
targets = transferService.getTransferTargets("Rubbish");
|
|
assertTrue("targets is empty", targets.size() > 0);
|
|
fail("group does not exist");
|
|
}
|
|
catch (TransferException te)
|
|
{
|
|
// expect to go here
|
|
}
|
|
finally
|
|
{
|
|
endTransaction();
|
|
}
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
public void testUpdateTransferTarget() throws Exception
|
|
{
|
|
startNewTransaction();
|
|
try
|
|
{
|
|
String updateMe = "updateMe";
|
|
String title = "title";
|
|
String description = "description";
|
|
String endpointProtocol = "http";
|
|
String endpointHost = "localhost";
|
|
int endpointPort = 8080;
|
|
String endpointPath = "rhubarb";
|
|
String username = "admin";
|
|
char[] password = "password".toCharArray();
|
|
|
|
|
|
/**
|
|
* Create our transfer target
|
|
*/
|
|
TransferTarget target = transferService.createAndSaveTransferTarget(updateMe, title, description, endpointProtocol, endpointHost, endpointPort, endpointPath, username, password);
|
|
|
|
/*
|
|
* Now update with exactly the same values.
|
|
*/
|
|
TransferTarget update1 = transferService.saveTransferTarget(target);
|
|
|
|
assertNotNull("return value is null", update1);
|
|
assertNotNull("node ref is null", update1.getNodeRef());
|
|
|
|
//titled aspect
|
|
assertEquals("name not equal", update1.getName(), updateMe);
|
|
assertEquals("title not equal", update1.getTitle(), title);
|
|
assertEquals("description not equal", update1.getDescription(), description);
|
|
|
|
// endpoint
|
|
assertEquals("endpointProtocol not equal", update1.getEndpointProtocol(), endpointProtocol);
|
|
assertEquals("endpointHost not equal", update1.getEndpointHost(), endpointHost);
|
|
assertEquals("endpointPort not equal", update1.getEndpointPort(), endpointPort);
|
|
assertEquals("endpointPath not equal", update1.getEndpointPath(), endpointPath);
|
|
|
|
// authentication
|
|
assertEquals("username not equal", update1.getUsername(), username);
|
|
char[] pass = update1.getPassword();
|
|
|
|
assertEquals(password.length, pass.length);
|
|
|
|
for(int i = 0; i < password.length; i++)
|
|
{
|
|
if(password[i] != pass[i])
|
|
{
|
|
fail("password not equal:" + new String(password) + new String(pass));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Now update with different values
|
|
*/
|
|
String title2 = "Two";
|
|
String description2 = "descriptionTwo";
|
|
String endpointProtocol2 = "https";
|
|
String endpointHost2 = "1.0.0.127";
|
|
int endpointPort2 = 4040;
|
|
String endpointPath2 = "custard";
|
|
String username2 = "admin_two";
|
|
char[] password2 = "two".toCharArray();
|
|
|
|
target.setDescription(description2);
|
|
target.setTitle(title2);
|
|
target.setEndpointHost(endpointHost2);
|
|
target.setEndpointPath(endpointPath2);
|
|
target.setEndpointPort(endpointPort2);
|
|
target.setEndpointProtocol(endpointProtocol2);
|
|
target.setPassword(password2);
|
|
target.setUsername(username2);
|
|
|
|
TransferTarget update2 = transferService.saveTransferTarget(target);
|
|
assertNotNull("return value is null", update2);
|
|
assertNotNull("node ref is null", update2.getNodeRef());
|
|
|
|
//titled aspect
|
|
assertEquals("name not equal", update2.getName(), updateMe);
|
|
assertEquals("title not equal", update2.getTitle(), title2);
|
|
assertEquals("description not equal", update2.getDescription(), description2);
|
|
|
|
// endpoint
|
|
assertEquals("endpointProtocol not equal", update2.getEndpointProtocol(), endpointProtocol2);
|
|
assertEquals("endpointHost not equal", update2.getEndpointHost(), endpointHost2);
|
|
assertEquals("endpointPort not equal", update2.getEndpointPort(), endpointPort2);
|
|
assertEquals("endpointPath not equal", update2.getEndpointPath(), endpointPath2);
|
|
|
|
// authentication
|
|
assertEquals("username not equal", update2.getUsername(), username2);
|
|
pass = update2.getPassword();
|
|
|
|
assertEquals(password2.length, pass.length);
|
|
|
|
for(int i = 0; i < pass.length; i++)
|
|
{
|
|
if(pass[i] != password2[i])
|
|
{
|
|
fail("password not equal:" + new String(pass) + new String(password2));
|
|
}
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
endTransaction();
|
|
}
|
|
}
|
|
|
|
/**
|
|
*
|
|
*/
|
|
public void testDeleteTransferTarget() throws Exception
|
|
{
|
|
startNewTransaction();
|
|
try
|
|
{
|
|
String deleteMe = "deleteMe";
|
|
String title = "title";
|
|
String description = "description";
|
|
String endpointProtocol = "http";
|
|
String endpointHost = "localhost";
|
|
int endpointPort = 8080;
|
|
String endpointPath = "rhubarb";
|
|
String username = "admin";
|
|
char[] password = "password".toCharArray();
|
|
|
|
/**
|
|
* Now go ahead and create our first transfer target
|
|
*/
|
|
transferService.createAndSaveTransferTarget(deleteMe, title, description, endpointProtocol, endpointHost, endpointPort, endpointPath, username, password);
|
|
|
|
transferService.deleteTransferTarget(deleteMe);
|
|
|
|
/**
|
|
* Negative test - try to delete the transfer target we deleted above.
|
|
*/
|
|
try
|
|
{
|
|
transferService.deleteTransferTarget(deleteMe);
|
|
fail("duplicate name not detected");
|
|
}
|
|
catch (TransferException e)
|
|
{
|
|
// expect to go here
|
|
}
|
|
|
|
/**
|
|
* Negative test - try to delete a transfer target that has never existed
|
|
*/
|
|
try
|
|
{
|
|
transferService.deleteTransferTarget("rubbish");
|
|
|
|
fail("rubbish deleted");
|
|
}
|
|
catch (TransferException e)
|
|
{
|
|
// expect to go here
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
endTransaction();
|
|
}
|
|
}
|
|
|
|
public void testEnableTransferTarget() throws Exception
|
|
{
|
|
startNewTransaction();
|
|
try
|
|
{
|
|
String targetName = "enableMe";
|
|
|
|
/**
|
|
* Now go ahead and create our first transfer target
|
|
*/
|
|
TransferTarget enableMe = createTransferTarget(targetName);
|
|
try
|
|
{
|
|
/**
|
|
* Check a new target is enabled
|
|
*/
|
|
TransferTarget target = transferService.getTransferTarget(targetName);
|
|
assertTrue("new target is not enabled", enableMe.isEnabled());
|
|
|
|
/**
|
|
* Diasble the target
|
|
*/
|
|
transferService.enableTransferTarget(targetName, false);
|
|
target = transferService.getTransferTarget(targetName);
|
|
assertFalse("target is not disabled", target.isEnabled());
|
|
|
|
/**
|
|
* Now re-enable the target
|
|
*/
|
|
transferService.enableTransferTarget(targetName, true);
|
|
target = transferService.getTransferTarget(targetName);
|
|
assertTrue("re-enabled target is not enabled", target.isEnabled());
|
|
}
|
|
finally
|
|
{
|
|
transferService.deleteTransferTarget(targetName);
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
endTransaction();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Test the transfer method by sending one node.
|
|
*
|
|
* This is a unit test so it does some shenanigans to send to the same instance of alfresco.
|
|
*/
|
|
public void testTransferOneNode() throws Exception
|
|
{
|
|
setDefaultRollback(false);
|
|
|
|
String CONTENT_TITLE = "ContentTitle";
|
|
String CONTENT_TITLE_UPDATED = "ContentTitleUpdated";
|
|
Locale CONTENT_LOCALE = Locale.GERMAN;
|
|
String CONTENT_STRING = "Hello";
|
|
|
|
/**
|
|
* For unit test
|
|
* - replace the HTTP transport with the in-process transport
|
|
* - replace the node factory with one that will map node refs, paths etc.
|
|
*/
|
|
TransferTransmitter transmitter = new UnitTestInProcessTransmitterImpl(receiver, contentService, transactionService);
|
|
transferServiceImpl.setTransmitter(transmitter);
|
|
UnitTestTransferManifestNodeFactory testNodeFactory = new UnitTestTransferManifestNodeFactory(this.transferManifestNodeFactory);
|
|
transferServiceImpl.setTransferManifestNodeFactory(testNodeFactory);
|
|
List<Pair<Path, Path>> pathMap = testNodeFactory.getPathMap();
|
|
// Map company_home/guest_home to company_home so tranferred nodes and moved "up" one level.
|
|
pathMap.add(new Pair<Path, Path>(PathHelper.stringToPath(GUEST_HOME_XPATH_QUERY), PathHelper.stringToPath(COMPANY_HOME_XPATH_QUERY)));
|
|
|
|
/**
|
|
* Now go ahead and create our first transfer target
|
|
*/
|
|
String targetName = "testTransferOneNode";
|
|
TransferTarget transferMe;
|
|
NodeRef contentNodeRef;
|
|
NodeRef destNodeRef;
|
|
|
|
startNewTransaction();
|
|
try
|
|
{
|
|
/**
|
|
* Get guest home
|
|
*/
|
|
String guestHomeQuery = "/app:company_home/app:guest_home";
|
|
ResultSet guestHomeResult = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_XPATH, guestHomeQuery);
|
|
assertEquals("", 1, guestHomeResult.length());
|
|
NodeRef guestHome = guestHomeResult.getNodeRef(0);
|
|
|
|
/**
|
|
* Create a test node that we will read and write
|
|
*/
|
|
|
|
String name = GUID.generate();
|
|
ChildAssociationRef child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, QName.createQName(name), ContentModel.TYPE_CONTENT);
|
|
contentNodeRef = child.getChildRef();
|
|
nodeService.setProperty(contentNodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE);
|
|
nodeService.setProperty(contentNodeRef, ContentModel.PROP_NAME, name);
|
|
|
|
ContentWriter writer = contentService.getWriter(contentNodeRef, ContentModel.PROP_CONTENT, true);
|
|
writer.setLocale(CONTENT_LOCALE);
|
|
writer.putContent(CONTENT_STRING);
|
|
|
|
if(!transferService.targetExists(targetName))
|
|
{
|
|
transferMe = createTransferTarget(targetName);
|
|
}
|
|
else
|
|
{
|
|
transferMe = transferService.getTransferTarget(targetName);
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
endTransaction();
|
|
}
|
|
|
|
startNewTransaction();
|
|
try
|
|
{
|
|
/**
|
|
* Transfer our transfer target node which has no content
|
|
*/
|
|
{
|
|
TransferDefinition definition = new TransferDefinition();
|
|
Set<NodeRef>nodes = new HashSet<NodeRef>();
|
|
nodes.add(contentNodeRef);
|
|
definition.setNodes(nodes);
|
|
transferService.transfer(targetName, definition);
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
endTransaction();
|
|
}
|
|
|
|
startNewTransaction();
|
|
try
|
|
{
|
|
// Now validate that the target node exists and has similar properties to the source
|
|
destNodeRef = testNodeFactory.getMappedNodeRef(contentNodeRef);
|
|
assertFalse("unit test stuffed up - comparing with self", destNodeRef.equals(transferMe.getNodeRef()));
|
|
assertTrue("dest node ref does not exist", nodeService.exists(destNodeRef));
|
|
assertEquals("title is wrong", (String)nodeService.getProperty(destNodeRef, ContentModel.PROP_TITLE), CONTENT_TITLE);
|
|
assertEquals("type is wrong", nodeService.getType(contentNodeRef), nodeService.getType(destNodeRef));
|
|
|
|
nodeService.setProperty(contentNodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE_UPDATED);
|
|
}
|
|
finally
|
|
{
|
|
endTransaction();
|
|
}
|
|
|
|
startNewTransaction();
|
|
try
|
|
{
|
|
/**
|
|
* Transfer our node again - so this is an update
|
|
*/
|
|
{
|
|
TransferDefinition definition = new TransferDefinition();
|
|
Set<NodeRef>nodes = new HashSet<NodeRef>();
|
|
nodes.add(contentNodeRef);
|
|
definition.setNodes(nodes);
|
|
transferService.transfer(targetName, definition);
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
endTransaction();
|
|
}
|
|
|
|
startNewTransaction();
|
|
try
|
|
{
|
|
// Now validate that the target node exists and has similar properties to the source
|
|
assertFalse("unit test stuffed up - comparing with self", destNodeRef.equals(transferMe.getNodeRef()));
|
|
assertTrue("dest node ref does not exist", nodeService.exists(destNodeRef));
|
|
assertEquals("title is wrong", (String)nodeService.getProperty(destNodeRef, ContentModel.PROP_TITLE), CONTENT_TITLE_UPDATED);
|
|
assertEquals("type is wrong", nodeService.getType(contentNodeRef), nodeService.getType(destNodeRef));
|
|
}
|
|
finally
|
|
{
|
|
endTransaction();
|
|
}
|
|
|
|
/**
|
|
* Negative test transfer nothing
|
|
*/
|
|
try
|
|
{
|
|
TransferDefinition definition = new TransferDefinition();
|
|
transferService.transfer(targetName, definition);
|
|
fail("exception not thrown");
|
|
}
|
|
catch(TransferException te)
|
|
{
|
|
// expect to go here
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Test the transfer method by sending a graph of nodes.
|
|
*
|
|
* This is a unit test so it does some shenanigans to send to he same instance of alfresco.
|
|
*/
|
|
public void testManyNodes() throws Exception
|
|
{
|
|
setDefaultRollback(false);
|
|
|
|
String CONTENT_TITLE = "ContentTitle";
|
|
String CONTENT_TITLE_UPDATED = "ContentTitleUpdated";
|
|
String CONTENT_NAME = "Demo Node 1";
|
|
Locale CONTENT_LOCALE = Locale.GERMAN;
|
|
String CONTENT_STRING = "The quick brown fox";
|
|
Set<NodeRef>nodes = new HashSet<NodeRef>();
|
|
|
|
String targetName = "testManyNodes";
|
|
|
|
NodeRef nodeA;
|
|
NodeRef nodeB;
|
|
NodeRef nodeAA;
|
|
NodeRef nodeAB;
|
|
NodeRef nodeABA;
|
|
NodeRef nodeABB;
|
|
NodeRef nodeABC;
|
|
|
|
ChildAssociationRef child;
|
|
|
|
/**
|
|
* For unit test
|
|
* - replace the HTTP transport with the in-process transport
|
|
* - replace the node factory with one that will map node refs, paths etc.
|
|
*/
|
|
TransferTransmitter transmitter = new UnitTestInProcessTransmitterImpl(this.receiver, this.contentService, transactionService);
|
|
transferServiceImpl.setTransmitter(transmitter);
|
|
UnitTestTransferManifestNodeFactory testNodeFactory = new UnitTestTransferManifestNodeFactory(this.transferManifestNodeFactory);
|
|
transferServiceImpl.setTransferManifestNodeFactory(testNodeFactory);
|
|
List<Pair<Path, Path>> pathMap = testNodeFactory.getPathMap();
|
|
// Map company_home/guest_home to company_home so tranferred nodes and moved "up" one level.
|
|
pathMap.add(new Pair<Path, Path>(PathHelper.stringToPath(GUEST_HOME_XPATH_QUERY), PathHelper.stringToPath(COMPANY_HOME_XPATH_QUERY)));
|
|
|
|
TransferTarget transferMe;
|
|
|
|
startNewTransaction();
|
|
try
|
|
{
|
|
/**
|
|
* Get guest home
|
|
*/
|
|
String guestHomeQuery = "/app:company_home/app:guest_home";
|
|
ResultSet guestHomeResult = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_XPATH, guestHomeQuery);
|
|
assertEquals("", 1, guestHomeResult.length());
|
|
NodeRef guestHome = guestHomeResult.getNodeRef(0);
|
|
|
|
/**
|
|
* Create a test node that we will read and write
|
|
*/
|
|
String guid = GUID.generate();
|
|
|
|
/**
|
|
* Create a tree
|
|
* ManyNodesRoot
|
|
* AC (Content Node)
|
|
* A (Folder)
|
|
* --AA
|
|
* --AB (Folder)
|
|
* ----ABA (Folder)
|
|
* -------- 100+ nodes
|
|
* ----ABB
|
|
* ----ABC
|
|
* B
|
|
*/
|
|
|
|
child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, QName.createQName(guid), ContentModel.TYPE_FOLDER);
|
|
NodeRef testRootNode = child.getChildRef();
|
|
nodeService.setProperty(testRootNode , ContentModel.PROP_TITLE, guid);
|
|
nodeService.setProperty(testRootNode , ContentModel.PROP_NAME, guid);
|
|
nodes.add(testRootNode);
|
|
|
|
child = nodeService.createNode(testRootNode, ContentModel.ASSOC_CONTAINS, QName.createQName("testNodeAC"), ContentModel.TYPE_CONTENT);
|
|
NodeRef nodeAC = child.getChildRef();
|
|
nodeService.setProperty(nodeAC , ContentModel.PROP_TITLE, CONTENT_TITLE + "AC");
|
|
nodeService.setProperty(nodeAC , ContentModel.PROP_NAME, "DemoNodeAC");
|
|
|
|
{
|
|
ContentWriter writer = contentService.getWriter(nodeAC , ContentModel.PROP_CONTENT, true);
|
|
writer.setLocale(CONTENT_LOCALE);
|
|
writer.putContent(CONTENT_STRING);
|
|
nodes.add(nodeAC);
|
|
}
|
|
|
|
child = nodeService.createNode(testRootNode, ContentModel.ASSOC_CONTAINS, QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI,"testNodeA"), ContentModel.TYPE_FOLDER);
|
|
nodeA = child.getChildRef();
|
|
nodeService.setProperty(nodeA , ContentModel.PROP_TITLE, "TestNodeA");
|
|
nodeService.setProperty(nodeA , ContentModel.PROP_NAME, "TestNodeA");
|
|
nodes.add(nodeA);
|
|
|
|
child = nodeService.createNode(testRootNode, ContentModel.ASSOC_CONTAINS, QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI,"testNodeB"), ContentModel.TYPE_FOLDER);
|
|
nodeB = child.getChildRef();
|
|
nodeService.setProperty(nodeB , ContentModel.PROP_TITLE, "TestNodeB");
|
|
nodeService.setProperty(nodeB , ContentModel.PROP_NAME, "TestNodeB");
|
|
nodes.add(nodeB);
|
|
|
|
child = nodeService.createNode(nodeA, ContentModel.ASSOC_CONTAINS, QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI,"testNodeAA"), ContentModel.TYPE_FOLDER);
|
|
nodeAA = child.getChildRef();
|
|
nodeService.setProperty(nodeAA , ContentModel.PROP_TITLE, CONTENT_TITLE);
|
|
nodeService.setProperty(nodeAA , ContentModel.PROP_NAME, "DemoNodeAA" );
|
|
nodes.add(nodeAA);
|
|
|
|
child = nodeService.createNode(nodeA, ContentModel.ASSOC_CONTAINS, QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI,"testNodeAB"), ContentModel.TYPE_FOLDER);
|
|
nodeAB = child.getChildRef();
|
|
nodeService.setProperty(nodeAB , ContentModel.PROP_TITLE, CONTENT_TITLE);
|
|
nodeService.setProperty(nodeAB , ContentModel.PROP_NAME, "DemoNodeAB" );
|
|
nodes.add(nodeAB);
|
|
|
|
child = nodeService.createNode(nodeAB, ContentModel.ASSOC_CONTAINS, QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI,"testNodeABA"), ContentModel.TYPE_FOLDER);
|
|
nodeABA = child.getChildRef();
|
|
nodeService.setProperty(nodeABA , ContentModel.PROP_TITLE, CONTENT_TITLE);
|
|
nodeService.setProperty(nodeABA , ContentModel.PROP_NAME, "DemoNodeABA" );
|
|
nodes.add(nodeABA);
|
|
|
|
child = nodeService.createNode(nodeAB, ContentModel.ASSOC_CONTAINS, QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI,"testNodeABB"), ContentModel.TYPE_FOLDER);
|
|
nodeABB = child.getChildRef();
|
|
nodeService.setProperty(nodeABB , ContentModel.PROP_TITLE, CONTENT_TITLE);
|
|
nodeService.setProperty(nodeABB , ContentModel.PROP_NAME, "DemoNodeABB" );
|
|
nodes.add(nodeABB);
|
|
|
|
child = nodeService.createNode(nodeAB, ContentModel.ASSOC_CONTAINS, QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI,"testNodeABC"), ContentModel.TYPE_FOLDER);
|
|
nodeABC = child.getChildRef();
|
|
nodeService.setProperty(nodeABC , ContentModel.PROP_TITLE, CONTENT_TITLE);
|
|
nodeService.setProperty(nodeABC , ContentModel.PROP_NAME, "DemoNodeABC" );
|
|
nodes.add(nodeABC);
|
|
|
|
/**
|
|
* Now go ahead and create our first transfer target
|
|
*/
|
|
if(!transferService.targetExists(targetName))
|
|
{
|
|
transferMe = createTransferTarget(targetName);
|
|
}
|
|
else
|
|
{
|
|
transferMe = transferService.getTransferTarget(targetName);
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
endTransaction();
|
|
}
|
|
|
|
startNewTransaction();
|
|
try
|
|
{
|
|
/**
|
|
* Transfer our transfer target nodes
|
|
*/
|
|
{
|
|
TransferDefinition definition = new TransferDefinition();
|
|
definition.setNodes(nodes);
|
|
transferService.transfer(targetName, definition);
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
endTransaction();
|
|
}
|
|
|
|
NodeRef destNodeA;
|
|
NodeRef destNodeB;
|
|
NodeRef destNodeAA;
|
|
NodeRef destNodeAB;
|
|
NodeRef destNodeABA;
|
|
NodeRef destNodeABB;
|
|
NodeRef destNodeABC;
|
|
|
|
startNewTransaction();
|
|
try
|
|
{
|
|
// Now validate that the target node exists and has similar properties to the source
|
|
destNodeA = testNodeFactory.getMappedNodeRef(nodeA);
|
|
assertFalse("unit test stuffed up - comparing with self", destNodeA.equals(transferMe.getNodeRef()));
|
|
assertTrue("dest node ref A does not exist", nodeService.exists(destNodeA));
|
|
assertEquals("title is wrong", (String)nodeService.getProperty(destNodeA, ContentModel.PROP_TITLE), "TestNodeA");
|
|
assertEquals("type is wrong", nodeService.getType(nodeA), nodeService.getType(destNodeA));
|
|
|
|
destNodeB = testNodeFactory.getMappedNodeRef(nodeB);
|
|
assertTrue("dest node B does not exist", nodeService.exists(destNodeB));
|
|
|
|
destNodeAA = testNodeFactory.getMappedNodeRef(nodeAA);
|
|
assertTrue("dest node AA ref does not exist", nodeService.exists(destNodeAA));
|
|
|
|
destNodeAB = testNodeFactory.getMappedNodeRef(nodeAB);
|
|
assertTrue("dest node AB ref does not exist", nodeService.exists(destNodeAB));
|
|
|
|
destNodeABA = testNodeFactory.getMappedNodeRef(nodeABA);
|
|
assertTrue("dest node ABA ref does not exist", nodeService.exists(destNodeABA));
|
|
|
|
destNodeABB = testNodeFactory.getMappedNodeRef(nodeABB);
|
|
assertTrue("dest node ABB ref does not exist", nodeService.exists(destNodeABB));
|
|
|
|
destNodeABC = testNodeFactory.getMappedNodeRef(nodeABC);
|
|
assertTrue("dest node ABC ref does not exist", nodeService.exists(destNodeABC));
|
|
}
|
|
finally
|
|
{
|
|
endTransaction();
|
|
}
|
|
|
|
startNewTransaction();
|
|
try
|
|
{
|
|
/**
|
|
* Update a single node (NodeAB) from the middle of the tree
|
|
*/
|
|
{
|
|
nodeService.setProperty(nodeAB , ContentModel.PROP_TITLE, CONTENT_TITLE_UPDATED);
|
|
|
|
TransferDefinition definition = new TransferDefinition();
|
|
Set<NodeRef>toUpdate = new HashSet<NodeRef>();
|
|
toUpdate.add(nodeAB);
|
|
definition.setNodes(toUpdate);
|
|
transferService.transfer(targetName, definition);
|
|
|
|
// assertEquals("title is wrong", (String)nodeService.getProperty(destNodeAB, ContentModel.PROP_TITLE), CONTENT_TITLE_UPDATED);
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
endTransaction();
|
|
}
|
|
|
|
|
|
startNewTransaction();
|
|
try
|
|
{
|
|
|
|
/**
|
|
* Now generate a large number of nodes
|
|
*/
|
|
|
|
for(int i = 0; i < 100; i++)
|
|
{
|
|
child = nodeService.createNode(nodeABA, ContentModel.ASSOC_CONTAINS, QName.createQName(GUID.generate() + i), ContentModel.TYPE_CONTENT);
|
|
|
|
NodeRef nodeX = child.getChildRef();
|
|
nodeService.setProperty(nodeX , ContentModel.PROP_TITLE, CONTENT_TITLE + i);
|
|
nodeService.setProperty(nodeX , ContentModel.PROP_NAME, CONTENT_NAME +i);
|
|
nodes.add(nodeX);
|
|
|
|
ContentWriter writer = contentService.getWriter(nodeX, ContentModel.PROP_CONTENT, true);
|
|
writer.setLocale(CONTENT_LOCALE);
|
|
writer.putContent(CONTENT_STRING + i);
|
|
}
|
|
|
|
}
|
|
finally
|
|
{
|
|
endTransaction();
|
|
}
|
|
|
|
startNewTransaction();
|
|
try
|
|
{
|
|
/**
|
|
* Transfer our transfer target nodes
|
|
*/
|
|
{
|
|
TransferDefinition definition = new TransferDefinition();
|
|
definition.setNodes(nodes);
|
|
transferService.transfer(targetName, definition);
|
|
}
|
|
|
|
|
|
}
|
|
finally
|
|
{
|
|
transferService.deleteTransferTarget(targetName);
|
|
endTransaction();
|
|
}
|
|
} // end many nodes
|
|
|
|
|
|
/**
|
|
* Test the path based update.
|
|
*
|
|
* This is a unit test so it does some shenanigans to send to the same instance of alfresco.
|
|
*/
|
|
public void testPathBasedUpdate() throws Exception
|
|
{
|
|
setDefaultRollback(false);
|
|
|
|
/**
|
|
* For unit test
|
|
* - replace the HTTP transport with the in-process transport
|
|
* - replace the node factory with one that will map node refs, paths etc.
|
|
*/
|
|
TransferTransmitter transmitter = new UnitTestInProcessTransmitterImpl(this.receiver, this.contentService, transactionService);
|
|
transferServiceImpl.setTransmitter(transmitter);
|
|
UnitTestTransferManifestNodeFactory testNodeFactory = new UnitTestTransferManifestNodeFactory(this.transferManifestNodeFactory);
|
|
transferServiceImpl.setTransferManifestNodeFactory(testNodeFactory);
|
|
List<Pair<Path, Path>> pathMap = testNodeFactory.getPathMap();
|
|
// Map company_home/guest_home to company_home so tranferred nodes and moved "up" one level.
|
|
pathMap.add(new Pair<Path, Path>(PathHelper.stringToPath(GUEST_HOME_XPATH_QUERY), PathHelper.stringToPath(COMPANY_HOME_XPATH_QUERY)));
|
|
|
|
String CONTENT_TITLE = "ContentTitle";
|
|
String CONTENT_TITLE_UPDATED = "ContentTitleUpdated";
|
|
String CONTENT_NAME = GUID.generate();
|
|
Locale CONTENT_LOCALE = Locale.GERMAN;
|
|
String CONTENT_STRING = "Hello";
|
|
String targetName = GUID.generate();
|
|
NodeRef contentNodeRef;
|
|
NodeRef newContentNodeRef;
|
|
|
|
QName TEST_QNAME = QName.createQName(CONTENT_NAME);
|
|
NodeRef guestHome;
|
|
ChildAssociationRef child;
|
|
|
|
startNewTransaction();
|
|
try
|
|
{
|
|
/**
|
|
* Get guest home
|
|
*/
|
|
String guestHomeQuery = "/app:company_home/app:guest_home";
|
|
ResultSet guestHomeResult = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_XPATH, guestHomeQuery);
|
|
assertEquals("", 1, guestHomeResult.length());
|
|
guestHome = guestHomeResult.getNodeRef(0);
|
|
|
|
/**
|
|
* Create a test node that we will transfer. Its path is what is important
|
|
*/
|
|
child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, TEST_QNAME, ContentModel.TYPE_CONTENT);
|
|
contentNodeRef = child.getChildRef();
|
|
nodeService.setProperty(contentNodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE);
|
|
nodeService.setProperty(contentNodeRef, ContentModel.PROP_NAME, CONTENT_NAME);
|
|
|
|
ContentWriter writer = contentService.getWriter(contentNodeRef, ContentModel.PROP_CONTENT, true);
|
|
writer.setLocale(CONTENT_LOCALE);
|
|
writer.putContent(CONTENT_STRING);
|
|
|
|
/**
|
|
* Now go ahead and create our first transfer target
|
|
*/
|
|
if(!transferService.targetExists(targetName))
|
|
{
|
|
createTransferTarget(targetName);
|
|
}
|
|
else
|
|
{
|
|
transferService.getTransferTarget(targetName);
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
endTransaction();
|
|
}
|
|
|
|
startNewTransaction();
|
|
try
|
|
{
|
|
/**
|
|
* Transfer our transfer target node
|
|
*/
|
|
TransferDefinition definition = new TransferDefinition();
|
|
Set<NodeRef>nodes = new HashSet<NodeRef>();
|
|
nodes.add(contentNodeRef);
|
|
definition.setNodes(nodes);
|
|
transferService.transfer(targetName, definition);
|
|
}
|
|
finally
|
|
{
|
|
endTransaction();
|
|
}
|
|
|
|
startNewTransaction();
|
|
try
|
|
{
|
|
// Now validate that the target node exists and has similar properties to the source
|
|
NodeRef destNodeRef = testNodeFactory.getMappedNodeRef(contentNodeRef);
|
|
assertFalse("unit test stuffed up - comparing with self", destNodeRef.equals(contentNodeRef));
|
|
assertTrue("dest node ref does not exist", nodeService.exists(destNodeRef));
|
|
assertEquals("title is wrong", (String)nodeService.getProperty(destNodeRef, ContentModel.PROP_TITLE), CONTENT_TITLE);
|
|
assertEquals("type is wrong", nodeService.getType(contentNodeRef), nodeService.getType(destNodeRef));
|
|
|
|
/**
|
|
* Now delete the content node and re-create another one with the old path
|
|
*/
|
|
nodeService.deleteNode(contentNodeRef);
|
|
|
|
child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, TEST_QNAME, ContentModel.TYPE_CONTENT);
|
|
newContentNodeRef = child.getChildRef();
|
|
nodeService.setProperty(newContentNodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE_UPDATED);
|
|
|
|
/**
|
|
* Transfer our node which is a new node (so will not exist on the back end) with a path that already has a node.
|
|
*/
|
|
{
|
|
TransferDefinition definition = new TransferDefinition();
|
|
Set<NodeRef>nodes = new HashSet<NodeRef>();
|
|
nodes.add(newContentNodeRef);
|
|
definition.setNodes(nodes);
|
|
transferService.transfer(targetName, definition);
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
endTransaction();
|
|
}
|
|
|
|
startNewTransaction();
|
|
try
|
|
{
|
|
NodeRef oldDestNodeRef = testNodeFactory.getMappedNodeRef(contentNodeRef);
|
|
NodeRef newDestNodeRef = testNodeFactory.getMappedNodeRef(newContentNodeRef);
|
|
|
|
// Now validate that the target node does not exist - it should have
|
|
// been updated by path.
|
|
assertFalse("unit test stuffed up - comparing with self", oldDestNodeRef.equals(newDestNodeRef));
|
|
assertFalse("new dest node ref exists", nodeService.exists(newDestNodeRef));
|
|
assertTrue("old dest node does not exists", nodeService.exists(oldDestNodeRef));
|
|
|
|
assertEquals("title is wrong", (String)nodeService.getProperty(oldDestNodeRef, ContentModel.PROP_TITLE), CONTENT_TITLE_UPDATED);
|
|
// assertEquals("type is wrong", nodeService.getType(contentNodeRef), nodeService.getType(destNodeRef));
|
|
}
|
|
finally
|
|
{
|
|
endTransaction();
|
|
}
|
|
} // Path based update
|
|
|
|
|
|
/**
|
|
* Test the transfer method when it is running async.
|
|
*
|
|
* This is a unit test so it does some shenanigans to send to the same instance of alfresco.
|
|
*/
|
|
public void testAsyncCallback() throws Exception
|
|
{
|
|
int MAX_SLEEPS = 5;
|
|
|
|
/**
|
|
* Get guest home
|
|
*/
|
|
String guestHomeQuery = "/app:company_home/app:guest_home";
|
|
ResultSet guestHomeResult = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_XPATH, guestHomeQuery);
|
|
assertEquals("", 1, guestHomeResult.length());
|
|
NodeRef guestHome = guestHomeResult.getNodeRef(0);
|
|
|
|
/**
|
|
* For unit test
|
|
* - replace the HTTP transport with the in-process transport
|
|
* - replace the node factory with one that will map node refs, paths etc.
|
|
*/
|
|
TransferTransmitter transmitter = new UnitTestInProcessTransmitterImpl(this.receiver, this.contentService, transactionService);
|
|
transferServiceImpl.setTransmitter(transmitter);
|
|
UnitTestTransferManifestNodeFactory testNodeFactory = new UnitTestTransferManifestNodeFactory(this.transferManifestNodeFactory);
|
|
transferServiceImpl.setTransferManifestNodeFactory(testNodeFactory);
|
|
List<Pair<Path, Path>> pathMap = testNodeFactory.getPathMap();
|
|
// Map company_home/guest_home to company_home so tranferred nodes and moved "up" one level.
|
|
pathMap.add(new Pair<Path, Path>(PathHelper.stringToPath(GUEST_HOME_XPATH_QUERY), PathHelper.stringToPath(COMPANY_HOME_XPATH_QUERY)));
|
|
|
|
/**
|
|
* Now go ahead and create our first transfer target
|
|
* This needs to be committed before we can call transfer asycnc.
|
|
*/
|
|
String CONTENT_TITLE = "ContentTitle";
|
|
String CONTENT_NAME_A = "Demo Node A";
|
|
String CONTENT_NAME_B = "Demo Node B";
|
|
Locale CONTENT_LOCALE = Locale.GERMAN;
|
|
String CONTENT_STRING = "Hello";
|
|
|
|
NodeRef nodeRefA = null;
|
|
NodeRef nodeRefB = null;
|
|
String targetName = "testAsyncCallback";
|
|
{
|
|
UserTransaction trx = transactionService.getNonPropagatingUserTransaction();
|
|
trx.begin();
|
|
try
|
|
{
|
|
nodeRefA = nodeService.getChildByName(guestHome, ContentModel.ASSOC_CONTAINS, CONTENT_NAME_A);
|
|
|
|
if(nodeRefA == null)
|
|
{
|
|
/**
|
|
* Create a test node that we will read and write
|
|
*/
|
|
ChildAssociationRef child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, QName.createQName(GUID.generate()), ContentModel.TYPE_CONTENT);
|
|
nodeRefA = child.getChildRef();
|
|
nodeService.setProperty(nodeRefA, ContentModel.PROP_TITLE, CONTENT_TITLE);
|
|
nodeService.setProperty(nodeRefA, ContentModel.PROP_NAME, CONTENT_NAME_A);
|
|
|
|
ContentWriter writer = contentService.getWriter(nodeRefA, ContentModel.PROP_CONTENT, true);
|
|
writer.setLocale(CONTENT_LOCALE);
|
|
writer.putContent(CONTENT_STRING);
|
|
}
|
|
|
|
nodeRefB = nodeService.getChildByName(guestHome, ContentModel.ASSOC_CONTAINS, CONTENT_NAME_B);
|
|
|
|
if(nodeRefB == null)
|
|
{
|
|
ChildAssociationRef child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, QName.createQName(GUID.generate()), ContentModel.TYPE_CONTENT);
|
|
nodeRefB = child.getChildRef();
|
|
nodeService.setProperty(nodeRefB, ContentModel.PROP_TITLE, CONTENT_TITLE);
|
|
nodeService.setProperty(nodeRefB, ContentModel.PROP_NAME, CONTENT_NAME_B);
|
|
|
|
ContentWriter writer = contentService.getWriter(nodeRefB, ContentModel.PROP_CONTENT, true);
|
|
writer.setLocale(CONTENT_LOCALE);
|
|
writer.putContent(CONTENT_STRING);
|
|
}
|
|
|
|
/**
|
|
* Now go ahead and create our first transfer target
|
|
*/
|
|
if(!transferService.targetExists(targetName))
|
|
{
|
|
createTransferTarget(targetName);
|
|
}
|
|
else
|
|
{
|
|
transferService.getTransferTarget(targetName);
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
trx.commit();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* The transfer report is a plain report of the transfer - no async shenanigans to worry about
|
|
*/
|
|
List<TransferEvent>transferReport = new ArrayList<TransferEvent>(50);
|
|
|
|
startNewTransaction();
|
|
try
|
|
{
|
|
/**
|
|
* Call the transferAsync method.
|
|
*/
|
|
{
|
|
TestTransferCallback callback = new TestTransferCallback();
|
|
Set<TransferCallback> callbacks = new HashSet<TransferCallback>();
|
|
callbacks.add(callback);
|
|
TransferDefinition definition = new TransferDefinition();
|
|
Set<NodeRef>nodes = new HashSet<NodeRef>();
|
|
nodes.add(nodeRefA);
|
|
nodes.add(nodeRefB);
|
|
definition.setNodes(nodes);
|
|
|
|
transferService.transferAsync(targetName, definition, callbacks);
|
|
logger.debug("transfer async has returned");
|
|
|
|
/**
|
|
* Need to poll the transfer events here until callback receives the last event
|
|
*/
|
|
Queue<TransferEvent> events = callback.getEvents();
|
|
|
|
int sleepCount = MAX_SLEEPS;
|
|
boolean ended = false;
|
|
|
|
TransferEvent event = events.poll();
|
|
while (!ended)
|
|
{
|
|
logger.debug("polling loop:" + sleepCount);
|
|
|
|
while(event != null)
|
|
{
|
|
/**
|
|
* Got an event - reset the sleep counter
|
|
*/
|
|
sleepCount = MAX_SLEEPS;
|
|
|
|
logger.debug("Got an event" + event.toString());
|
|
|
|
/**
|
|
* Squirrel away the event for analysis later
|
|
*/
|
|
transferReport.add(event);
|
|
|
|
/**
|
|
* If we read the last record which will either be SUCCESS or ERROR then we we have finished
|
|
*/
|
|
if(event.isLast())
|
|
{
|
|
logger.debug("got last event");
|
|
ended = true;
|
|
}
|
|
|
|
/**
|
|
* Try to get the next event
|
|
*/
|
|
event = events.poll();
|
|
}
|
|
|
|
if(event == null && !ended)
|
|
{
|
|
if(sleepCount <= 0)
|
|
{
|
|
fail("timed out without receiving last event");
|
|
ended = true;
|
|
}
|
|
else
|
|
{
|
|
/**
|
|
* No content - go to sleep to wait for some more
|
|
*/
|
|
if(sleepCount-- > 0)
|
|
{
|
|
// Sleep for 5 second
|
|
Thread.sleep(5000);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Try to get the next event
|
|
*/
|
|
event = events.poll();
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Now validate the transferReport
|
|
*/
|
|
assertTrue("transfer report is too small", transferReport.size() > 2);
|
|
assertTrue("transfer report does not start with START", transferReport.get(0).getTransferState().equals(TransferEvent.TransferState.START));
|
|
assertTrue("transfer report does not end with SUCCESS", transferReport.get(transferReport.size()-1).getTransferState().equals(TransferEvent.TransferState.SUCCESS));
|
|
}
|
|
finally
|
|
{
|
|
// UserTransaction trx = transactionService.getNonPropagatingUserTransaction();
|
|
// trx.begin();
|
|
transferService.deleteTransferTarget(targetName);
|
|
// trx.commit();
|
|
endTransaction();
|
|
}
|
|
} // test async callback
|
|
|
|
|
|
/**
|
|
* Test the transfer cancel method when it is running async.
|
|
*
|
|
* This is a unit test so it does some shenanigans to send to the same instance of alfresco.
|
|
*/
|
|
public void testAsyncCancel() throws Exception
|
|
{
|
|
int MAX_SLEEPS = 5;
|
|
|
|
/**
|
|
* Get guest home
|
|
*/
|
|
String guestHomeQuery = "/app:company_home/app:guest_home";
|
|
ResultSet guestHomeResult = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_XPATH, guestHomeQuery);
|
|
assertEquals("", 1, guestHomeResult.length());
|
|
NodeRef guestHome = guestHomeResult.getNodeRef(0);
|
|
|
|
/**
|
|
* For unit test
|
|
* - replace the HTTP transport with the in-process transport
|
|
* - replace the node factory with one that will map node refs, paths etc.
|
|
*/
|
|
TransferTransmitter transmitter = new UnitTestInProcessTransmitterImpl(this.receiver, this.contentService, transactionService);
|
|
transferServiceImpl.setTransmitter(transmitter);
|
|
UnitTestTransferManifestNodeFactory testNodeFactory = new UnitTestTransferManifestNodeFactory(this.transferManifestNodeFactory);
|
|
transferServiceImpl.setTransferManifestNodeFactory(testNodeFactory);
|
|
List<Pair<Path, Path>> pathMap = testNodeFactory.getPathMap();
|
|
// Map company_home/guest_home to company_home so tranferred nodes and moved "up" one level.
|
|
pathMap.add(new Pair<Path, Path>(PathHelper.stringToPath(GUEST_HOME_XPATH_QUERY), PathHelper.stringToPath(COMPANY_HOME_XPATH_QUERY)));
|
|
|
|
/**
|
|
* Now go ahead and create our first transfer target
|
|
* This needs to be committed before we can call transfer asycnc.
|
|
*/
|
|
String CONTENT_TITLE = "ContentTitle";
|
|
String CONTENT_NAME_A = "Demo Node A";
|
|
String CONTENT_NAME_B = "Demo Node B";
|
|
Locale CONTENT_LOCALE = Locale.GERMAN;
|
|
String CONTENT_STRING = "Hello";
|
|
|
|
NodeRef nodeRefA = null;
|
|
NodeRef nodeRefB = null;
|
|
String targetName = "testAsyncCallback";
|
|
{
|
|
UserTransaction trx = transactionService.getNonPropagatingUserTransaction();
|
|
trx.begin();
|
|
try
|
|
{
|
|
nodeRefA = nodeService.getChildByName(guestHome, ContentModel.ASSOC_CONTAINS, CONTENT_NAME_A);
|
|
|
|
if(nodeRefA == null)
|
|
{
|
|
/**
|
|
* Create a test node that we will read and write
|
|
*/
|
|
ChildAssociationRef child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, QName.createQName(GUID.generate()), ContentModel.TYPE_CONTENT);
|
|
nodeRefA = child.getChildRef();
|
|
nodeService.setProperty(nodeRefA, ContentModel.PROP_TITLE, CONTENT_TITLE);
|
|
nodeService.setProperty(nodeRefA, ContentModel.PROP_NAME, CONTENT_NAME_A);
|
|
|
|
ContentWriter writer = contentService.getWriter(nodeRefA, ContentModel.PROP_CONTENT, true);
|
|
writer.setLocale(CONTENT_LOCALE);
|
|
writer.putContent(CONTENT_STRING);
|
|
}
|
|
|
|
nodeRefB = nodeService.getChildByName(guestHome, ContentModel.ASSOC_CONTAINS, CONTENT_NAME_B);
|
|
|
|
if(nodeRefB == null)
|
|
{
|
|
ChildAssociationRef child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, QName.createQName(GUID.generate()), ContentModel.TYPE_CONTENT);
|
|
nodeRefB = child.getChildRef();
|
|
nodeService.setProperty(nodeRefB, ContentModel.PROP_TITLE, CONTENT_TITLE);
|
|
nodeService.setProperty(nodeRefB, ContentModel.PROP_NAME, CONTENT_NAME_B);
|
|
|
|
ContentWriter writer = contentService.getWriter(nodeRefB, ContentModel.PROP_CONTENT, true);
|
|
writer.setLocale(CONTENT_LOCALE);
|
|
writer.putContent(CONTENT_STRING);
|
|
}
|
|
|
|
/**
|
|
* Now go ahead and create our first transfer target
|
|
*/
|
|
if(!transferService.targetExists(targetName))
|
|
{
|
|
createTransferTarget(targetName);
|
|
}
|
|
else
|
|
{
|
|
transferService.getTransferTarget(targetName);
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
trx.commit();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* The transfer report is a plain report of the transfer - no async shenanigans to worry about
|
|
*/
|
|
List<TransferEvent>transferReport = new ArrayList<TransferEvent>(50);
|
|
|
|
startNewTransaction();
|
|
try
|
|
{
|
|
/**
|
|
* Call the transferAsync method.
|
|
*/
|
|
{
|
|
|
|
/**
|
|
* The poison callback will cancel the transfer after
|
|
* the begin
|
|
*/
|
|
TransferCallback poison = new TransferCallback()
|
|
{
|
|
String transferId = null;
|
|
|
|
public void processEvent(TransferEvent event)
|
|
{
|
|
logger.debug(event.toString());
|
|
|
|
if(event instanceof TransferEventBegin)
|
|
{
|
|
TransferEventBegin beginEvent = (TransferEventBegin)event;
|
|
transferId = beginEvent.getTransferId();
|
|
|
|
transferService.cancelAsync(transferId);
|
|
}
|
|
}
|
|
};
|
|
|
|
TestTransferCallback callback = new TestTransferCallback();
|
|
Set<TransferCallback> callbacks = new HashSet<TransferCallback>();
|
|
callbacks.add(callback);
|
|
callbacks.add(poison);
|
|
TransferDefinition definition = new TransferDefinition();
|
|
Set<NodeRef>nodes = new HashSet<NodeRef>();
|
|
nodes.add(nodeRefA);
|
|
nodes.add(nodeRefB);
|
|
definition.setNodes(nodes);
|
|
|
|
transferService.transferAsync(targetName, definition, callbacks);
|
|
logger.debug("transfer async has returned");
|
|
|
|
/**
|
|
* Need to poll the transfer events here until callback receives the last event
|
|
*/
|
|
Queue<TransferEvent> events = callback.getEvents();
|
|
|
|
int sleepCount = MAX_SLEEPS;
|
|
boolean ended = false;
|
|
|
|
TransferEvent event = events.poll();
|
|
while (!ended)
|
|
{
|
|
logger.debug("polling loop:" + sleepCount);
|
|
|
|
while(event != null)
|
|
{
|
|
/**
|
|
* Got an event - reset the sleep counter
|
|
*/
|
|
sleepCount = MAX_SLEEPS;
|
|
|
|
logger.debug("Got an event" + event.toString());
|
|
|
|
/**
|
|
* Squirrel away the event for analysis later
|
|
*/
|
|
transferReport.add(event);
|
|
|
|
/**
|
|
* If we read the last record which will either be SUCCESS or ERROR then we we have finished
|
|
*/
|
|
if(event.isLast())
|
|
{
|
|
logger.debug("got last event");
|
|
ended = true;
|
|
}
|
|
|
|
/**
|
|
* Try to get the next event
|
|
*/
|
|
event = events.poll();
|
|
}
|
|
|
|
if(event == null && !ended)
|
|
{
|
|
if(sleepCount <= 0)
|
|
{
|
|
fail("timed out without receiving last event");
|
|
ended = true;
|
|
}
|
|
else
|
|
{
|
|
/**
|
|
* No content - go to sleep to wait for some more
|
|
*/
|
|
if(sleepCount-- > 0)
|
|
{
|
|
// Sleep for 5 second
|
|
Thread.sleep(5000);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Try to get the next event
|
|
*/
|
|
event = events.poll();
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Now validate the transferReport
|
|
*/
|
|
assertTrue("transfer report is too small", transferReport.size() > 2);
|
|
assertTrue("transfer report does not start with START", transferReport.get(0).getTransferState().equals(TransferEvent.TransferState.START));
|
|
assertTrue("transfer report does not end with ERROR", transferReport.get(transferReport.size()-1).getTransferState().equals(TransferEvent.TransferState.ERROR));
|
|
}
|
|
finally
|
|
{
|
|
// UserTransaction trx = transactionService.getNonPropagatingUserTransaction();
|
|
// trx.begin();
|
|
transferService.deleteTransferTarget(targetName);
|
|
// trx.commit();
|
|
endTransaction();
|
|
}
|
|
} // test async cancel
|
|
|
|
|
|
/**
|
|
* Test the transfer report.
|
|
*
|
|
* This is a unit test so it does some shenanigans to send to the same instance of alfresco.
|
|
*/
|
|
public void testTransferReport() throws Exception
|
|
{
|
|
setDefaultRollback(false);
|
|
|
|
/**
|
|
* Get guest home
|
|
*/
|
|
String guestHomeQuery = "/app:company_home/app:guest_home";
|
|
ResultSet guestHomeResult = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_XPATH, guestHomeQuery);
|
|
assertEquals("", 1, guestHomeResult.length());
|
|
NodeRef guestHome = guestHomeResult.getNodeRef(0);
|
|
|
|
/**
|
|
* For unit test
|
|
* - replace the HTTP transport with the in-process transport
|
|
* - replace the node factory with one that will map node refs, paths etc.
|
|
*/
|
|
TransferTransmitter transmitter = new UnitTestInProcessTransmitterImpl(this.receiver, this.contentService, transactionService);
|
|
transferServiceImpl.setTransmitter(transmitter);
|
|
UnitTestTransferManifestNodeFactory testNodeFactory = new UnitTestTransferManifestNodeFactory(this.transferManifestNodeFactory);
|
|
transferServiceImpl.setTransferManifestNodeFactory(testNodeFactory);
|
|
List<Pair<Path, Path>> pathMap = testNodeFactory.getPathMap();
|
|
// Map company_home/guest_home to company_home so tranferred nodes and moved "up" one level.
|
|
pathMap.add(new Pair<Path, Path>(PathHelper.stringToPath(GUEST_HOME_XPATH_QUERY), PathHelper.stringToPath(COMPANY_HOME_XPATH_QUERY)));
|
|
|
|
/**
|
|
* Now go ahead and create our first transfer target
|
|
* This needs to be committed before we can call transfer asycnc.
|
|
*/
|
|
String CONTENT_TITLE = "ContentTitle";
|
|
String CONTENT_NAME_A = "Demo Node A";
|
|
String CONTENT_NAME_B = "Demo Node B";
|
|
Locale CONTENT_LOCALE = Locale.GERMAN;
|
|
String CONTENT_STRING = "Hello";
|
|
|
|
NodeRef nodeRefA = null;
|
|
NodeRef nodeRefB = null;
|
|
String targetName = "testTransferReport";
|
|
|
|
startNewTransaction();
|
|
try
|
|
{
|
|
nodeRefA = nodeService.getChildByName(guestHome, ContentModel.ASSOC_CONTAINS, CONTENT_NAME_A);
|
|
|
|
if(nodeRefA == null)
|
|
{
|
|
/**
|
|
* Create a test node that we will read and write
|
|
*/
|
|
ChildAssociationRef child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, QName.createQName(GUID.generate()), ContentModel.TYPE_CONTENT);
|
|
nodeRefA = child.getChildRef();
|
|
nodeService.setProperty(nodeRefA, ContentModel.PROP_TITLE, CONTENT_TITLE);
|
|
nodeService.setProperty(nodeRefA, ContentModel.PROP_NAME, CONTENT_NAME_A);
|
|
|
|
ContentWriter writer = contentService.getWriter(nodeRefA, ContentModel.PROP_CONTENT, true);
|
|
writer.setLocale(CONTENT_LOCALE);
|
|
writer.putContent(CONTENT_STRING);
|
|
}
|
|
|
|
nodeRefB = nodeService.getChildByName(guestHome, ContentModel.ASSOC_CONTAINS, CONTENT_NAME_B);
|
|
|
|
if(nodeRefB == null)
|
|
{
|
|
ChildAssociationRef child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, QName.createQName(GUID.generate()), ContentModel.TYPE_CONTENT);
|
|
nodeRefB = child.getChildRef();
|
|
nodeService.setProperty(nodeRefB, ContentModel.PROP_TITLE, CONTENT_TITLE);
|
|
nodeService.setProperty(nodeRefB, ContentModel.PROP_NAME, CONTENT_NAME_B);
|
|
|
|
ContentWriter writer = contentService.getWriter(nodeRefB, ContentModel.PROP_CONTENT, true);
|
|
writer.setLocale(CONTENT_LOCALE);
|
|
writer.putContent(CONTENT_STRING);
|
|
}
|
|
|
|
/**
|
|
* Now go ahead and create our first transfer target
|
|
*/
|
|
if(!transferService.targetExists(targetName))
|
|
{
|
|
createTransferTarget(targetName);
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
endTransaction();
|
|
}
|
|
|
|
NodeRef transferReport = null;
|
|
startNewTransaction();
|
|
try
|
|
{
|
|
/**
|
|
* Call the transfer method.
|
|
*/
|
|
{
|
|
TestTransferCallback callback = new TestTransferCallback();
|
|
Set<TransferCallback> callbacks = new HashSet<TransferCallback>();
|
|
callbacks.add(callback);
|
|
TransferDefinition definition = new TransferDefinition();
|
|
Set<NodeRef>nodes = new HashSet<NodeRef>();
|
|
nodes.add(nodeRefA);
|
|
nodes.add(nodeRefB);
|
|
definition.setNodes(nodes);
|
|
|
|
transferReport = transferService.transfer(targetName, definition, callbacks);
|
|
assertNotNull("transfer report is null", transferReport);
|
|
// Can't dirty read transfer report here
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
endTransaction();
|
|
}
|
|
|
|
startNewTransaction();
|
|
try
|
|
{
|
|
ContentReader reader = contentService.getReader(transferReport, ContentModel.PROP_CONTENT);
|
|
assertNotNull("transfer reader is null", reader);
|
|
|
|
ContentReader reader2 = contentService.getReader(transferReport, ContentModel.PROP_CONTENT);
|
|
assertNotNull("transfer reader is null", reader);
|
|
|
|
logger.debug("now show the contents of the transfer report");
|
|
reader2.getContent(System.out);
|
|
|
|
// Now validate the client side transfer report against the XSD
|
|
Source transferReportSource = new StreamSource(reader.getContentInputStream());
|
|
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
|
|
final String TRANSFER_REPORT_SCHEMA_LOCATION = "classpath:org/alfresco/repo/transfer/report/TransferReport.xsd";
|
|
Schema schema = sf.newSchema(ResourceUtils.getURL(TRANSFER_REPORT_SCHEMA_LOCATION));
|
|
Validator validator = schema.newValidator();
|
|
try
|
|
{
|
|
validator.validate(transferReportSource);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
fail(e.getMessage() );
|
|
}
|
|
|
|
logger.debug("now delete the target:" + targetName);
|
|
|
|
transferService.deleteTransferTarget(targetName);
|
|
}
|
|
finally
|
|
{
|
|
endTransaction();
|
|
}
|
|
} // test transfer report
|
|
|
|
|
|
|
|
|
|
// /**
|
|
// * Test the transfer method with big content - commented out since it takes a long time to run.
|
|
// */
|
|
// public void testTransferOneNodeWithBigContent() throws Exception
|
|
// {
|
|
// String CONTENT_TITLE = "ContentTitle";
|
|
// String CONTENT_NAME = "Demo Node 6";
|
|
// Locale CONTENT_LOCALE = Locale.GERMAN;
|
|
// String CONTENT_STRING = "Hello";
|
|
//
|
|
// String targetName = "testTransferOneNodeWithBigContent";
|
|
//
|
|
// String guestHomeQuery = "/app:company_home/app:guest_home";
|
|
// ResultSet result = searchService.query(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, SearchService.LANGUAGE_XPATH, guestHomeQuery);
|
|
//
|
|
// assertEquals("", 1, result.length());
|
|
// NodeRef guestHome = result.getNodeRef(0);
|
|
// ChildAssociationRef childAssoc = result.getChildAssocRef(0);
|
|
// System.out.println("Guest home:" + guestHome);
|
|
// assertNotNull(guestHome);
|
|
//
|
|
// /**
|
|
// * Now go ahead and create our first transfer target
|
|
// */
|
|
// TransferTarget transferMe = createTransferTarget(targetName);
|
|
//
|
|
// /**
|
|
// * Create a test node that we will read and write
|
|
// */
|
|
// ChildAssociationRef child = nodeService.createNode(guestHome, ContentModel.ASSOC_CONTAINS, QName.createQName("testNode6"), ContentModel.TYPE_CONTENT);
|
|
//
|
|
//
|
|
// File tempFile = TempFileProvider.createTempFile("test", ".dat");
|
|
// FileWriter fw = new FileWriter(tempFile);
|
|
// for(int i = 0; i < 100000000; i++)
|
|
// {
|
|
// fw.write("hello world this is my text, I wonder how much text I can transfer?" + i);
|
|
// }
|
|
// System.out.println("Temp File Size is:" + tempFile.length());
|
|
// fw.close();
|
|
//
|
|
// NodeRef contentNodeRef = child.getChildRef();
|
|
// ContentWriter writer = contentService.getWriter(contentNodeRef, ContentModel.PROP_CONTENT, true);
|
|
// writer.setLocale(CONTENT_LOCALE);
|
|
// //File file = new File("c:/temp/images/BigCheese1.bmp");
|
|
// writer.setMimetype("application/data");
|
|
// //writer.putContent(file);
|
|
// writer.putContent(tempFile);
|
|
//
|
|
// tempFile.delete();
|
|
//
|
|
// nodeService.setProperty(contentNodeRef, ContentModel.PROP_TITLE, CONTENT_TITLE);
|
|
// nodeService.setProperty(contentNodeRef, ContentModel.PROP_NAME, CONTENT_NAME);
|
|
//
|
|
// try
|
|
// {
|
|
// /**
|
|
// * Transfer the node created above
|
|
// */
|
|
// {
|
|
// TransferDefinition definition = new TransferDefinition();
|
|
// Set<NodeRef>nodes = new HashSet<NodeRef>();
|
|
// nodes.add(contentNodeRef);
|
|
// definition.setNodes(nodes);
|
|
// transferService.transfer(targetName, definition, null);
|
|
// }
|
|
//
|
|
// /**
|
|
// * Negative test transfer nothing
|
|
// */
|
|
// try
|
|
// {
|
|
// TransferDefinition definition = new TransferDefinition();
|
|
// transferService.transfer(targetName, definition, null);
|
|
// fail("exception not thrown");
|
|
// }
|
|
// catch(TransferException te)
|
|
// {
|
|
// // expect to go here
|
|
// }
|
|
// }
|
|
// finally
|
|
// {
|
|
// transferService.deleteTransferTarget(targetName);
|
|
// }
|
|
// }
|
|
|
|
|
|
private TransferTarget createTransferTarget(String name)
|
|
{
|
|
String title = "title";
|
|
String description = "description";
|
|
String endpointProtocol = "http";
|
|
String endpointHost = "MARKR02";
|
|
int endpointPort = 6080;
|
|
String endpointPath = "/alfresco/service/api/transfer";
|
|
String username = "admin";
|
|
char[] password = "admin".toCharArray();
|
|
|
|
/**
|
|
* Now go ahead and create our first transfer target
|
|
*/
|
|
TransferTarget target = transferService.createAndSaveTransferTarget(name, title, description, endpointProtocol, endpointHost, endpointPort, endpointPath, username, password);
|
|
return target;
|
|
}
|
|
|
|
}
|