/*******************************************************************************
* Australian National University Data Commons
* Copyright (C) 2013 The Australian National University
*
* This file is part of Australian National University Data Commons.
*
* Australian National University Data Commons 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 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 au.edu.anu.datacommons.doi;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.io.StringWriter;
import java.net.URI;
import javax.ws.rs.core.UriBuilder;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import org.datacite.schema.kernel_2.Resource;
import org.datacite.schema.kernel_2.Resource.Creators;
import org.datacite.schema.kernel_2.Resource.Creators.Creator;
import org.datacite.schema.kernel_2.Resource.Identifier;
import org.datacite.schema.kernel_2.Resource.Titles;
import org.datacite.schema.kernel_2.Resource.Titles.Title;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.sun.jersey.test.framework.JerseyTest;
public class DoiClientTest extends JerseyTest
{
private static final Logger LOGGER = LoggerFactory.getLogger(DoiClientTest.class);
private DoiClient doiClient;
private String sampleDoi = "10.5072/13/50639BFE25F18";
private static JAXBContext context;
private Marshaller marshaller;
private Unmarshaller unmarshaller;
public DoiClientTest()
{
super("au.edu.anu.datacommons.doi");
// LOGGER.trace("In Constructor");
// WebResource webResource = resource();
// DoiConfig doiConfig = new DoiConfigImpl(webResource.getURI().toString(), appId);
// doiClient = new DoiClient(doiConfig);
doiClient = new DoiClient();
}
@BeforeClass
public static void setUpBeforeClass() throws Exception
{
context = JAXBContext.newInstance(Resource.class);
}
@AfterClass
public static void tearDownAfterClass() throws Exception
{
}
@Before
public void setUp() throws Exception
{
super.setUp();
marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.setProperty(Marshaller.JAXB_SCHEMA_LOCATION, "http://datacite.org/schema/kernel-2.2 http://schema.datacite.org/meta/kernel-2.2/metadata.xsd");
}
@After
public void tearDown() throws Exception
{
super.tearDown();
}
@Ignore
public void testMint()
{
try
{
doiClient.mint("https://datacommons.anu.edu.au:8443/DataCommons/item/anudc:3320", generateSampleResource());
String respStr = doiClient.getDoiResponseAsString();
LOGGER.trace(respStr);
}
catch (Exception e)
{
failOnException(e);
}
}
@Ignore
public void testUpdate()
{
try
{
Resource res = new Resource();
Creators creators = new Creators();
Creator creator = new Creator();
creator.setCreatorName("Creator 1");
creators.getCreator().add(creator);
res.setCreators(creators);
Titles titles = new Titles();
Title title = new Title();
title.setValue("Title 1");
titles.getTitle().add(title);
res.setTitles(titles);
res.setPublisher("Publisher 1");
res.setPublicationYear("1987");
Identifier id = new Identifier();
id.setValue(sampleDoi);
id.setIdentifierType("DOI");
res.setIdentifier(id);
doiClient.update(sampleDoi, null, res);
Resource newRes = doiClient.getMetadata(sampleDoi);
String resAsStr = getResourceAsString(newRes);
LOGGER.trace(resAsStr);
}
catch (Exception e)
{
failOnException(e);
}
}
@Ignore
public void testDeactivate()
{
try
{
doiClient.deactivate(sampleDoi);
assertTrue(doiClient.getDoiResponseAsString().indexOf("AbsolutePath:" + resource().getURI().toString() + "deactivate.xml/") != -1);
// assertTrue(doiClient.getDoiResponseAsString().indexOf("QueryParam:app_id=TEST" + appId) != -1);
assertTrue(doiClient.getDoiResponseAsString().indexOf("QueryParam:doi=" + sampleDoi) != -1);
}
catch (Exception e)
{
failOnException(e);
}
}
@Ignore
public void testActivate()
{
try
{
doiClient.activate(sampleDoi);
assertTrue(doiClient.getDoiResponseAsString().indexOf("AbsolutePath:" + resource().getURI().toString() + "activate.xml/") != -1);
// assertTrue(doiClient.getDoiResponseAsString().indexOf("QueryParam:app_id=TEST" + appId) != -1);
assertTrue(doiClient.getDoiResponseAsString().indexOf("QueryParam:doi=" + sampleDoi) != -1);
}
catch (Exception e)
{
failOnException(e);
}
}
@Test
public void testGetDoiMetaData()
{
try
{
Resource res = doiClient.getMetadata(sampleDoi);
StringWriter strW = new StringWriter();
marshaller.marshal(res, strW);
// assertTrue(doiClient.getDoiResponseAsString().indexOf("AbsolutePath:" + resource().getURI().toString() + "xml.xml/") != -1);
// assertTrue(doiClient.getDoiResponseAsString().indexOf("QueryParam:doi=" + sampleDoi) != -1);
}
catch (Exception e)
{
failOnException(e);
}
}
private Resource generateSampleResource()
{
Resource metadata = new Resource();
Titles titles = new Titles();
Title title1 = new Title();
title1.setValue("Some title without a type");
titles.getTitle().add(title1);
metadata.setTitles(titles);
Creators creators = new Creators();
metadata.setCreators(creators);
Creator creator = new Creator();
creator.setCreatorName("Professor John Smith");
metadata.getCreators().getCreator().add(creator);
metadata.setPublisher("Some random publisher");
metadata.setPublicationYear("2010");
return metadata;
}
private String getResourceAsString(Resource res) throws JAXBException
{
StringWriter strW = new StringWriter();
marshaller.marshal(res, strW);
return strW.toString();
}
private void failOnException(Throwable e)
{
LOGGER.error(e.getMessage(), e);
fail(e.getMessage());
}
}