org.jasig.schedassist.messaging.ObjectMarshallingTest.java Source code

Java tutorial

Introduction

Here is the source code for org.jasig.schedassist.messaging.ObjectMarshallingTest.java

Source

/**
 * Licensed to Jasig under one or more contributor license
 * agreements. See the NOTICE file distributed with this work
 * for additional information regarding copyright ownership.
 * Jasig licenses this file to you under the Apache License,
 * Version 2.0 (the "License"); you may not use this file
 * except in compliance with the License. You may obtain a
 * copy of the License at:
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

package org.jasig.schedassist.messaging;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;

import org.junit.Assert;
import org.junit.Test;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

/**
 * Test bench JAXB annotated objects in messaging package.
 *  
 * @author Nicholas Blair, nblair@doit.wisc.edu
 * @version $Id: ObjectMarshallingTest.java 2974 2011-01-25 13:44:23Z npblair $
 */
public class ObjectMarshallingTest {

    private final JAXBContext context;

    public ObjectMarshallingTest() {
        try {
            context = JAXBContext.newInstance(ObjectFactory.class);
        } catch (JAXBException e) {
            throw new IllegalStateException("unable to initialize JAXBContext", e);
        }
    }

    /**
     * 
     * @throws Exception
     */
    @Test
    public void testCancelAppointmentRequest() throws Exception {
        CancelAppointmentRequest request = new CancelAppointmentRequest();
        request.setEndTime(XMLDataUtils.convertDateToXMLGregorianCalendar(toDateTime("20091117-1300")));
        request.setOwnerId(42L);
        request.setReason("Some reason to cancel");
        request.setStartTime(XMLDataUtils.convertDateToXMLGregorianCalendar(toDateTime("20091117-1230")));
        request.setVisitorNetid("visitor");

        // marshal to System.out
        context.createMarshaller().marshal(request, System.out);
        System.out.println();

        // marshal to a ByteArrayOutputStream so we can unmarshal it back
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        context.createMarshaller().marshal(request, output);
        CancelAppointmentRequest unmarshalled = (CancelAppointmentRequest) context.createUnmarshaller()
                .unmarshal(new ByteArrayInputStream(output.toByteArray()));
        Assert.assertNotNull(unmarshalled);
        Assert.assertEquals(request.getOwnerId(), unmarshalled.getOwnerId());
        Assert.assertEquals(request.getReason(), unmarshalled.getReason());
        Assert.assertEquals(request.getVisitorNetid(), unmarshalled.getVisitorNetid());
        Assert.assertEquals(request.getEndTime(), unmarshalled.getEndTime());
        Assert.assertEquals(request.getStartTime(), unmarshalled.getStartTime());
    }

    /**
     * 
     * @throws Exception
     */
    @Test
    public void testCancelAppointmentResponse() throws Exception {
        CancelAppointmentResponse response = new CancelAppointmentResponse();
        response.setEndTime(XMLDataUtils.convertDateToXMLGregorianCalendar(toDateTime("20091117-1300")));
        response.setStartTime(XMLDataUtils.convertDateToXMLGregorianCalendar(toDateTime("20091117-1230")));

        // marshal to System.out
        context.createMarshaller().marshal(response, System.out);
        System.out.println();

        // marshal to a ByteArrayOutputStream so we can unmarshal it back
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        context.createMarshaller().marshal(response, output);
        CancelAppointmentResponse unmarshalled = (CancelAppointmentResponse) context.createUnmarshaller()
                .unmarshal(new ByteArrayInputStream(output.toByteArray()));
        Assert.assertNotNull(unmarshalled);
        Assert.assertEquals(response.getEndTime(), unmarshalled.getEndTime());
        Assert.assertEquals(response.getStartTime(), unmarshalled.getStartTime());
    }

