/*
* Copyright (C) 2014 Jan Pokorsky
*
* 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 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 cz.cas.lib.proarc.common.object;
import com.yourmediashelf.fedora.generated.management.DatastreamProfile;
import cz.cas.lib.proarc.common.fedora.BinaryEditor;
import cz.cas.lib.proarc.common.fedora.DigitalObjectException;
import cz.cas.lib.proarc.common.fedora.DigitalObjectNotFoundException;
import cz.cas.lib.proarc.common.fedora.FedoraTestSupport;
import cz.cas.lib.proarc.common.fedora.LocalStorage;
import cz.cas.lib.proarc.common.fedora.LocalStorage.LocalObject;
import cz.cas.lib.proarc.common.fedora.RemoteStorage;
import cz.cas.lib.proarc.common.fedora.RemoteStorage.RemoteObject;
import cz.cas.lib.proarc.common.imports.TiffImporterTest;
import java.util.logging.Logger;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.Status;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;
import org.junit.Assume;
import org.junit.Rule;
import org.junit.rules.TestName;
/**
*
* @author Jan Pokorsky
*/
public class DefaultDisseminationHandlerTest {
private static final Logger LOG = Logger.getLogger(DefaultDisseminationHandlerTest.class.getName());
private static RemoteObject robject;
private static FedoraTestSupport fedora;
@Rule
public TestName test = new TestName();
public DefaultDisseminationHandlerTest() {
}
@BeforeClass
public static void setUpClass() throws Exception {
fedora = new FedoraTestSupport();
fedora.cleanUp();
LocalObject object = new LocalStorage().create();
object.setLabel(DefaultDisseminationHandlerTest.class.getSimpleName());
RemoteStorage rStorage = fedora.getRemoteStorage();
rStorage.ingest(object, fedora.getTestUser());
robject = rStorage.find(object.getPid());
LOG.info(robject.getPid());
}
@AfterClass
public static void tearDownClass() {
}
@Before
public void setUp() {
}
@After
public void tearDown() {
}
@Test
public void testGetDissemination_RemoteNotFound() throws Exception {
final DigitalObjectHandler pageObject = new DigitalObjectHandler(robject, null);
DefaultDisseminationHandler handler = new DefaultDisseminationHandler("unknownDatastreamId", pageObject);
try {
Response response = handler.getDissemination(null);
fail(robject.getPid());
} catch (DigitalObjectNotFoundException ex) {
assertEquals(robject.getPid(), ex.getPid());
}
}
@Test
public void testSetIconAsDissemination() throws Exception {
final MediaType mime = new MediaType("application", "pdf");
final String dsId = BinaryEditor.PREVIEW_ID;
assumeIcon(mime, dsId);
final DigitalObjectHandler pageObject = new DigitalObjectHandler(robject, null);
DefaultDisseminationHandler handler = new DefaultDisseminationHandler(dsId, pageObject);
String t = test.getMethodName();
// fedora.getClient().debug(true);
handler.setIconAsDissemination(dsId, mime, BinaryEditor.PREVIEW_LABEL, t);
pageObject.commit();
Response response = handler.getDissemination(null);
assertNotNull(robject.getPid(), response);
assertEquals(robject.getPid(), Status.OK.getStatusCode(), response.getStatus());
}
@Test
public void testSetIconAsDissemination_Update() throws Exception {
// fedora.getClient().debug(true);
String testName = test.getMethodName();
final MediaType mime = new MediaType("application", "pdf");
final String dsId = BinaryEditor.RAW_ID;
assumeIcon(mime, dsId);
BinaryEditor beditor = BinaryEditor.dissemination(robject, dsId, mime);
beditor.write(TiffImporterTest.class.getResource("pdfa_test.pdf").toURI(), beditor.getLastModified(), testName);
robject.flush();
final DigitalObjectHandler pageObject = new DigitalObjectHandler(robject, null);
DefaultDisseminationHandler handler = new DefaultDisseminationHandler(dsId, pageObject);
handler.setIconAsDissemination(mime, BinaryEditor.PREVIEW_LABEL, testName);
pageObject.commit();
Response response = handler.getDissemination(null);
System.out.println(response.getMetadata());
assertNotNull(robject.getPid(), response);
assertEquals(robject.getPid(), Status.OK.getStatusCode(), response.getStatus());
assertEquals(response.getMetadata().toString(), BinaryEditor.IMAGE_JPEG,
response.getMetadata().getFirst("Content-Type"));
}
/**
* Runs test just in case an icon for given MIME and stream ID exists
*/
private void assumeIcon(final MediaType mime, final String dsId) throws DigitalObjectException {
RemoteObject icon = fedora.getRemoteStorage().find(DefaultDisseminationHandler.mime2iconPid(mime));
try {
DatastreamProfile iconDs = DefaultDisseminationHandler.findProfile(dsId, icon.getDatastreams());
if (iconDs != null) {
return ;
}
DatastreamProfile iconDefaultDs = DefaultDisseminationHandler.findProfile(
BinaryEditor.THUMB_ID, icon.getDatastreams());
Assume.assumeNotNull(iconDefaultDs);
} catch (DigitalObjectNotFoundException ex) {
Assume.assumeNoException(ex);
}
}
}