package org.easysoa.registry; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import org.easysoa.registry.test.AbstractRegistryTest; import org.easysoa.registry.types.Deliverable; import org.easysoa.registry.types.DeployedDeliverable; import org.easysoa.registry.types.Endpoint; import org.easysoa.registry.types.EndpointConsumption; import org.easysoa.registry.types.IntelligentSystem; import org.easysoa.registry.types.IntelligentSystemTreeRoot; import org.easysoa.registry.types.OperationInformation; import org.easysoa.registry.types.Repository; import org.easysoa.registry.types.InformationService; import org.easysoa.registry.types.ServiceImplementation; import org.easysoa.registry.types.SoftwareComponent; import org.easysoa.registry.types.SystemTreeRoot; import org.easysoa.registry.types.TaggingFolder; import org.easysoa.registry.types.ids.EndpointId; import org.easysoa.registry.types.ids.SoaNodeId; import org.easysoa.registry.utils.DocumentModelHelper; import org.junit.Assert; import org.junit.Test; import org.nuxeo.ecm.core.api.ClientException; import org.nuxeo.ecm.core.api.DocumentModel; import org.nuxeo.ecm.core.schema.SchemaManager; import com.google.inject.Inject; /** * * @author mkalam-alami * */ public class DoctypesTest extends AbstractRegistryTest { @SuppressWarnings("unused") private static Logger logger = Logger.getLogger(DoctypesTest.class); @Inject SchemaManager schemaManager; @Inject DocumentService documentService; @Test public void testDoctypesAvailability() throws ClientException { String[] doctypes = new String[] { Deliverable.DOCTYPE, DeployedDeliverable.DOCTYPE, Endpoint.DOCTYPE, IntelligentSystem.DOCTYPE, IntelligentSystemTreeRoot.DOCTYPE, Repository.DOCTYPE, InformationService.DOCTYPE, ServiceImplementation.DOCTYPE, SoftwareComponent.DOCTYPE, SystemTreeRoot.DOCTYPE, TaggingFolder.DOCTYPE }; for (String doctype : doctypes) { Assert.assertNotNull("Doctype " + doctype + " must exist", schemaManager.getDocumentType(doctype)); } } @Test public void testDocumentAdapters() throws ClientException { // Create a deliverable DocumentModel deliverableModel = documentService.create(documentManager, new SoaNodeId(Deliverable.DOCTYPE, "MyDeliverable"), DocumentModelHelper.getWorkspacesPath(documentManager, defaultSubprojectId)); // Use its adapter Deliverable deliverable = deliverableModel.getAdapter(Deliverable.class); Assert.assertNotNull("Document model must be adapted as a deliverable", deliverable); } @Test public void testServiceImplComplexProps() throws Exception { // Create ServiceImpl SoaNodeId serviceImplId = new SoaNodeId(ServiceImplementation.DOCTYPE, "MyServiceImpl"); DocumentModel serviceImplModel = documentService.create(documentManager, serviceImplId); String opName = "Yo"; String params = "Param1:java.lang.int, Param2:my.Class"; String returnParams = "YoResponse:java.lang.String"; String opDoc = "This does something"; String inContentType = "text/xml"; String outContentType = "application/json"; // http://stackoverflow.com/questions/477816/what-is-the-correct-json-content-type // Use adapter to manipulate operations ServiceImplementation serviceImpl = serviceImplModel.getAdapter(ServiceImplementation.class); List<OperationInformation> operations = serviceImpl.getOperations(); operations.add(new OperationInformation(opName, params, returnParams, opDoc, inContentType, outContentType)); serviceImpl.setOperations(operations); List<String> tests = new ArrayList<String>(); tests.add("org.easysoa.TestClass1"); tests.add("org.easysoa.TestClass2"); serviceImpl.setTests(tests); // Save documentManager.saveDocument(serviceImplModel); documentManager.save(); // Fetch document again, check operations update serviceImplModel = documentService.findSoaNode(documentManager, serviceImplId); serviceImpl = serviceImplModel.getAdapter(ServiceImplementation.class); operations = serviceImpl.getOperations(); Assert.assertEquals(1, operations.size()); Assert.assertEquals(opName, operations.get(0).getName()); Assert.assertEquals(params, operations.get(0).getParameters()); Assert.assertEquals(returnParams, operations.get(0).getReturnParameters()); Assert.assertEquals(opDoc, operations.get(0).getDocumentation()); Assert.assertEquals(inContentType, operations.get(0).getInContentType()); Assert.assertEquals(outContentType, operations.get(0).getOutContentType()); Assert.assertEquals(opDoc, operations.get(0).getDocumentation()); Assert.assertEquals(2, serviceImpl.getTests().size()); } @Test public void testEndpointConsumptionRelations() throws Exception { // Create endpoint consumption SoaNodeId endpointConsumptionId = new SoaNodeId(EndpointConsumption.DOCTYPE, "MyConsumption"); DocumentModel endpointConsumptionModel = documentService.create(documentManager, endpointConsumptionId); EndpointConsumption endpointConsumption = endpointConsumptionModel.getAdapter(EndpointConsumption.class); Assert.assertNotNull("EndpointConsumption adapter must be available", endpointConsumption); documentManager.save(); // Manipulate and test it Assert.assertNull("EndpointConsumption must not initially consume endpoints", endpointConsumption.getConsumedEndpoint()); SoaNodeId consumedEndpoint = new EndpointId("myenv", "myurl"); endpointConsumption.setConsumedEndpoint(consumedEndpoint); Assert.assertEquals("EndpointConsumption must be set as expected", consumedEndpoint, endpointConsumption.getConsumedEndpoint()); DocumentModel foundEndpointModel = documentService.findSoaNode(documentManager, consumedEndpoint); Assert.assertNotNull("Consumed endpoint must be created", foundEndpointModel); endpointConsumption.setConsumedEndpoint(null); Assert.assertNull("EndpointConsumption must be removed", endpointConsumption.getConsumedEndpoint()); } }