/*
* Copyright 2012 JBoss Inc
*
* Licensed 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.artificer.integration.artifactbuilder;
import org.apache.commons.io.IOUtils;
import org.junit.Assert;
import org.junit.Test;
import org.oasis_open.docs.s_ramp.ns.s_ramp_v1.*;
import org.artificer.common.ArtifactContent;
import javax.xml.datatype.DatatypeFactory;
import javax.xml.datatype.XMLGregorianCalendar;
import java.io.InputStream;
import java.util.*;
/**
* Unit test for the {@link XsdDocumentArtifactBuilder} class.
*
* @author eric.wittmann@redhat.com
*/
public class XsdDocumentArtifactBuilderTest {
private static final Set<String> EXPECTED_ELEMENT_NAMES = set("excludedOwners", "taskStakeholders",
"recipients", "task", "leanTask", "potentialOwners", "businessAdministrators", "tasks",
"logicalPeopleGroups", "genericHumanRole", "notifications", "priority", "taskInitiator",
"notification", "import", "peopleAssignments", "humanInteractions");
private static final Set<String> EXPECTED_ATTRIBUTE_NAMES = set();
private static final Set<String> EXPECTED_SIMPLE_TYPE_NAMES = set("tPotentialDelegatees", "tPattern",
"tRoutingPatternType", "tBoolean", "tCompositionType");
private static final Set<String> EXPECTED_COMPLEX_TYPE_NAMES = set("tFrom", "tAggregate",
"tMessageSchema", "tToPart", "tText", "tComposition", "tParameter", "tPeopleAssignments",
"tExtension", "tRendering", "tPriority-expr", "tTask", "tReassignment", "tNotification",
"tMessageField", "tDeadlines", "tCopy", "tDocumentation", "tDuration-expr",
"tNotificationInterface", "tCompletion", "tExtensibleElements", "tHumanInteractions",
"tTaskInterface", "tPotentialOwnerAssignment", "tNotifications", "tExtensions",
"tPresentationParameter", "tPresentationElements", "tDeadline-expr", "tTasks",
"tLogicalPeopleGroups", "tDescription", "tQuery", "tLocalNotification", "tLogicalPeopleGroup",
"tSubtask", "tExtensibleMixedContentElements", "tSequence", "tExpression", "tToParts", "tResult",
"tRenderings", "tGenericHumanRoleAssignmentBase", "tParallel", "tDeadline",
"tPresentationParameters", "tArgument", "tMessageChoice", "tDelegation", "tLocalTask",
"tBoolean-expr", "tEscalation", "tLeanTask", "tImport", "tDefaultCompletion", "tMessageDisplay",
"tCompletionBehavior", "tGenericHumanRoleAssignment", "tLiteral", "tTaskBase");
@Test
public void testDerive() throws Exception {
DatatypeFactory dtFactory = DatatypeFactory.newInstance();
XsdDocumentArtifactBuilder builder = new XsdDocumentArtifactBuilder();
XsdDocument testSrcArtifact = new XsdDocument();
testSrcArtifact.setArtifactType(BaseArtifactEnum.XSD_DOCUMENT);
testSrcArtifact.setUuid(UUID.randomUUID().toString());
testSrcArtifact.setName("ws-humantask.xsd");
testSrcArtifact.setVersion("1.0");
testSrcArtifact.setContentEncoding("UTF-8");
testSrcArtifact.setContentType("application/xml");
testSrcArtifact.setContentSize(31723L);
testSrcArtifact.setCreatedBy("anonymous");
XMLGregorianCalendar xmlGC = dtFactory.newXMLGregorianCalendar(new GregorianCalendar());
testSrcArtifact.setCreatedTimestamp(xmlGC);
testSrcArtifact.setDescription("Hello world.");
testSrcArtifact.setLastModifiedBy("anonymous");
testSrcArtifact.setLastModifiedTimestamp(xmlGC);
InputStream testSrcContent = null;
try {
testSrcContent = getClass().getResourceAsStream("/sample-files/xsd/ws-humantask.xsd");
Collection<BaseArtifactType> derivedArtifacts = builder.buildArtifacts(testSrcArtifact,
new ArtifactContent("ws-humantask.xsd", testSrcContent)).getDerivedArtifacts();
Assert.assertNotNull(derivedArtifacts);
Assert.assertEquals(83, derivedArtifacts.size());
int numElements = 0;
int numAttributes = 0;
int numSimpleTypes = 0;
int numComplexTypes = 0;
Set<String> elementNames = new HashSet<String>();
Set<String> attributeNames = new HashSet<String>();
Set<String> simpleTypeNames = new HashSet<String>();
Set<String> complexTypeNames = new HashSet<String>();
for (BaseArtifactType derivedArtifact : derivedArtifacts) {
DerivedArtifactType dat = (DerivedArtifactType) derivedArtifact;
Assert.assertEquals(testSrcArtifact.getUuid(), dat.getRelatedDocument().getValue());
Assert.assertEquals(DocumentArtifactEnum.XSD_DOCUMENT, dat.getRelatedDocument().getArtifactType());
if (dat instanceof ElementDeclaration) {
numElements++;
elementNames.add(((ElementDeclaration) dat).getNCName());
} else if (dat instanceof AttributeDeclaration) {
numAttributes++;
attributeNames.add(((AttributeDeclaration) dat).getNCName());
} else if (dat instanceof SimpleTypeDeclaration) {
numSimpleTypes++;
simpleTypeNames.add(((SimpleTypeDeclaration) dat).getNCName());
} else if (dat instanceof ComplexTypeDeclaration) {
numComplexTypes++;
complexTypeNames.add(((ComplexTypeDeclaration) dat).getNCName());
}
}
// Verify the counts
Assert.assertEquals(17, numElements);
Assert.assertEquals(0, numAttributes);
Assert.assertEquals(5, numSimpleTypes);
Assert.assertEquals(61, numComplexTypes);
Assert.assertEquals(83, numElements + numAttributes + numSimpleTypes + numComplexTypes);
// Verify the names
Assert.assertEquals(EXPECTED_ELEMENT_NAMES, elementNames);
Assert.assertEquals(EXPECTED_ATTRIBUTE_NAMES, attributeNames);
Assert.assertEquals(EXPECTED_SIMPLE_TYPE_NAMES, simpleTypeNames);
Assert.assertEquals(EXPECTED_COMPLEX_TYPE_NAMES, complexTypeNames);
} finally {
IOUtils.closeQuietly(testSrcContent);
}
}
/**
* Make a set from values.
* @param values
*/
private static Set<String> set(String ... values) {
Set<String> rval = new HashSet<String>();
for (String val : values) {
rval.add(val);
}
return rval;
}
}