    /**
     * 
     * @throws Exception
     */
    @Test
    public void testCreateAppointmentRequest() throws Exception {
        CreateAppointmentRequest request = new CreateAppointmentRequest();
        request.setSelectedDuration(60);
        request.setOwnerId(42);
        request.setEventDescription("Some reason to meet");
        request.setStartTime(XMLDataUtils.convertDateToXMLGregorianCalendar(toDateTime("20091117-1230")));
        request.setVisitorNetid("visitor");

        // marshal to System.out
        context.createMarshaller().marshal(request, System.out);
        System.out.println();

        // marshal to a ByteArrayOutputStream so we can unmarshal it back
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        context.createMarshaller().marshal(request, output);
        CreateAppointmentRequest unmarshalled = (CreateAppointmentRequest) context.createUnmarshaller()
                .unmarshal(new ByteArrayInputStream(output.toByteArray()));
        Assert.assertNotNull(unmarshalled);
        Assert.assertEquals(request.getOwnerId(), unmarshalled.getOwnerId());
        Assert.assertEquals(request.getEventDescription(), unmarshalled.getEventDescription());
        Assert.assertEquals(request.getVisitorNetid(), unmarshalled.getVisitorNetid());
        Assert.assertEquals(request.getSelectedDuration(), unmarshalled.getSelectedDuration());
        Assert.assertEquals(request.getStartTime(), unmarshalled.getStartTime());
    }

    /**
     * 
     * @throws Exception
     */
    @Test
    public void testCreateAppointmentResponse() throws Exception {
        CreateAppointmentResponse response = new CreateAppointmentResponse();
        response.setEventLocation("Some location");
        response.setEventTitle("Some meeting title");
        response.setEndTime(XMLDataUtils.convertDateToXMLGregorianCalendar(toDateTime("20091117-1300")));
        response.setStartTime(XMLDataUtils.convertDateToXMLGregorianCalendar(toDateTime("20091117-1230")));

        // marshal to System.out
        context.createMarshaller().marshal(response, System.out);
        System.out.println();

        // marshal to a ByteArrayOutputStream so we can unmarshal it back
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        context.createMarshaller().marshal(response, output);
        CreateAppointmentResponse unmarshalled = (CreateAppointmentResponse) context.createUnmarshaller()
                .unmarshal(new ByteArrayInputStream(output.toByteArray()));
        Assert.assertNotNull(unmarshalled);
        Assert.assertEquals(response.getEndTime(), unmarshalled.getEndTime());
        Assert.assertEquals(response.getStartTime(), unmarshalled.getStartTime());
        Assert.assertEquals(response.getEventLocation(), unmarshalled.getEventLocation());
        Assert.assertEquals(response.getEventTitle(), unmarshalled.getEventTitle());
    }

    /**
     * Marshal a {@link GetRelationshipsRequest} to a byte array stream, unmarshal the {@link GetRelationshipsRequest}
     * back out from the byte array stream, assert it comes back intact.
     * 
     * @throws Exception
     */
    @Test
    public void testGetRelationshipsRequest() throws Exception {
        GetRelationshipsRequest request = new GetRelationshipsRequest();
        request.setVisitorNetid("somenetid");

        ByteArrayOutputStream output = new ByteArrayOutputStream();
        context.createMarshaller().marshal(request, output);
        context.createMarshaller().marshal(request, System.out);
        System.out.println();

        GetRelationshipsRequest result = (GetRelationshipsRequest) context.createUnmarshaller()
                .unmarshal(new ByteArrayInputStream(output.toByteArray()));
        Assert.assertNotNull(result);
        Assert.assertEquals("somenetid", result.getVisitorNetid());
    }

    /**
     * 
     * @throws Exception
     */
    @Test
    public void testGetRelationshipsRequestFromSample() throws Exception {
        String requestString = "<ava:GetRelationshipsRequest xmlns:ava=\"https://source.jasig.org/schemas/sched-assist\">"
                + "<ava:visitorNetid>someperson</ava:visitorNetid>" + "</ava:GetRelationshipsRequest>";

        GetRelationshipsRequest request = (GetRelationshipsRequest) context.createUnmarshaller()
                .unmarshal(new ByteArrayInputStream(requestString.getBytes()));
        Assert.assertNotNull(request);
        Assert.assertEquals("someperson", request.getVisitorNetid());
    }

