/*
* Copyright (C) 2009 eXo Platform SAS.
*
* This 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 2.1 of
* the License, or (at your option) any later version.
*
* This software 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 this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.exoplatform.services.jcr.usecases.index;
import org.exoplatform.container.StandaloneContainer;
import org.exoplatform.services.document.DocumentReaderService;
import org.exoplatform.services.jcr.usecases.BaseUsecasesTest;
import java.io.InputStream;
import java.util.Calendar;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.query.Query;
import javax.jcr.query.QueryResult;
/**
* Created by The eXo Platform SAS.
*
* @author <a href="mailto:zagrebin_v@mail.ru">Victor Zagrebin</a>
* @version $Id: IndexExcelFileTest.java 11907 2008-03-13 15:36:21Z ksm $
*
* The test for indexing an excel .xls file which contained within jcr:data property
*/
public class IndexExcelFileTest extends BaseUsecasesTest
{
/**
* The test for indexing an excel .xls file
*
* @throws Exception
*/
public void testIndexTextPlainFile() throws Exception
{
InputStream is = IndexExcelFileTest.class.getResourceAsStream("/index/test_index.xls");
assertNotNull("Can not create an input stream from file for indexing", is);
Node cmr = root.addNode("cmr").addNode("categories").addNode("cmr");
Node cool = cmr.addNode("cool", "nt:file");
Node contentNode = cool.addNode("jcr:content", "nt:resource");
contentNode.setProperty("jcr:encoding", "UTF-8");
contentNode.setProperty("jcr:data", is);
contentNode.setProperty("jcr:mimeType", "application/excel");
contentNode.setProperty("jcr:lastModified", session.getValueFactory().createValue(Calendar.getInstance()));
assertNotNull("Can not create a cmr node for indexing", cmr);
assertNotNull("Can not create a cool node for indexing", cool);
assertNotNull("Can not create a contentNode node for indexing", contentNode);
Node football = cmr.addNode("sports").addNode("football");
Node news = cmr.addNode("news");
Node uefa = football.addNode("uefa");
Node champions_league = football.addNode("champions-league");
Node economy = news.addNode("economy");
Node world = news.addNode("world");
assertNotNull("Can not create a football node for indexing", football);
assertNotNull("Can not create a news node for indexing", news);
assertNotNull("Can not create an uefa node for indexing", uefa);
assertNotNull("Can not create a champions_league node for indexing", champions_league);
assertNotNull("Can not create an economy node for indexing", economy);
assertNotNull("Can not create a world node for indexing", world);
session.save();
Query q;
String xpath = "//*[jcr:contains(., 'excel file content')]";
q = session.getWorkspace().getQueryManager().createQuery(xpath, Query.XPATH);
assertNotNull("Can not create a query for indexing", q);
QueryResult result = q.execute();
for (NodeIterator it = result.getNodes(); it.hasNext();)
{
Node next = it.nextNode();
if (next.getPrimaryNodeType().getName().equals("nt:resource"))
{
if (next.hasProperty("jcr:data"))
{
String mimeType = "";
if (next.hasProperty("jcr:mimeType"))
{
mimeType = next.getProperty("jcr:mimeType").getString();
}
is = next.getProperty("jcr:data").getStream();
StandaloneContainer scontainer = StandaloneContainer.getInstance();
DocumentReaderService service_ =
(DocumentReaderService)scontainer.getComponentInstanceOfType(DocumentReaderService.class);
assertNotNull("Can not create service_ a for indexing", world);
String found_text = service_.getContentAsText(mimeType, is);
assertNotNull("Can not create found_text for indexing", world);
is.close();
}
}
}
// fail("QUERY TEST");
}
}