package com.processpuzzle.business.definition.domain;
import java.io.StringWriter;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.junit.Test;
import org.w3c.dom.Document;
import com.processpuzzle.artifact_type_group.domain.ArtifactTypeGroup;
import com.processpuzzle.party.domain.Company;
import com.processpuzzle.party.domain.Person;
import com.processpuzzle.party.partytype.domain.PartyType;
public class BusinessDefinitionMarshallTest {
private BusinessDefinition businessDefinition;
private Document outputDocument;
private ArtifactTypeGroup systemAdministrationGroup;
@Test public void marhallBusinessDefinition() throws TransformerException{
defineTestData();
instantiateOutputDocument();
marshallBusinessDefinition();
printOutputToConsole();
}
//Private helper methods
private void defineArtifactTypeGroups() {
systemAdministrationGroup = new ArtifactTypeGroup( "SystemAdministration" );
businessDefinition.addArtifactTypeGroup( systemAdministrationGroup );
}
private void definePartyTypes() {
PartyType personType = new PartyType( "PersonType" );
personType.setDescription( "Defines human beings playing a role in different context." );
personType.setPartyClassName( Person.class.getCanonicalName() );
PartyType companyType = new PartyType( "CompanyType" );
companyType.setDescription( "Defines a business targeted organization type." );
companyType.setPartyClassName( Company.class.getCanonicalName() );
businessDefinition.addPartyType( personType );
businessDefinition.addPartyType( companyType );
}
private void defineTestData() {
businessDefinition = new BusinessDefinition();
definePartyTypes();
defineArtifactTypeGroups();
}
private void instantiateOutputDocument() {
try{
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
documentBuilderFactory.setNamespaceAware(true);
DocumentBuilder documentBuilder;
documentBuilder = documentBuilderFactory.newDocumentBuilder();
outputDocument = documentBuilder.newDocument();
}catch( ParserConfigurationException e1 ){
e1.printStackTrace();
}
}
private void marshallBusinessDefinition() {
JAXBContext jaxbContext = null;
try{
jaxbContext = JAXBContext.newInstance( new Class[] { BusinessDefinition.class } );
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.marshal( businessDefinition, outputDocument );
}catch( JAXBException e ){
e.printStackTrace();
}
}
private void printOutputToConsole() throws TransformerException{
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty( OutputKeys.INDENT, "yes" );
transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "3");
DOMSource source = new DOMSource( outputDocument );
StringWriter writer = new StringWriter();
transformer.transform( source, new StreamResult( writer ));
System.out.println( writer.getBuffer().toString() );
}
}