    /**
     * 
     * @throws Exception
     */
    @Test
    public void testGetRelationshipsResponseFromSample() throws Exception {
        String responseString = "<ns2:GetRelationshipsResponse xmlns:ns2=\"https://source.jasig.org/schemas/sched-assist\">"
                + "<ns2:RelationshipList>" + "<ns2:RelationshipElement>" + "<ns2:ScheduleOwnerElement>"
                + "<ns2:id>12</ns2:id>" + "<ns2:fullName>FIRST M LAST</ns2:fullName>"
                + "<ns2:netid>fmlast</ns2:netid>" + "</ns2:ScheduleOwnerElement>"
                + "<ns2:description>wisccal team</ns2:description>" + "</ns2:RelationshipElement>"
                + "</ns2:RelationshipList>" + "</ns2:GetRelationshipsResponse>";

        GetRelationshipsResponse response = (GetRelationshipsResponse) context.createUnmarshaller()
                .unmarshal(new ByteArrayInputStream(responseString.getBytes()));
        Assert.assertNotNull(response);
        RelationshipElement element = response.getRelationshipList().getRelationshipElement().get(0);
        Assert.assertEquals(12, element.getScheduleOwnerElement().getId());
        Assert.assertEquals("FIRST M LAST", element.getScheduleOwnerElement().getFullName());
        Assert.assertEquals("fmlast", element.getScheduleOwnerElement().getNetid());
        Assert.assertEquals("wisccal team", element.getDescription());
    }

    /**
     * 
     * @throws Exception
     */
    @Test
    public void testGetScheduleOwnerByIdRequest() throws Exception {
        GetScheduleOwnerByIdRequest request = new GetScheduleOwnerByIdRequest();
        request.setId(42);

        // marshal to System.out
        context.createMarshaller().marshal(request, System.out);
        System.out.println();

        // marshal to a ByteArrayOutputStream so we can unmarshal it back
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        context.createMarshaller().marshal(request, output);

        GetScheduleOwnerByIdRequest unmarshalled = (GetScheduleOwnerByIdRequest) context.createUnmarshaller()
                .unmarshal(new ByteArrayInputStream(output.toByteArray()));
        Assert.assertNotNull(unmarshalled);
        Assert.assertEquals(request.getId(), unmarshalled.getId());
    }

    /**
     * 
     * @throws Exception
     */
    @Test
    public void testGetScheduleOwnerByIdResponse() throws Exception {
        PreferencesSet preferencesSet = new PreferencesSet();
        PreferencesElement e1 = new PreferencesElement();
        e1.setKey("key1");
        e1.setValue("value1");
        PreferencesElement e2 = new PreferencesElement();
        e2.setKey("key2");
        e2.setValue("value2");
        preferencesSet.getPreferencesElement().add(e1);
        preferencesSet.getPreferencesElement().add(e2);

        ScheduleOwnerElement owner = new ScheduleOwnerElement();
        owner.setFullName("FULL NAME");
        owner.setId(42);
        owner.setNetid("netid");
        owner.setPreferencesSet(preferencesSet);
        GetScheduleOwnerByIdResponse response = new GetScheduleOwnerByIdResponse();
        response.setScheduleOwnerElement(owner);

        // marshal to System.out
        context.createMarshaller().marshal(response, System.out);
        System.out.println();

        // marshal to a ByteArrayOutputStream so we can unmarshal it back
        ByteArrayOutputStream output = new ByteArrayOutputStream();
        context.createMarshaller().marshal(response, output);

        GetScheduleOwnerByIdResponse unmarshalled = (GetScheduleOwnerByIdResponse) context.createUnmarshaller()
                .unmarshal(new ByteArrayInputStream(output.toByteArray()));
        Assert.assertNotNull(unmarshalled);
        ScheduleOwnerElement uOwner = unmarshalled.getScheduleOwnerElement();
        Assert.assertNotNull(uOwner);
        Assert.assertEquals(owner.getFullName(), uOwner.getFullName());
        Assert.assertEquals(owner.getId(), uOwner.getId());
        Assert.assertEquals(owner.getNetid(), uOwner.getNetid());
        Assert.assertEquals(owner.getPreferencesSet().getPreferencesElement(),
                uOwner.getPreferencesSet().getPreferencesElement());
    }

