use of com.twinsoft.convertigo.beans.core.UrlMappingResponse in project convertigo by convertigo.
the class SwaggerUtils method parse.
public static Swagger parse(String requestUrl, UrlMapper urlMapper) {
Project project = urlMapper.getProject();
String projectName = project.getName();
String oasDirUrl = requestUrl.substring(0, requestUrl.indexOf("/" + servletMappingPath)) + "/projects/" + projectName + "/" + jsonSchemaDirectory + "/";
Swagger swagger = parseCommon(requestUrl, project);
List<Tag> tags = new ArrayList<Tag>();
Tag tag = new Tag();
tag.setName(urlMapper.getProject().getName());
tag.setDescription(urlMapper.getProject().getComment());
tags.add(tag);
swagger.setTags(tags);
// Security
Map<String, SecuritySchemeDefinition> securityDefinitions = swagger.getSecurityDefinitions();
for (UrlAuthentication authentication : urlMapper.getAuthenticationList()) {
if (AuthenticationType.Basic.equals(authentication.getType())) {
if (securityDefinitions == null || !securityDefinitions.containsKey("basicAuth")) {
BasicAuthDefinition basicAuthDefinition = new BasicAuthDefinition();
swagger.addSecurityDefinition("basicAuth", basicAuthDefinition);
SecurityRequirement securityRequirement = new SecurityRequirement();
securityRequirement.requirement("basicAuth", new ArrayList<String>());
swagger.addSecurity(securityRequirement);
}
}
}
// Models and Schemas
Map<String, Model> swagger_models = new HashMap<String, Model>();
try {
String models = getModels(oasDirUrl, urlMapper);
if (!models.isEmpty()) {
ObjectMapper mapper = Json.mapper();
JsonNode definitionNode = mapper.readTree(models);
for (Iterator<Entry<String, JsonNode>> it = GenericUtils.cast(definitionNode.fields()); it.hasNext(); ) {
Entry<String, JsonNode> entry = it.next();
swagger_models.put(entry.getKey().toString(), mapper.convertValue(entry.getValue(), Model.class));
}
}
} catch (Exception e) {
e.printStackTrace();
Engine.logEngine.warn("Unexpected exception while reading UrlMapper defined models", e);
}
swagger.setDefinitions(swagger_models);
// Mappings
Map<String, Path> swagger_paths = new HashMap<String, Path>();
try {
for (UrlMapping urlMapping : urlMapper.getMappingList()) {
Path swagger_path = new Path();
for (UrlMappingOperation umo : urlMapping.getOperationList()) {
Operation s_operation = new Operation();
s_operation.setOperationId(umo.getQName());
s_operation.setDescription(umo.getComment());
s_operation.setSummary(umo.getComment());
// Operation produces
if (umo instanceof AbstractRestOperation) {
DataContent dataOutput = ((AbstractRestOperation) umo).getOutputContent();
if (dataOutput.equals(DataContent.toJson)) {
s_operation.setProduces(Arrays.asList(MimeType.Json.value()));
} else if (dataOutput.equals(DataContent.toXml)) {
s_operation.setProduces(Arrays.asList(MimeType.Xml.value()));
} else {
s_operation.setProduces(Arrays.asList(MimeType.Json.value(), MimeType.Xml.value()));
}
}
// Operation tags
List<String> list = Arrays.asList("" + project.getName());
s_operation.setTags(list);
// Operation consumes
List<String> consumes = new ArrayList<String>();
// Operation parameters
List<Parameter> s_parameters = new ArrayList<Parameter>();
// 1 - add path parameters
for (String pathVarName : urlMapping.getPathVariableNames()) {
PathParameter s_parameter = new PathParameter();
s_parameter.setName(pathVarName);
s_parameter.setRequired(true);
s_parameter.setType("string");
// retrieve parameter description from bean
UrlMappingParameter ump = null;
try {
ump = umo.getParameterByName(pathVarName);
} catch (Exception e) {
}
if (ump != null && ump.getType() == Type.Path) {
s_parameter.setDescription(ump.getComment());
s_parameter.setType(ump.getInputType().toLowerCase());
Object value = ump.getValueOrNull();
if (value != null) {
s_parameter.setDefaultValue(String.valueOf(value));
}
}
s_parameters.add(s_parameter);
}
// 2 - add other parameters
for (UrlMappingParameter ump : umo.getParameterList()) {
Parameter s_parameter = null;
if (ump.getType() == Type.Query) {
s_parameter = new QueryParameter();
} else if (ump.getType() == Type.Form) {
s_parameter = new FormParameter();
} else if (ump.getType() == Type.Body) {
s_parameter = new BodyParameter();
if (ump instanceof IMappingRefModel) {
String modelReference = ((IMappingRefModel) ump).getModelReference();
if (!modelReference.isEmpty()) {
if (modelReference.indexOf(".jsonschema") != -1) {
modelReference = oasDirUrl + modelReference;
}
RefModel refModel = new RefModel(modelReference);
((BodyParameter) s_parameter).setSchema(refModel);
}
}
} else if (ump.getType() == Type.Header) {
s_parameter = new HeaderParameter();
} else if (ump.getType() == Type.Path) {
// ignore : should have been treated before
}
if (s_parameter != null) {
s_parameter.setName(ump.getName());
s_parameter.setDescription(ump.getComment());
s_parameter.setRequired(ump.isRequired());
if (s_parameter instanceof SerializableParameter) {
boolean isArray = ump.isMultiValued() || ump.isArray();
String _type = isArray ? "array" : ump.getDataType().name().toLowerCase();
String _collectionFormat = ump.isMultiValued() ? "multi" : (isArray ? "csv" : null);
Property _items = isArray ? getItems(ump.getDataType()) : null;
((SerializableParameter) s_parameter).setType(_type);
((SerializableParameter) s_parameter).setCollectionFormat(_collectionFormat);
((SerializableParameter) s_parameter).setItems(_items);
Object value = ump.getValueOrNull();
if (value != null) {
String collection = ((SerializableParameter) s_parameter).getCollectionFormat();
if (collection != null && collection.equals("multi")) {
Property items = new StringProperty();
// items.setDefault(String.valueOf(value));
((SerializableParameter) s_parameter).setItems(items);
// ((SerializableParameter) s_parameter).setEnumValue(Arrays.asList("val1","val2","val3"));
} else {
((AbstractSerializableParameter<?>) s_parameter).setDefaultValue(String.valueOf(value));
}
}
}
DataContent dataInput = ump.getInputContent();
if (dataInput.equals(DataContent.toJson)) {
if (!consumes.contains(MimeType.Json.value())) {
consumes.add(MimeType.Json.value());
}
} else if (dataInput.equals(DataContent.toXml)) {
if (!consumes.contains(MimeType.Xml.value())) {
consumes.add(MimeType.Xml.value());
}
}
// swagger-ui workaround for invalid request content-type for POST
if (ump.getType() == Type.Form) {
if (!DataType.File.equals(ump.getDataType())) {
if (!consumes.contains(MimeType.WwwForm.value())) {
consumes.add(MimeType.WwwForm.value());
}
} else {
if (!consumes.contains("multipart/form-data")) {
consumes.add("multipart/form-data");
}
}
}
// add parameter
if (ump.isExposed()) {
s_parameters.add(s_parameter);
}
}
}
s_operation.setParameters(s_parameters);
if (!consumes.isEmpty()) {
s_operation.setConsumes(consumes);
}
// Set operation responses
Map<String, Response> responses = new HashMap<String, Response>();
for (UrlMappingResponse umr : umo.getResponseList()) {
String statusCode = umr.getStatusCode();
if (!statusCode.isEmpty()) {
if (!responses.containsKey(statusCode)) {
Response response = new Response();
// response.setDescription(umr.getComment());
response.setDescription(umr.getStatusText());
if (umr instanceof IMappingRefModel) {
String modelReference = ((IMappingRefModel) umr).getModelReference();
if (!modelReference.isEmpty()) {
if (modelReference.indexOf(".jsonschema") != -1) {
modelReference = oasDirUrl + modelReference;
}
RefProperty refProperty = new RefProperty(modelReference);
response.setResponseSchema(new PropertyModelConverter().propertyToModel(refProperty));
}
}
responses.put(statusCode, response);
}
}
}
if (responses.isEmpty()) {
Response resp200 = new Response();
resp200.description("successful operation");
responses.put("200", resp200);
}
s_operation.setResponses(responses);
// Add operation to path
String s_method = umo.getMethod().toLowerCase();
swagger_path.set(s_method, s_operation);
}
swagger_paths.put(urlMapping.getPathWithPrefix(), swagger_path);
}
} catch (Exception e) {
e.printStackTrace();
Engine.logEngine.error("Unexpected exception while parsing UrlMapper to generate definition", e);
}
swagger.setPaths(swagger_paths);
return swagger;
}
use of com.twinsoft.convertigo.beans.core.UrlMappingResponse in project convertigo by convertigo.
the class ProjectExplorerView method loadDatabaseObject.
private void loadDatabaseObject(TreeParent parentTreeObject, DatabaseObject parentDatabaseObject, ProjectLoadingJob projectLoadingJob, final IProgressMonitor monitor) throws EngineException, IOException {
try {
new WalkHelper() {
// recursion parameters
TreeParent parentTreeObject;
ProjectLoadingJob projectLoadingJob;
// sibling parameters
ObjectsFolderTreeObject currentTreeFolder = null;
public void init(DatabaseObject databaseObject, TreeParent parentTreeObject, ProjectLoadingJob projectLoadingJob) throws Exception {
this.parentTreeObject = parentTreeObject;
this.projectLoadingJob = projectLoadingJob;
walkInheritance = true;
super.init(databaseObject);
}
protected ObjectsFolderTreeObject getFolder(TreeParent treeParent, int folderType) {
ObjectsFolderTreeObject ofto = null;
for (TreeObject to : treeParent.getChildren()) {
if (to instanceof ObjectsFolderTreeObject) {
if (((ObjectsFolderTreeObject) to).folderType == folderType) {
ofto = (ObjectsFolderTreeObject) to;
break;
}
}
}
if (ofto == null) {
ofto = new ObjectsFolderTreeObject(viewer, folderType);
treeParent.addChild(ofto);
}
return ofto;
}
@Override
protected void walk(DatabaseObject databaseObject) throws Exception {
// retrieve recursion parameters
final TreeParent parentTreeObject = this.parentTreeObject;
final ProjectLoadingJob projectLoadingJob = this.projectLoadingJob;
// retrieve sibling parameters
ObjectsFolderTreeObject currentTreeFolder = this.currentTreeFolder;
String dboName = (databaseObject instanceof Step) ? ((Step) databaseObject).getStepNodeName() : databaseObject.getName();
monitor.subTask("Loading databaseObject '" + dboName + "'...");
DatabaseObjectTreeObject databaseObjectTreeObject = null;
// first call case, the tree object already exists and its content is just refreshed
if (parentTreeObject.getObject() == databaseObject) {
databaseObjectTreeObject = (DatabaseObjectTreeObject) parentTreeObject;
} else // recursive call case, the tree object doesn't exist and must be added to the parent tree object
{
int folderType = Integer.MIN_VALUE;
if (databaseObject instanceof Connector) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_CONNECTORS;
databaseObjectTreeObject = new ConnectorTreeObject(viewer, (Connector) databaseObject, false);
} else if (databaseObject instanceof Sequence) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_SEQUENCES;
databaseObjectTreeObject = new SequenceTreeObject(viewer, (Sequence) databaseObject, false);
} else if (databaseObject instanceof MobileApplication) {
databaseObjectTreeObject = new MobileApplicationTreeObject(viewer, (MobileApplication) databaseObject, false);
} else if (databaseObject instanceof MobilePlatform) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_PLATFORMS;
databaseObjectTreeObject = new MobilePlatformTreeObject(viewer, (MobilePlatform) databaseObject, false);
} else /**
***********************************************************************************************
*/
if (databaseObject instanceof com.twinsoft.convertigo.beans.mobile.components.MobileComponent) {
if (databaseObject instanceof com.twinsoft.convertigo.beans.mobile.components.ApplicationComponent) {
databaseObjectTreeObject = new MobileApplicationComponentTreeObject(viewer, GenericUtils.cast(databaseObject), false);
} else if (databaseObject instanceof com.twinsoft.convertigo.beans.mobile.components.RouteComponent) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_ROUTES;
databaseObjectTreeObject = new MobileRouteComponentTreeObject(viewer, GenericUtils.cast(databaseObject), false);
} else if (databaseObject instanceof com.twinsoft.convertigo.beans.mobile.components.RouteEventComponent) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_EVENTS;
databaseObjectTreeObject = new MobileRouteEventComponentTreeObject(viewer, GenericUtils.cast(databaseObject), false);
} else if (databaseObject instanceof com.twinsoft.convertigo.beans.mobile.components.RouteActionComponent) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_ACTIONS;
databaseObjectTreeObject = new MobileRouteActionComponentTreeObject(viewer, GenericUtils.cast(databaseObject), false);
} else if (databaseObject instanceof com.twinsoft.convertigo.beans.mobile.components.PageComponent) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_PAGES;
databaseObjectTreeObject = new MobilePageComponentTreeObject(viewer, GenericUtils.cast(databaseObject), false);
} else if (databaseObject instanceof com.twinsoft.convertigo.beans.mobile.components.UIActionStack) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_SHARED_ACTIONS;
databaseObjectTreeObject = new MobileUIComponentTreeObject(viewer, GenericUtils.cast(databaseObject), false);
} else if (databaseObject instanceof com.twinsoft.convertigo.beans.mobile.components.UISharedComponent) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_SHARED_COMPONENTS;
databaseObjectTreeObject = new MobileUIComponentTreeObject(viewer, GenericUtils.cast(databaseObject), false);
} else if (databaseObject instanceof com.twinsoft.convertigo.beans.mobile.components.UIDynamicMenu) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_MENUS;
databaseObjectTreeObject = new MobileUIComponentTreeObject(viewer, GenericUtils.cast(databaseObject), false);
} else if (databaseObject instanceof com.twinsoft.convertigo.beans.mobile.components.UIComponent) {
if (databaseObject instanceof com.twinsoft.convertigo.beans.mobile.components.UIAttribute) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_ATTRIBUTES;
if (databaseObject instanceof com.twinsoft.convertigo.beans.mobile.components.UIControlAttr) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_CONTROLS;
}
} else if (databaseObject instanceof com.twinsoft.convertigo.beans.mobile.components.UIStyle) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_STYLES;
} else if (databaseObject instanceof com.twinsoft.convertigo.beans.mobile.components.UIControlVariable) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_VARIABLES;
} else if (databaseObject instanceof com.twinsoft.convertigo.beans.mobile.components.UICompVariable) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_VARIABLES;
} else if (databaseObject instanceof com.twinsoft.convertigo.beans.mobile.components.UIStackVariable) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_VARIABLES;
} else if (databaseObject instanceof com.twinsoft.convertigo.beans.mobile.components.UIFormValidator) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_VALIDATORS;
} else if (databaseObject instanceof com.twinsoft.convertigo.beans.mobile.components.UIAppEvent) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_EVENTS;
} else if (databaseObject instanceof com.twinsoft.convertigo.beans.mobile.components.UIPageEvent) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_EVENTS;
} else if (databaseObject instanceof com.twinsoft.convertigo.beans.mobile.components.UIEventSubscriber) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_EVENTS;
}
databaseObjectTreeObject = new MobileUIComponentTreeObject(viewer, GenericUtils.cast(databaseObject), false);
}
} else /**
***********************************************************************************************
*/
if (databaseObject instanceof com.twinsoft.convertigo.beans.ngx.components.MobileComponent) {
if (databaseObject instanceof com.twinsoft.convertigo.beans.ngx.components.ApplicationComponent) {
databaseObjectTreeObject = new NgxApplicationComponentTreeObject(viewer, GenericUtils.cast(databaseObject), false);
} else if (databaseObject instanceof com.twinsoft.convertigo.beans.ngx.components.PageComponent) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_PAGES;
databaseObjectTreeObject = new NgxPageComponentTreeObject(viewer, GenericUtils.cast(databaseObject), false);
} else if (databaseObject instanceof com.twinsoft.convertigo.beans.ngx.components.UIActionStack) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_SHARED_ACTIONS;
databaseObjectTreeObject = new NgxUIComponentTreeObject(viewer, GenericUtils.cast(databaseObject), false);
} else if (databaseObject instanceof com.twinsoft.convertigo.beans.ngx.components.UISharedComponent) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_SHARED_COMPONENTS;
databaseObjectTreeObject = new NgxUIComponentTreeObject(viewer, GenericUtils.cast(databaseObject), false);
} else if (databaseObject instanceof com.twinsoft.convertigo.beans.ngx.components.UIDynamicMenu) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_MENUS;
databaseObjectTreeObject = new NgxUIComponentTreeObject(viewer, GenericUtils.cast(databaseObject), false);
} else if (databaseObject instanceof com.twinsoft.convertigo.beans.ngx.components.UIComponent) {
if (databaseObject instanceof com.twinsoft.convertigo.beans.ngx.components.UIAttribute) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_ATTRIBUTES;
if (databaseObject instanceof com.twinsoft.convertigo.beans.ngx.components.UIControlAttr) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_CONTROLS;
}
} else if (databaseObject instanceof com.twinsoft.convertigo.beans.ngx.components.UIDynamicAttr) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_ATTRIBUTES;
} else if (databaseObject instanceof com.twinsoft.convertigo.beans.ngx.components.UIStyle) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_STYLES;
} else if (databaseObject instanceof com.twinsoft.convertigo.beans.ngx.components.UIControlVariable) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_VARIABLES;
} else if (databaseObject instanceof com.twinsoft.convertigo.beans.ngx.components.UICompVariable) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_VARIABLES;
} else if (databaseObject instanceof com.twinsoft.convertigo.beans.ngx.components.UIStackVariable) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_VARIABLES;
} else if (databaseObject instanceof com.twinsoft.convertigo.beans.ngx.components.UIAppEvent) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_EVENTS;
} else if (databaseObject instanceof com.twinsoft.convertigo.beans.ngx.components.UIPageEvent) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_EVENTS;
} else if (databaseObject instanceof com.twinsoft.convertigo.beans.ngx.components.UIEventSubscriber) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_EVENTS;
}
databaseObjectTreeObject = new NgxUIComponentTreeObject(viewer, GenericUtils.cast(databaseObject), false);
}
} else if (databaseObject instanceof UrlMapper) {
databaseObjectTreeObject = new UrlMapperTreeObject(viewer, (UrlMapper) databaseObject, false);
} else if (databaseObject instanceof UrlAuthentication) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_AUTHENTICATIONS;
databaseObjectTreeObject = new UrlAuthenticationTreeObject(viewer, (UrlAuthentication) databaseObject, false);
} else if (databaseObject instanceof UrlMapping) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_MAPPINGS;
databaseObjectTreeObject = new UrlMappingTreeObject(viewer, (UrlMapping) databaseObject, false);
} else if (databaseObject instanceof UrlMappingOperation) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_OPERATIONS;
databaseObjectTreeObject = new UrlMappingOperationTreeObject(viewer, (UrlMappingOperation) databaseObject, false);
} else if (databaseObject instanceof UrlMappingParameter) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_PARAMETERS;
databaseObjectTreeObject = new UrlMappingParameterTreeObject(viewer, (UrlMappingParameter) databaseObject, false);
} else if (databaseObject instanceof UrlMappingResponse) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_RESPONSES;
databaseObjectTreeObject = new UrlMappingResponseTreeObject(viewer, (UrlMappingResponse) databaseObject, false);
} else if (databaseObject instanceof Reference) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_REFERENCES;
databaseObjectTreeObject = new ReferenceTreeObject(viewer, (Reference) databaseObject, false);
} else if (databaseObject instanceof Pool) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_POOLS;
databaseObjectTreeObject = new DatabaseObjectTreeObject(viewer, databaseObject, false);
} else if (databaseObject instanceof Transaction) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_TRANSACTIONS;
databaseObjectTreeObject = new TransactionTreeObject(viewer, (Transaction) databaseObject, false);
} else if (databaseObject instanceof ScreenClass) {
if (databaseObject.getParent() instanceof IScreenClassContainer<?>) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_SCREEN_CLASSES;
databaseObjectTreeObject = new ScreenClassTreeObject(viewer, (ScreenClass) databaseObject, false);
} else {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_INHERITED_SCREEN_CLASSES;
databaseObjectTreeObject = new ScreenClassTreeObject(viewer, (ScreenClass) databaseObject, false);
}
} else if (databaseObject instanceof Sheet) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_SHEETS;
databaseObjectTreeObject = new SheetTreeObject(viewer, (Sheet) databaseObject, parentTreeObject.getObject() != databaseObject.getParent());
} else if (databaseObject instanceof TestCase) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_TESTCASES;
databaseObjectTreeObject = new TestCaseTreeObject(viewer, (TestCase) databaseObject, false);
} else if (databaseObject instanceof Variable) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_VARIABLES;
databaseObjectTreeObject = new VariableTreeObject2(viewer, (Variable) databaseObject, false);
} else if (databaseObject instanceof Step) {
if (databaseObject.getParent() instanceof Sequence) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_STEPS;
}
databaseObjectTreeObject = new StepTreeObject(viewer, (Step) databaseObject, false);
} else if (databaseObject instanceof Statement) {
if (databaseObject.getParent() instanceof Transaction) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_FUNCTIONS;
}
databaseObjectTreeObject = new StatementTreeObject(viewer, (Statement) databaseObject, false);
} else if (databaseObject instanceof Criteria) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_CRITERIAS;
databaseObjectTreeObject = new CriteriaTreeObject(viewer, (Criteria) databaseObject, parentTreeObject.getObject() != databaseObject.getParent());
} else if (databaseObject instanceof ExtractionRule) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_EXTRACTION_RULES;
databaseObjectTreeObject = new ExtractionRuleTreeObject(viewer, (ExtractionRule) databaseObject, parentTreeObject.getObject() != databaseObject.getParent());
} else if (databaseObject instanceof BlockFactory) {
databaseObjectTreeObject = new DatabaseObjectTreeObject(viewer, databaseObject, parentTreeObject.getObject() != databaseObject.getParent());
} else if (databaseObject instanceof com.twinsoft.convertigo.beans.core.Document) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_DOCUMENTS;
com.twinsoft.convertigo.beans.core.Document document = (com.twinsoft.convertigo.beans.core.Document) databaseObject;
String documentRenderer = document.getRenderer();
if (documentRenderer.equals("DesignDocumentTreeObject"))
databaseObjectTreeObject = new DesignDocumentTreeObject(viewer, document, false);
else
databaseObjectTreeObject = new DocumentTreeObject(viewer, document, false);
} else if (databaseObject instanceof com.twinsoft.convertigo.beans.core.Listener) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_LISTENERS;
com.twinsoft.convertigo.beans.core.Listener listener = (com.twinsoft.convertigo.beans.core.Listener) databaseObject;
String listenerRenderer = listener.getRenderer();
if (listenerRenderer.equals("FullSyncListenerTreeObject")) {
databaseObjectTreeObject = new FullSyncListenerTreeObject(viewer, listener, false);
} else {
databaseObjectTreeObject = new ListenerTreeObject(viewer, listener, false);
}
} else if (databaseObject instanceof com.twinsoft.convertigo.beans.core.Index) {
folderType = ObjectsFolderTreeObject.FOLDER_TYPE_INDEXES;
databaseObjectTreeObject = new DatabaseObjectTreeObject(viewer, databaseObject, false);
} else {
// unknow DBO case !!!
databaseObjectTreeObject = new DatabaseObjectTreeObject(viewer, databaseObject, false);
}
// no virtual folder
if (folderType == Integer.MIN_VALUE) {
parentTreeObject.addChild(databaseObjectTreeObject);
} else // virtual folder creation or reuse
{
/* fixed #5416 */
// if (currentTreeFolder == null || currentTreeFolder.folderType != folderType) {
// currentTreeFolder = new ObjectsFolderTreeObject(viewer, folderType);
// parentTreeObject.addChild(currentTreeFolder);
// }
currentTreeFolder = getFolder(parentTreeObject, folderType);
currentTreeFolder.addChild(databaseObjectTreeObject);
}
// case databaseObject has been changed through dbo::preconfigure, mark projectTreeObject as modified
if ((databaseObject.bNew) || (databaseObject.hasChanged && !databaseObject.bNew)) {
databaseObjectTreeObject.hasBeenModified(true);
}
// new value of recursion parameters
this.parentTreeObject = databaseObjectTreeObject;
}
// special databaseObject cases
if (databaseObject instanceof Project) {
Project project = (Project) databaseObject;
// Creates directories and files
createDirsAndFiles(project.getName());
// Creates or Refresh xsd and wsdl folders
IFolder xsdFolder, wsdlFolder = null;
IFolder xsdInternalFolder = null;
try {
wsdlFolder = ((ProjectTreeObject) parentTreeObject).getFolder("wsdl");
if (!wsdlFolder.exists())
wsdlFolder.create(true, true, null);
else
wsdlFolder.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
xsdFolder = ((ProjectTreeObject) parentTreeObject).getFolder("xsd");
if (!xsdFolder.exists())
xsdFolder.create(true, true, null);
else {
xsdInternalFolder = xsdFolder.getFolder("internal");
if (!xsdInternalFolder.exists())
xsdInternalFolder.create(true, true, null);
xsdFolder.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
}
} catch (Exception e) {
e.printStackTrace();
}
// Connectors
IFolder xsdConnectorInternalFolder = null;
Collection<Connector> connectors = project.getConnectorsList();
if (connectors.size() != 0) {
// Set default connector if none
if (project.getDefaultConnector() == null) {
// Report from 4.5: fix #401
ConvertigoPlugin.logWarning(null, "Project \"" + project.getName() + "\" has no default connector. Try to set a default one.");
Connector defaultConnector = connectors.iterator().next();
try {
project.setDefaultConnector(defaultConnector);
defaultConnector.hasChanged = true;
} catch (Exception e) {
ConvertigoPlugin.logWarning(e, "Unable to set a default connector for project \"" + project.getName() + "\"");
}
}
// Refresh Traces folder
IFolder ifolder = ((ProjectTreeObject) parentTreeObject).getFolder("Traces");
if (ifolder.exists()) {
try {
ifolder.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
} catch (CoreException e) {
}
}
// Creates or Refresh internal xsd connector folders
for (Connector connector : connectors) {
try {
xsdConnectorInternalFolder = xsdInternalFolder.getFolder(connector.getName());
if (!xsdConnectorInternalFolder.exists())
xsdConnectorInternalFolder.create(true, true, null);
else
xsdConnectorInternalFolder.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
} catch (Exception e) {
e.printStackTrace();
}
}
}
} else if (databaseObject instanceof Connector) {
Connector connector = (Connector) databaseObject;
// Open connector editor
if (projectLoadingJob != null && connector.isDefault) {
projectLoadingJob.setDefaultConnectorTreeObject((ConnectorTreeObject) databaseObjectTreeObject);
}
// Traces
if (connector instanceof JavelinConnector) {
String projectName = databaseObject.getProject().getName();
if (projectLoadingJob == null) {
if (MigrationManager.isProjectMigrated(projectName)) {
UnloadedProjectTreeObject unloadedProjectTreeObject = new UnloadedProjectTreeObject(databaseObjectTreeObject.viewer, projectName);
this.projectLoadingJob = new ProjectLoadingJob(databaseObjectTreeObject.viewer, unloadedProjectTreeObject);
this.projectLoadingJob.loadTrace(databaseObjectTreeObject, new File(Engine.projectDir(projectName) + "/Traces/" + connector.getName()));
}
}
if (projectLoadingJob != null) {
projectLoadingJob.loadTrace(databaseObjectTreeObject, new File(Engine.projectDir(projectName) + "/Traces/" + connector.getName()));
}
}
} else if (databaseObject instanceof Transaction) {
Transaction transaction = (Transaction) databaseObject;
// Functions
List<HandlersDeclarationTreeObject> treeObjects = new LinkedList<HandlersDeclarationTreeObject>();
String line, lineReaded;
int lineNumber = 0;
BufferedReader br = new BufferedReader(new StringReader(transaction.handlers));
line = br.readLine();
while (line != null) {
lineReaded = line.trim();
lineNumber++;
if (lineReaded.startsWith("function ")) {
try {
String functionName = lineReaded.substring(9, lineReaded.indexOf(')') + 1);
HandlersDeclarationTreeObject handlersDeclarationTreeObject = null;
if (functionName.endsWith(JavelinTransaction.EVENT_ENTRY_HANDLER + "()")) {
handlersDeclarationTreeObject = new HandlersDeclarationTreeObject(viewer, functionName, HandlersDeclarationTreeObject.TYPE_FUNCTION_SCREEN_CLASS_ENTRY, lineNumber);
} else if (functionName.endsWith(JavelinTransaction.EVENT_EXIT_HANDLER + "()")) {
handlersDeclarationTreeObject = new HandlersDeclarationTreeObject(viewer, functionName, HandlersDeclarationTreeObject.TYPE_FUNCTION_SCREEN_CLASS_EXIT, lineNumber);
} else {
handlersDeclarationTreeObject = new HandlersDeclarationTreeObject(viewer, functionName, HandlersDeclarationTreeObject.TYPE_OTHER, lineNumber);
}
if (handlersDeclarationTreeObject != null) {
treeObjects.add(handlersDeclarationTreeObject);
}
} catch (StringIndexOutOfBoundsException e) {
throw new EngineException("Exception in reading line of a transaction", e);
}
}
line = br.readLine();
}
if (treeObjects.size() != 0) {
ObjectsFolderTreeObject objectsFolderTreeObject = new ObjectsFolderTreeObject(viewer, ObjectsFolderTreeObject.FOLDER_TYPE_FUNCTIONS);
databaseObjectTreeObject.addChild(objectsFolderTreeObject);
for (HandlersDeclarationTreeObject handlersDeclarationTreeObject : treeObjects) {
objectsFolderTreeObject.addChild(handlersDeclarationTreeObject);
}
}
} else if (databaseObject instanceof Sheet) {
addTemplates((Sheet) databaseObject, databaseObjectTreeObject);
} else if (databaseObject instanceof ITablesProperty) {
ITablesProperty iTablesProperty = (ITablesProperty) databaseObject;
String[] tablePropertyNames = iTablesProperty.getTablePropertyNames();
for (int i = 0; i < tablePropertyNames.length; i++) {
String tablePropertyName = tablePropertyNames[i];
String tableRenderer = iTablesProperty.getTableRenderer(tablePropertyName);
XMLVector<XMLVector<Object>> xmlv = iTablesProperty.getTableData(tablePropertyName);
if (tableRenderer.equals("XMLTableDescriptionTreeObject")) {
XMLTableDescriptionTreeObject propertyXMLTableTreeObject = new XMLTableDescriptionTreeObject(viewer, tablePropertyName, xmlv, databaseObjectTreeObject);
databaseObjectTreeObject.addChild(propertyXMLTableTreeObject);
} else if (tableRenderer.equals("XMLRecordDescriptionTreeObject")) {
XMLRecordDescriptionTreeObject propertyXMLRecordTreeObject = new XMLRecordDescriptionTreeObject(viewer, tablePropertyName, xmlv, databaseObjectTreeObject);
databaseObjectTreeObject.addChild(propertyXMLRecordTreeObject);
}
}
}
monitor.worked(1);
// children cannot be added in the current virtual folder
this.currentTreeFolder = null;
super.walk(databaseObject);
// restore recursion parameters
this.parentTreeObject = parentTreeObject;
this.projectLoadingJob = projectLoadingJob;
// restore sibling parameters
this.currentTreeFolder = currentTreeFolder;
}
}.init(parentDatabaseObject, parentTreeObject, projectLoadingJob);
} catch (EngineException e) {
throw e;
} catch (Exception e) {
throw new EngineException("Exception in copyDatabaseObject", e);
}
}
use of com.twinsoft.convertigo.beans.core.UrlMappingResponse in project convertigo by convertigo.
the class AbstractRestOperation method handleRequest.
@Override
@SuppressWarnings("deprecation")
public String handleRequest(HttpServletRequest request, HttpServletResponse response) throws EngineException {
String targetRequestableQName = getTargetRequestable();
if (targetRequestableQName.isEmpty()) {
throw new EngineException("Mapping operation \"" + getName() + "\" has no target requestable defined");
}
StringTokenizer st = new StringTokenizer(targetRequestableQName, ".");
int count = st.countTokens();
String projectName = st.nextToken();
String sequenceName = count == 2 ? st.nextToken() : "";
String connectorName = count == 3 ? st.nextToken() : "";
String transactionName = count == 3 ? st.nextToken() : "";
try {
Map<String, Object> map = new HashMap<String, Object>();
String responseContentType = null;
String content = null;
try {
// Check multipart request
if (ServletFileUpload.isMultipartContent(request)) {
Engine.logBeans.debug("(AbstractRestOperation) \"" + getName() + "\" Multipart resquest");
// Create a factory for disk-based file items
DiskFileItemFactory factory = new DiskFileItemFactory();
// Set factory constraints
factory.setSizeThreshold(1000);
File temporaryFile = File.createTempFile("c8o-multipart-files", ".tmp");
int cptFile = 0;
temporaryFile.delete();
temporaryFile.mkdirs();
factory.setRepository(temporaryFile);
Engine.logBeans.debug("(AbstractRestOperation) \"" + getName() + "\" Temporary folder for upload is : " + temporaryFile.getAbsolutePath());
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// Set overall request size constraint
upload.setSizeMax(EnginePropertiesManager.getPropertyAsLong(PropertyName.FILE_UPLOAD_MAX_REQUEST_SIZE));
upload.setFileSizeMax(EnginePropertiesManager.getPropertyAsLong(PropertyName.FILE_UPLOAD_MAX_FILE_SIZE));
// Parse the request
List<FileItem> items = GenericUtils.cast(upload.parseRequest(request));
for (FileItem fileItem : items) {
String parameterName = fileItem.getFieldName();
String parameterValue;
if (fileItem.isFormField()) {
parameterValue = fileItem.getString();
Engine.logBeans.debug("(AbstractRestOperation) \"" + getName() + "\" Value for field '" + parameterName + "' : " + parameterValue);
} else {
String name = fileItem.getName().replaceFirst("^.*(?:\\\\|/)(.*?)$", "$1");
if (name.length() > 0) {
File wDir = new File(temporaryFile, "" + (++cptFile));
wDir.mkdirs();
File wFile = new File(wDir, name);
fileItem.write(wFile);
fileItem.delete();
parameterValue = wFile.getAbsolutePath();
Engine.logBeans.debug("(AbstractRestOperation) \"" + getName() + "\" Temporary uploaded file for field '" + parameterName + "' : " + parameterValue);
} else {
Engine.logBeans.debug("(AbstractRestOperation) \"" + getName() + "\" No temporary uploaded file for field '" + parameterName + "', empty name");
parameterValue = "";
}
}
if (parameterValue != null && !parameterValue.isEmpty()) {
UrlMappingParameter param = null;
try {
param = getParameterByName(parameterName);
} catch (Exception e) {
}
if (param != null) {
String variableName = param.getMappedVariableName();
if (!variableName.isEmpty()) {
parameterName = variableName;
}
}
Object mapValue = map.get(parameterName);
if (mapValue == null) {
map.put(parameterName, parameterValue);
} else {
List<String> values = new ArrayList<String>();
if (mapValue instanceof String) {
values.add((String) mapValue);
} else if (mapValue instanceof List) {
values.addAll(GenericUtils.cast(mapValue));
}
values.add(parameterValue);
map.put(parameterName, values);
}
}
}
}
String contextName = request.getParameter(Parameter.Context.getName());
map.put(Parameter.Context.getName(), new String[] { contextName });
map.put(Parameter.Project.getName(), new String[] { projectName });
if (sequenceName.isEmpty()) {
map.put(Parameter.Connector.getName(), new String[] { connectorName });
map.put(Parameter.Transaction.getName(), new String[] { transactionName });
} else {
map.put(Parameter.Sequence.getName(), new String[] { sequenceName });
map.put(Parameter.RemoveContext.getName(), new String[] { "" });
map.put(Parameter.RemoveSession.getName(), new String[] { "" });
}
// Add path variables parameters
Map<String, String> varMap = ((UrlMapping) getParent()).getPathVariableValues(request);
for (String varName : varMap.keySet()) {
String varValue = varMap.get(varName);
map.put(varName, varValue);
}
// Add other parameters
for (UrlMappingParameter param : getParameterList()) {
String paramName = param.getName();
String variableName = param.getMappedVariableName();
Object paramValue = null;
if (param.getType() == Type.Header) {
paramValue = request.getHeader(paramName);
} else if ((param.getType() == Type.Query || param.getType() == Type.Form)) {
String[] pvalues = request.getParameterValues(paramName);
if (pvalues != null) {
paramValue = pvalues;
}
} else if (param.getType() == Type.Path) {
String varValue = varMap.get(param.getName());
paramValue = varValue;
} else if (param.getType() == Type.Body) {
if (request.getInputStream() != null) {
// Retrieve data
paramValue = IOUtils.toString(request.getInputStream(), "UTF-8");
// Get input content type
DataContent dataInput = param.getInputContent();
if (dataInput.equals(DataContent.useHeader)) {
String requestContentType = request.getContentType();
if (requestContentType == null || MimeType.Xml.is(requestContentType)) {
dataInput = DataContent.toXml;
} else if (MimeType.Json.is(requestContentType)) {
dataInput = DataContent.toJson;
}
}
// Transform input data
try {
if (dataInput.equals(DataContent.toJson)) {
// String modelName = param instanceof IMappingRefModel ? ((IMappingRefModel)param).getModelReference() : "";
// String objectName = modelName.isEmpty() ? paramName : modelName;
// Document doc = XMLUtils.parseDOMFromString("<"+objectName+"/>");
Document doc = XMLUtils.parseDOMFromString("<" + paramName + "/>");
Element root = doc.getDocumentElement();
JSONObject json = new JSONObject((String) paramValue);
XMLUtils.jsonToXml(json, root);
paramValue = root.getChildNodes();
} else if (dataInput.equals(DataContent.toXml)) {
// Document doc = XMLUtils.parseDOMFromString((String)paramValue);
// paramValue = doc.getDocumentElement();
Document xml = XMLUtils.parseDOMFromString((String) paramValue);
if (xml.getDocumentElement().getTagName().equals(paramName)) {
paramValue = xml.getDocumentElement();
} else {
NodeList nl = xml.getDocumentElement().getChildNodes();
Document doc = XMLUtils.parseDOMFromString("<" + paramName + "/>");
Element root = doc.getDocumentElement();
for (int i = 0; i < nl.getLength(); i++) {
Node node = nl.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
root.appendChild(doc.adoptNode(node));
}
}
paramValue = doc.getDocumentElement();
}
}
} catch (Exception e) {
Engine.logBeans.error("(AbstractRestOperation) \"" + getName() + "\" : unable to decode body", e);
}
}
}
// retrieve default value if necessary
if (paramValue == null) {
paramValue = param.getValueOrNull();
}
if (paramValue != null) {
// map parameter to variable
if (!variableName.isEmpty()) {
paramName = variableName;
}
// add parameter with value to input map
if (paramValue instanceof String) {
map.put(paramName, new String[] { paramValue.toString() });
} else if (paramValue instanceof String[]) {
String[] values = (String[]) paramValue;
map.put(paramName, values);
} else {
map.put(paramName, paramValue);
}
} else if (param.isRequired()) {
if (param.getType() == Type.Path) {
// ignore : already handled
} else if (param.getDataType().equals(DataType.File)) {
// ignore : already handled
} else {
Engine.logBeans.warn("(AbstractRestOperation) \"" + getName() + "\" : missing parameter " + param.getName());
}
}
}
} catch (IOException ioe) {
Engine.logBeans.error("(AbstractRestOperation) \"" + getName() + "\" : invalid body", ioe);
throw ioe;
}
// Execute requestable
Engine.logBeans.debug("(AbstractRestOperation) \"" + getName() + "\" executing requestable \"" + targetRequestableQName + "\"");
InternalRequester internalRequester = new InternalRequester(map, request);
request.setAttribute("convertigo.requester", internalRequester);
Object result = internalRequester.processRequest();
String encoding = "UTF-8";
if (result != null) {
Document xmlHttpDocument = (Document) result;
// Extract the encoding Char Set from PI
Node firstChild = xmlHttpDocument.getFirstChild();
if ((firstChild.getNodeType() == Document.PROCESSING_INSTRUCTION_NODE) && (firstChild.getNodeName().equals("xml"))) {
String piValue = firstChild.getNodeValue();
int encodingOffset = piValue.indexOf("encoding=\"");
if (encodingOffset != -1) {
encoding = piValue.substring(encodingOffset + 10);
encoding = encoding.substring(0, encoding.length() - 1);
}
}
// Get output content type
DataContent dataOutput = getOutputContent();
if (dataOutput.equals(DataContent.useHeader)) {
String h_Accept = HeaderName.Accept.getHeader(request);
if (MimeType.Xml.is(h_Accept)) {
dataOutput = DataContent.toXml;
} else if (h_Accept == null || MimeType.Json.is(h_Accept)) {
dataOutput = DataContent.toJson;
}
}
// Modify status according to XPath condition of Response beans
int statusCode = HttpServletResponse.SC_OK;
String statusText = "";
if (RequestAttribute.responseStatus.get(request) == null) {
for (UrlMappingResponse umr : getResponseList()) {
if (umr instanceof OperationResponse) {
OperationResponse or = (OperationResponse) umr;
if (or.isMatching(xmlHttpDocument)) {
try {
statusCode = Integer.valueOf(or.getStatusCode(), 10);
statusText = or.getStatusText();
} catch (Exception e) {
}
break;
}
}
}
}
if (statusText.isEmpty())
response.setStatus(statusCode);
else
response.setStatus(statusCode, statusText);
// Transform XML data
if (dataOutput.equals(DataContent.toJson)) {
JsonRoot jsonRoot = getProject().getJsonRoot();
boolean useType = getProject().getJsonOutput() == JsonOutput.useType;
Document document = useType ? Engine.theApp.schemaManager.makeXmlRestCompliant(xmlHttpDocument) : xmlHttpDocument;
XMLUtils.logXml(document, Engine.logContext, "Generated Rest XML (useType=" + useType + ")");
content = XMLUtils.XmlToJson(document.getDocumentElement(), true, useType, jsonRoot);
responseContentType = MimeType.Json.value();
} else {
content = XMLUtils.prettyPrintDOMWithEncoding(xmlHttpDocument, "UTF-8");
responseContentType = MimeType.Xml.value();
}
} else {
response.setStatus(HttpServletResponse.SC_NO_CONTENT);
}
// Set response content-type header
if (responseContentType != null) {
HeaderName.ContentType.addHeader(response, responseContentType);
}
// Set response content
if (content != null) {
response.setCharacterEncoding(encoding);
if (Engine.logContext.isInfoEnabled()) {
try {
String json = new JSONObject(content).toString(1);
int len = json.length();
if (len > 5000) {
String txt = json.substring(0, 5000) + "\n... (see the complete message in DEBUG log level)";
Engine.logContext.info("Generated REST Json:\n" + txt);
Engine.logContext.debug("Generated REST Json:\n" + json);
} else {
Engine.logContext.info("Generated REST Json:\n" + json);
}
} catch (Exception e) {
}
}
}
return content;
} catch (Throwable t) {
throw new EngineException("Operation \"" + getName() + "\" failed to handle request", t);
} finally {
if (terminateSession) {
request.setAttribute("convertigo.requireEndOfContext", true);
}
}
}
use of com.twinsoft.convertigo.beans.core.UrlMappingResponse in project convertigo by convertigo.
the class OpenApiUtils method writeOpenApiToFile.
private static void writeOpenApiToFile(final String requestUrl, final UrlMapper urlMapper, final File yamlFile, boolean useExternalRef) throws Exception {
synchronized (lockObject) {
if (yamlFile.exists() && Engine.isEngineMode())
return;
Long t0 = System.currentTimeMillis();
Project project = urlMapper.getProject();
String projectName = project.getName();
String oasDirUrl = requestUrl.substring(0, requestUrl.indexOf("/" + servletMappingPath)) + "/projects/" + projectName + "/" + jsonSchemaDirectory + "/";
OpenAPI openAPI = parseCommon(requestUrl, project);
List<Tag> tags = new ArrayList<>();
Tag tag = new Tag();
tag.setName(project.getName());
tag.setDescription(project.getComment());
tags.add(tag);
openAPI.setTags(tags);
if (openAPI.getComponents() == null) {
openAPI.components(new Components());
}
// Security
Map<String, SecurityScheme> securitySchemes = openAPI.getComponents().getSecuritySchemes();
for (UrlAuthentication authentication : urlMapper.getAuthenticationList()) {
if (AuthenticationType.Basic.equals(authentication.getType())) {
if (securitySchemes == null || !securitySchemes.containsKey("basicAuth")) {
SecurityScheme securitySchemesItem = new SecurityScheme();
securitySchemesItem.setType(SecurityScheme.Type.HTTP);
securitySchemesItem.setScheme("basic");
openAPI.getComponents().addSecuritySchemes("basicAuth", securitySchemesItem);
SecurityRequirement securityRequirement = new SecurityRequirement();
securityRequirement.addList("basicAuth", new ArrayList<String>());
openAPI.addSecurityItem(securityRequirement);
}
}
}
List<String> refList = new ArrayList<String>();
List<String> opIdList = new ArrayList<String>();
// Paths
Paths paths = new Paths();
try {
for (UrlMapping urlMapping : urlMapper.getMappingList()) {
PathItem item = new PathItem();
for (UrlMappingOperation umo : urlMapping.getOperationList()) {
Operation operation = new Operation();
operation.setOperationId(getOperationId(opIdList, umo, false));
operation.setDescription(umo.getComment());
operation.setSummary(umo.getComment());
// Tags
List<String> list = Arrays.asList("" + project.getName());
operation.setTags(list);
// 1 - add path parameters
for (String pathVarName : urlMapping.getPathVariableNames()) {
PathParameter parameter = new PathParameter();
parameter.setName(pathVarName);
// retrieve parameter description from bean
UrlMappingParameter ump = null;
try {
ump = umo.getParameterByName(pathVarName);
} catch (Exception e) {
}
if (ump != null && ump.getType() == Type.Path) {
parameter.setDescription(ump.getComment());
Schema<?> schema = getSchema(ump);
if (schema != null) {
parameter.setSchema(schema);
}
}
operation.addParametersItem(parameter);
}
// 2 - add other parameters
for (UrlMappingParameter ump : umo.getParameterList()) {
Parameter parameter = null;
if (ump.getType() == Type.Query) {
parameter = new QueryParameter();
} else if (ump.getType() == Type.Form) {
addFormParameter(operation, ump);
} else if (ump.getType() == Type.Body) {
addBodyParameter(operation, ump, oasDirUrl, refList, useExternalRef);
} else if (ump.getType() == Type.Header) {
parameter = new HeaderParameter();
} else if (ump.getType() == Type.Path) {
// ignore : should have been treated before
}
if (parameter != null) {
// Query | Header
parameter.setName(ump.getName());
parameter.setDescription(ump.getComment());
parameter.setRequired(ump.isRequired());
// parameter.setAllowEmptyValue(allowEmptyValue);
Schema<?> schema = getSchema(ump);
if (schema != null) {
parameter.setSchema(schema);
}
// add parameter
if (ump.isExposed()) {
operation.addParametersItem(parameter);
}
}
}
// Responses
List<String> produces = new ArrayList<String>();
if (umo instanceof AbstractRestOperation) {
DataContent dataOutput = ((AbstractRestOperation) umo).getOutputContent();
if (dataOutput.equals(DataContent.toJson)) {
produces = Arrays.asList(MimeType.Json.value());
} else if (dataOutput.equals(DataContent.toXml)) {
produces = Arrays.asList(MimeType.Xml.value());
} else {
produces = Arrays.asList(MimeType.Json.value(), MimeType.Xml.value());
}
}
ApiResponses responses = new ApiResponses();
operation.setResponses(responses);
for (UrlMappingResponse umr : umo.getResponseList()) {
String statusCode = umr.getStatusCode();
if (!statusCode.isEmpty()) {
if (!responses.containsKey(statusCode)) {
ApiResponse response = new ApiResponse();
response.setDescription(umr.getStatusText());
responses.addApiResponse(statusCode, response);
String modelReference = ((IMappingRefModel) umr).getModelReference();
if (!modelReference.isEmpty() && !produces.isEmpty()) {
if (modelReference.indexOf(".jsonschema") != -1) {
modelReference = modelReference.replace(".jsonschema#/definitions/", ".json#/components/schemas/");
modelReference = oasDirUrl + modelReference;
}
Content content = new Content();
response.setContent(content);
for (String mt : produces) {
MediaType mediaType = new MediaType();
content.addMediaType(mt, mediaType);
ObjectSchema schema = new ObjectSchema();
if (!refList.contains(modelReference)) {
refList.add(modelReference);
}
if (!useExternalRef && modelReference.indexOf('#') != -1) {
modelReference = modelReference.substring(modelReference.indexOf('#'));
}
schema.set$ref(modelReference);
mediaType.setSchema(schema);
}
}
}
}
}
if (umo.getMethod().equals(HttpMethodType.DELETE.name())) {
item.setDelete(operation);
} else if (umo.getMethod().equals(HttpMethodType.GET.name())) {
item.setGet(operation);
} else if (umo.getMethod().equals(HttpMethodType.HEAD.name())) {
item.setHead(operation);
} else if (umo.getMethod().equals(HttpMethodType.OPTIONS.name())) {
item.setOptions(operation);
} else if (umo.getMethod().equals(HttpMethodType.POST.name())) {
item.setPost(operation);
} else if (umo.getMethod().equals(HttpMethodType.PUT.name())) {
item.setPut(operation);
} else if (umo.getMethod().equals(HttpMethodType.TRACE.name())) {
item.setTrace(operation);
}
}
paths.addPathItem(urlMapping.getPathWithPrefix(), item);
}
} catch (Exception e) {
e.printStackTrace();
Engine.logEngine.error("Unexpected exception while parsing UrlMapper to generate definition", e);
}
openAPI.setPaths(paths);
// Models and Schemas
try {
Map<String, JSONObject> modelMap = new HashMap<String, JSONObject>(1000);
String models = getModels(oasDirUrl, urlMapper, modelMap);
/*System.out.println("refList");
for (String keyRef: refList) {
System.out.println(keyRef);
}
System.out.println("modelMap");
for (String keyRef: modelMap.keySet()) {
System.out.println(keyRef);
}*/
Set<String> done = new HashSet<String>();
JSONObject jsonModels = new JSONObject(models);
for (String keyRef : refList) {
addModelsFromMap(done, modelMap, keyRef, jsonModels);
}
OpenAPI oa = new OpenAPI();
String s = Json.pretty(oa.info(new Info()));
JSONObject json = new JSONObject(s);
json.put("components", new JSONObject());
json.getJSONObject("components").put("schemas", jsonModels);
JsonNode rootNode = Json.mapper().readTree(json.toString());
OpenAPIDeserializer ds = new OpenAPIDeserializer();
SwaggerParseResult result = ds.deserialize(rootNode);
@SuppressWarnings("rawtypes") Map<String, Schema> map = result.getOpenAPI().getComponents().getSchemas();
openAPI.getComponents().schemas(map);
modelMap.clear();
} catch (Throwable t) {
t.printStackTrace();
Engine.logEngine.error("Unexpected exception while parsing UrlMapper to generate models", t);
}
// write yaml
try {
FileUtils.write(yamlFile, prettyPrintYaml(openAPI), "UTF-8");
} catch (Exception e) {
e.printStackTrace();
Engine.logEngine.error("Unexpected exception while writing project YAML file", e);
} finally {
Long t1 = System.currentTimeMillis();
Engine.logEngine.info("YAML file for " + projectName + " project written in " + (t1 - t0) + " ms");
}
}
}
Aggregations