alfresco-community-repo/source/java/org/alfresco/repo/dictionary/DictionaryRepositoryBootstrapTest.java
Derek Hulley 5e86299377 Merged V3.2 to HEAD
17620: Merged DEV_TEMPORARY to V3.2
      17599: Fix for ETHREEOH-3308: xf:switch cannot be used in repeating field type
   17634: Put back AVM concurrency checks (reverse r17405)
   17644: Fixed up some comments and added return value to in-txn recording of deleted nodes
   17647: Fixed read-only detection of ContentStoreCleaner
   17648: Merged DEV fixes for ETHREEOH-3473 and ETHREEOH-3454 - DB script and iBatis-related changes
   17649: Fixed problem after merge-in: ETHREEOH-3641: build 270: cannot install on PostgreSQL
   17652: Fix ETHREEOH-3376 - Reindexer failure: requires rollback (Cluster)
   17658: Removed failing concurrency test for split person cleanup
   17659: Merged V3.1 to V3.2
      17308: Fixed ETHREEOH-2310: Upgrade from 2.1 E Sp7 to 3.1.1 E build 225 - Duplicate alf_node_status entries detected
             Fixes ETHREEOH-3606 (same as CHK-10454)
   17661: Fixed DB2 iBatis problems related to http://issues.apache.org/jira/browse/IBATIS-536
   17666: ETHREEOH-3376 / ETHREEOH-3637 - reindexer failure in a cluster (dictionary repo bootstrap)
   17678: Follow-on to r17666 (for RM custom model)
   17685: Merged DEV_TEMPORARY to V3.2
      17676: ETHREEOH-3187: Creating Web Content based on Web Form with most elements-read-only/default failed
   17695: Temporarily comment-out testSubmitChangedAssets1
___________________________________________________________________
Modified: svn:mergeinfo
   Merged /alfresco/BRANCHES/DEV/BELARUS/V3.2-2009_11_24:r17632,17636,17676
   Merged /alfresco/BRANCHES/DEV/BELARUS/V3.2-2009_11_09:r17599
   Merged /alfresco/BRANCHES/V3.1:r17308
   Merged /alfresco/BRANCHES/V3.2:r17620,17634,17644,17647-17649,17652,17658-17659,17661,17666,17678,17685,17695


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@18165 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
2010-01-20 11:30:46 +00:00

280 lines
10 KiB
Java