    /**
     * Marshal a {@link VisibleScheduleRequest} to a byte array stream, unmarshal the {@link VisibleScheduleRequest}
     * back out from the byte array stream, assert it comes back intact.
     * 
     * @throws Exception
     */
    @Test
    public void testVisibleScheduleRequest() throws Exception {
        VisibleScheduleRequest request = new VisibleScheduleRequest();
        request.setOwnerId(127L);
        GregorianCalendar calendar = new GregorianCalendar();
        calendar.setTime(new Date());
        request.setVisitorNetid("visitornetid");

        ByteArrayOutputStream output = new ByteArrayOutputStream();
        context.createMarshaller().marshal(request, output);
        context.createMarshaller().marshal(request, System.out);
        System.out.println();

        VisibleScheduleRequest result = (VisibleScheduleRequest) context.createUnmarshaller()
                .unmarshal(new ByteArrayInputStream(output.toByteArray()));
        Assert.assertNotNull(result);
        Assert.assertEquals(127L, result.getOwnerId());
        Assert.assertEquals("visitornetid", result.getVisitorNetid());
    }

    /**
     * 
     * @throws Exception
     */
    @Test
    public void testVisibleScheduleRequestFromSample() throws Exception {
        String requestString = "<ava:VisibleScheduleRequest xmlns:ava=\"https://source.jasig.org/schemas/sched-assist\">"
                + "<ava:ownerId>135</ava:ownerId>" + "<ava:visitorNetid>visitorid</ava:visitorNetid>"
                + "</ava:VisibleScheduleRequest>";

        VisibleScheduleRequest request = (VisibleScheduleRequest) context.createUnmarshaller()
                .unmarshal(new ByteArrayInputStream(requestString.getBytes()));
        Assert.assertNotNull(request);
        Assert.assertEquals(135L, request.getOwnerId());
        Assert.assertEquals("visitorid", request.getVisitorNetid());
        // verify default value of 1 is set
        Assert.assertEquals(1, request.getWeekStart());
    }

    /**
     * 
     * @throws Exception
     */
    @Test
    public void testVisibleScheduleRequestWithWeekStart() throws Exception {
        String requestString = "<ava:VisibleScheduleRequest xmlns:ava=\"https://source.jasig.org/schemas/sched-assist\">"
                + "<ava:ownerId>135</ava:ownerId>" + "<ava:visitorNetid>visitorid</ava:visitorNetid>"
                + "<ava:weekStart>6</ava:weekStart>" + "</ava:VisibleScheduleRequest>";

        VisibleScheduleRequest request = (VisibleScheduleRequest) context.createUnmarshaller()
                .unmarshal(new ByteArrayInputStream(requestString.getBytes()));
        Assert.assertNotNull(request);
        Assert.assertEquals(135L, request.getOwnerId());
        Assert.assertEquals("visitorid", request.getVisitorNetid());
        Assert.assertEquals(6, request.getWeekStart());
    }

