/*
* Copyright (C) 2003-2010 eXo Platform SAS.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either version 3
* 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, see<http://www.gnu.org/licenses/>.
*/
package org.exoplatform.ecms.upgrade.test;
import java.io.InputStream;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.PathNotFoundException;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.version.Version;
import org.exoplatform.commons.info.ProductInformations;
import org.exoplatform.commons.upgrade.UpgradeProductService;
import org.exoplatform.container.PortalContainer;
import org.exoplatform.container.configuration.ConfigurationManager;
import org.exoplatform.services.cms.templates.TemplateService;
import org.exoplatform.services.jcr.RepositoryService;
import org.exoplatform.services.wcm.utils.WCMCoreUtils;
import org.exoplatform.test.BasicTestCase;
import org.junit.Ignore;
/**
* @author Boubaker KHANFIR
*/
@Ignore
public class TestECMSUpgrade extends BasicTestCase {
private static final String OLD_PRODUCT_INFORMATIONS_FILE = "classpath:/conf/product_old.properties";
private static final String OLD_VERSION = "1.0-old";
protected final String REPO_NAME = "repository";
protected final String COLLABORATION_WS = "collaboration";
protected PortalContainer container;
protected RepositoryService repositoryService;
protected TemplateService templateService;
protected ProductInformations productInformations;
protected ConfigurationManager configurationManager;
public void setUp() throws Exception {
container = PortalContainer.getInstance();
repositoryService = getService(RepositoryService.class);
templateService = getService(TemplateService.class);
productInformations = getService(ProductInformations.class);
UpgradeProductService upgradeService = getService(UpgradeProductService.class);
configurationManager = getService(ConfigurationManager.class);
Session session = null;
try {
InputStream oldVersionsContentIS = configurationManager.getInputStream(OLD_PRODUCT_INFORMATIONS_FILE);
byte[] binaries = new byte[oldVersionsContentIS.available()];
oldVersionsContentIS.read(binaries);
String oldVersionsContent = new String(binaries);
session = repositoryService.getRepository(REPO_NAME).getSystemSession(COLLABORATION_WS);
Node plfVersionDeclarationNode = getProductVersionNode(session);
Node plfVersionDeclarationContentNode = plfVersionDeclarationNode.getNode("jcr:content");
plfVersionDeclarationContentNode.setProperty("jcr:data", oldVersionsContent);
session.save();
session.refresh(true);
} finally {
if (session != null) {
session.logout();
}
}
// invoke productInformations() explicitly to store the new version in the JCR
productInformations.start();
upgradeService.start();
}
public void testUpgradeNodeTypesTemplates() throws Exception {
templateService.getAllDocumentNodeTypes();
NodeIterator iter = templateService.getAllTemplatesOfNodeType(true, "nt:file", WCMCoreUtils.getSystemSessionProvider());
while (iter.hasNext()) {
Node node = (Node) iter.next();
assertTrue(node.isNodeType(ProductInformations.MIX_VERSIONABLE));
Version version = node.getBaseVersion();
assertNotNull(version);
String[] versionLabels = node.getVersionHistory().getVersionLabels(version);
assertNotNull(versionLabels);
assertEquals(versionLabels.length, 1);
assertEquals(versionLabels[0], OLD_VERSION);
}
}
protected <T> T getService(Class<T> clazz) {
return clazz.cast(container.getComponentInstanceOfType(clazz));
}
private Node getProductVersionNode(Session session) throws PathNotFoundException, RepositoryException {
Node plfVersionDeclarationNodeContent = ((Node) session
.getItem("/Application Data/" + ProductInformations.UPGRADE_PRODUCT_SERVICE_NODE_NAME + "/"
+ ProductInformations.PRODUCT_VERSION_DECLARATION_NODE_NAME));
return plfVersionDeclarationNodeContent;
}
}