/*
* Copyright (C) 2005-2009 Alfresco Software Limited.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program 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 General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* As a special exception to the terms and conditions of version 2.0 of
* the GPL, you may redistribute this Program in connection with Free/Libre
* and Open Source Software ("FLOSS") applications as described in Alfresco's
* FLOSS exception. You should have recieved a copy of the text describing
* the FLOSS exception, and it is also available here:
* http://www.alfresco.com/legal/licensing"
*/
package org.alfresco.repo.dictionary;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.content.MimetypeMap;
import org.alfresco.repo.i18n.MessageService;
import org.alfresco.repo.policy.BehaviourFilter;
import org.alfresco.repo.tenant.TenantAdminService;
import org.alfresco.service.cmr.dictionary.DictionaryException;
import org.alfresco.service.cmr.dictionary.ModelDefinition;
import org.alfresco.service.cmr.repository.ContentWriter;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName;
import org.alfresco.service.transaction.TransactionService;
import org.alfresco.util.BaseAlfrescoSpringTest;
public class DictionaryRepositoryBootstrapTest extends BaseAlfrescoSpringTest
{
public static final String TEMPLATE_MODEL_XML =
"<model name={0} xmlns=\"http://www.alfresco.org/model/dictionary/1.0\">" +
" <description>{1}</description>" +
" <author>Alfresco</author>" +
" <published>2005-05-30</published>" +
" <version>1.0</version>" +
" <imports>" +
" <import uri=\"http://www.alfresco.org/model/dictionary/1.0\" prefix=\"d\"/>" +
" {2} " +
" </imports>" +
" <namespaces>" +
" <namespace uri={3} prefix={4}/>" +
" </namespaces>" +
" <types>" +
" <type name={5}>" +
" <title>Base</title>" +
" <description>The Base Type</description>" +
" <properties>" +
" <property name={6}>" +
" <type>d:text</type>" +
" </property>" +
" </properties>" +
" </type>" +
" </types>" +
"</model>";
/** Behaviour filter */
private BehaviourFilter behaviourFilter;
/** The bootstrap service */
private DictionaryRepositoryBootstrap bootstrap;
/** The dictionary DAO */
private DictionaryDAO dictionaryDAO;
/** The transaction service */
private TransactionService transactionService;
/** The tenant deployer service */
private TenantAdminService tenantAdminService;
/** The namespace service */
private NamespaceService namespaceService;
/** The message service */
private MessageService messageService;
/**
* @see org.springframework.test.AbstractTransactionalSpringContextTests#onSetUpInTransaction()
*/
@Override
protected void onSetUpInTransaction() throws Exception
{
super.onSetUpInTransaction();
// Get the behaviour filter and turn the behaviour off for the model type
this.behaviourFilter = (BehaviourFilter)this.applicationContext.getBean("policyBehaviourFilter");
this.behaviourFilter.disableBehaviour(ContentModel.TYPE_DICTIONARY_MODEL);
this.dictionaryDAO = (DictionaryDAO)this.applicationContext.getBean("dictionaryDAO");
this.transactionService = (TransactionService)this.applicationContext.getBean("transactionComponent");
this.tenantAdminService = (TenantAdminService)this.applicationContext.getBean("tenantAdminService");
this.namespaceService = (NamespaceService)this.applicationContext.getBean("namespaceService");
this.messageService = (MessageService)this.applicationContext.getBean("messageService");
this.bootstrap = new DictionaryRepositoryBootstrap();
this.bootstrap.setContentService(this.contentService);
this.bootstrap.setDictionaryDAO(this.dictionaryDAO);
this.bootstrap.setTransactionService(this.transactionService);
this.bootstrap.setTenantAdminService(this.tenantAdminService);
this.bootstrap.setNodeService(this.nodeService);
this.bootstrap.setNamespaceService(this.namespaceService);
this.bootstrap.setMessageService(this.messageService);
RepositoryLocation location = new RepositoryLocation();
location.setStoreProtocol(this.storeRef.getProtocol());
location.setStoreId(this.storeRef.getIdentifier());
location.setQueryLanguage(RepositoryLocation.LANGUAGE_PATH);
// NOTE: we are not setting the path for now .. in doing so we are searching the root node only
List<RepositoryLocation> locations = new ArrayList<RepositoryLocation>();
locations.add(location);
this.bootstrap.setRepositoryModelsLocations(locations);
// register with dictionary service
this.bootstrap.register();
}
/**
* Test bootstrap
*/
public void testBootstrap()
{
createModelNode(
"http://www.alfresco.org/model/test2DictionaryBootstrapFromRepo/1.0",
"test2",
"testModel2",
" <import uri=\"http://www.alfresco.org/model/test1DictionaryBootstrapFromRepo/1.0\" prefix=\"test1\"/> ",
"Test model two",
"base2",
"prop2");
createModelNode(
"http://www.alfresco.org/model/test3DictionaryBootstrapFromRepo/1.0",
"test3",
"testModel3",
" <import uri=\"http://www.alfresco.org/model/test1DictionaryBootstrapFromRepo/1.0\" prefix=\"test1\"/> ",
"Test model three",
"base3",
"prop3");
createModelNode(
"http://www.alfresco.org/model/test1DictionaryBootstrapFromRepo/1.0",
"test1",
"testModel1",
"",
"Test model one",
"base1",
"prop1");
// Check that the model is not in the dictionary yet
try
{
this.dictionaryDAO.getModel(
QName.createQName("http://www.alfresco.org/model/test1DictionaryBootstrapFromRepo/1.0", "testModel1"));
fail("The model should not be there.");
}
catch (DictionaryException exception)
{
// Ignore since we where expecting this
}
// Now do the bootstrap
this.bootstrap.init();
// Check that the model is now there
ModelDefinition modelDefinition1 = this.dictionaryDAO.getModel(
QName.createQName("http://www.alfresco.org/model/test1DictionaryBootstrapFromRepo/1.0", "testModel1"));
assertNotNull(modelDefinition1);
ModelDefinition modelDefinition2 = this.dictionaryDAO.getModel(
QName.createQName("http://www.alfresco.org/model/test2DictionaryBootstrapFromRepo/1.0", "testModel2"));
assertNotNull(modelDefinition2);
ModelDefinition modelDefinition3 = this.dictionaryDAO.getModel(
QName.createQName("http://www.alfresco.org/model/test3DictionaryBootstrapFromRepo/1.0", "testModel3"));
assertNotNull(modelDefinition3);
}
/**
* Create model node
*
* @param uri
* @param prefix
* @param modelLocalName
* @param importStatement
* @param description
* @param typeName
* @param propertyName
* @return
*/
private NodeRef createModelNode(
String uri,
String prefix,
String modelLocalName,
String importStatement,
String description,
String typeName,
String propertyName)
{
// Create a model node
NodeRef model = this.nodeService.createNode(
this.rootNodeRef,
ContentModel.ASSOC_CHILDREN,
QName.createQName("{test}models"),
ContentModel.TYPE_DICTIONARY_MODEL).getChildRef();
ContentWriter contentWriter1 = this.contentService.getWriter(model, ContentModel.PROP_CONTENT, true);
contentWriter1.setEncoding("UTF-8");
contentWriter1.setMimetype(MimetypeMap.MIMETYPE_XML);
String modelOne = getModelString(
uri,
prefix,
modelLocalName,
importStatement,
description,
typeName,
propertyName);
contentWriter1.putContent(modelOne);
// activate the model
nodeService.setProperty(model, ContentModel.PROP_MODEL_ACTIVE, new Boolean(true));
return model;
}
/**
*
* Gets the model string
*
* @param uri
* @param prefix
* @param modelLocalName
* @param importStatement
* @param description
* @param typeName
* @param propertyName
* @return
*/
private String getModelString(
String uri,
String prefix,
String modelLocalName,
String importStatement,
String description,
String typeName,
String propertyName)
{
return MessageFormat.format(
TEMPLATE_MODEL_XML,
new Object[]{
"'" + prefix +":" + modelLocalName + "'",
description,
importStatement,
"'" + uri + "'",
"'" + prefix + "'",
"'" + prefix + ":" + typeName + "'",
"'" + prefix + ":" + propertyName + "'"});
}
}