    /**
     * 
     * @throws Exception
     */
    @Test
    public void testGetTargetAvailableBlockRequest() throws Exception {
        GetTargetAvailableBlockRequest request = new GetTargetAvailableBlockRequest();
        request.setDoubleLength(true);
        request.setOwnerId(42);
        Date now = new Date();
        request.setStartTime(XMLDataUtils.convertDateToXMLGregorianCalendar(now));

        ByteArrayOutputStream output = new ByteArrayOutputStream();
        context.createMarshaller().marshal(request, output);
        context.createMarshaller().marshal(request, System.out);
        System.out.println();

        GetTargetAvailableBlockRequest result = (GetTargetAvailableBlockRequest) context.createUnmarshaller()
                .unmarshal(new ByteArrayInputStream(output.toByteArray()));
        Assert.assertNotNull(result);
        Assert.assertEquals(42, result.getOwnerId());
        Assert.assertEquals(true, result.isDoubleLength());
        Assert.assertEquals(now, XMLDataUtils.convertXMLGregorianCalendarToDate(result.getStartTime()));
    }

    /**
     * 
     * @throws Exception
     */
    @Test
    public void testGetTargetAvailableBlockResponse() throws Exception {
        AvailableBlockElement element = new AvailableBlockElement();
        Date start = toDateTime("20091120-1200");
        Date end = toDateTime("20091120-1230");
        element.setStartTime(XMLDataUtils.convertDateToXMLGregorianCalendar(start));
        element.setEndTime(XMLDataUtils.convertDateToXMLGregorianCalendar(end));
        element.setStatus(AvailableStatusType.FREE);
        element.setVisitorLimit(1);
        element.setVisitorsAttending(0);

        GetTargetAvailableBlockResponse response = new GetTargetAvailableBlockResponse();
        response.setAvailableBlockElement(element);

        ByteArrayOutputStream output = new ByteArrayOutputStream();
        context.createMarshaller().marshal(response, output);
        context.createMarshaller().marshal(response, System.out);
        System.out.println();

        GetTargetAvailableBlockResponse result = (GetTargetAvailableBlockResponse) context.createUnmarshaller()
                .unmarshal(new ByteArrayInputStream(output.toByteArray()));
        Assert.assertNotNull(result);
        Assert.assertEquals(0, result.getAvailableBlockElement().getVisitorsAttending());
        Assert.assertEquals(1, result.getAvailableBlockElement().getVisitorLimit());
        Assert.assertEquals(AvailableStatusType.FREE, result.getAvailableBlockElement().getStatus());
        Assert.assertEquals(start,
                XMLDataUtils.convertXMLGregorianCalendarToDate(result.getAvailableBlockElement().getStartTime()));
        Assert.assertEquals(end,
                XMLDataUtils.convertXMLGregorianCalendarToDate(result.getAvailableBlockElement().getEndTime()));
    }

    @Test
    public void testUnmarshalGetRelationshipsResponseControl() throws JAXBException, IOException {
        Unmarshaller u = context.createUnmarshaller();
        Resource getRelationshipsResponseControl = new ClassPathResource(
                "messaging-examples/GetRelationshipsResponse-control.xml");

        GetRelationshipsResponse response = (GetRelationshipsResponse) u
                .unmarshal(getRelationshipsResponseControl.getInputStream());
        Assert.assertNotNull(response);
        RelationshipList list = response.getRelationshipList();
        Assert.assertEquals(1, list.getRelationshipElement().size());
        RelationshipElement r = list.getRelationshipElement().get(0);
        Assert.assertEquals("Bedework Development Team", r.getDescription());
        ScheduleOwnerElement owner = r.getScheduleOwnerElement();
        Assert.assertEquals(1L, owner.getId());
        Assert.assertEquals("schwag", owner.getNetid());
        Assert.assertEquals("Schwartz, Gary", owner.getFullName());
        PreferencesSet preferences = owner.getPreferencesSet();
        List<PreferencesElement> elements = preferences.getPreferencesElement();
        Assert.assertEquals(10, elements.size());
    }

    /**
     * Helper function to convert a {@link String} in the format
     * "yyyyMMdd-HHmm" to the corresponding {@link Date}.
     * 
     * @param value
     * @return
     * @throws ParseException
     */
    private Date toDateTime(final String value) throws ParseException {
        SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd-HHmm");
        return df.parse(value);
    }
}