Skip to content

Commit

Permalink
implemented retrofit client
Browse files Browse the repository at this point in the history
  • Loading branch information
egandro committed Jul 1, 2017
1 parent 7ab18e4 commit a983479
Show file tree
Hide file tree
Showing 13 changed files with 222 additions and 277 deletions.
Original file line number Diff line number Diff line change
@@ -1,30 +1,22 @@
const path = require('path');
const fs = require('fs');
const process = require('process');

import { GeneratorConfigBasic } from '../../persistance/generatorconfig.basic';
import { GeneratorConfigSequelizeTSDal } from '../../persistance/generatorconfig.sequelize.ts.dal';
import { GeneratorConfigAndroidRetrofitClient, AndroidRetrofitFilter } from '../../persistance/generatorconfig.android.retrofit.client';

import { ApiParser } from '../../swagger/apiparser.class';
import { ApiTools } from '../../swagger/apitools.class';

import { ApiDescription } from '../../swagger/entites/apidesciption.class';
import { ControllerType } from '../../swagger/entites/controllertype.class';

import { FileManger } from '../filemanager';
import { BaseGenerator } from '../basegenerator';
import { RenderTemplate } from '../rendertemplate';

import { MetadataSymbolTable } from '../symboltable/metadata/metadatasymboltable';
import { ControllerSymbol } from '../symboltable/metadata/controllersymbol';
import { ReferenceTypeSymbol } from '../symboltable/metadata/referencetypesymbol';
import { MetadataSymbolTableReader } from '../symboltable/metadata/metadatasymboltable.reader';

import { SymbolNameMapper } from '../symbolnamemapper';
import { DBSymbolTable } from '../symboltable/db/dbsymboltable';
import { DBSymbolTableReader } from '../symboltable/db/dbsymboltable.reader';
import { AndroidRetrofitClientTypeMapper } from './android.retrofit.client.typemapper.class';
import { AndroidRetrofitJavaMapping } from './android.retrofit.java.mapping';

export class AndroidRetrofitClientGenerator extends BaseGenerator {
protected generatorConfig: GeneratorConfigAndroidRetrofitClient;
protected metadataSymbolTable: MetadataSymbolTable;
protected dbSymbolTable: DBSymbolTable;

constructor(generatorConfigBasic: GeneratorConfigBasic, nicassaJson: string) {
super(generatorConfigBasic, nicassaJson);
Expand All @@ -39,7 +31,7 @@ export class AndroidRetrofitClientGenerator extends BaseGenerator {
}

public getDefaultConfig(name: string): GeneratorConfigAndroidRetrofitClient {
let unirestTSClientFilter: AndroidRetrofitFilter = {
let angularClientFilter: AndroidRetrofitFilter = {
exculdeDto: [],
exculdeService: [],
onlyDto: [],
Expand All @@ -52,22 +44,24 @@ export class AndroidRetrofitClientGenerator extends BaseGenerator {
name: name,
type: type,
active: true,
targetDir: './unirest-ts-client',
swaggerFile: './swagger.json',
targetDir: './android.retrofit.client',
cleanTargetDir: false,
createProject: false,
projectName: 'unirest-ts-client',
projectName: 'android.retrofit.client',
ngModuleName: 'RetrofitClient',
namespace: 'com.example.android.retrofit.client',
namespaceDto: 'com.example.android.retrofit.client.dto',
filter: unirestTSClientFilter
controllerNames: [],
filter: angularClientFilter
};

return result;
}

protected async generateCode(): Promise<boolean> {

this.metadataSymbolTable = MetadataSymbolTableReader.readFromJsonString(this.nicassaJson);
this.setLengthToMetaData();
let parser = new ApiParser();
let api: ApiDescription = await parser.parseSwaggerFile(this.generatorConfig.swaggerFile);

let createProject: boolean = this.generatorConfig.createProject;
let createGitIgnore: boolean = false;
Expand Down Expand Up @@ -106,12 +100,24 @@ export class AndroidRetrofitClientGenerator extends BaseGenerator {
projectName = 'undefined';
}

let controllers = this.applyControllerFilter(<any>this.generatorConfig.filter, this.metadataSymbolTable.controllers);
let referenceTypes = this.applyReferenceTypeFilter(<any>this.generatorConfig.filter, this.metadataSymbolTable.referenceTypes);
let ngModuleName = this.generatorConfig.ngModuleName;

let controllers: ControllerType[] = ApiTools.createControllersFromRoute(ngModuleName, this.generatorConfig.controllerNames, api.routes);
let complexTypes = api.complexTypes

if(this.generatorConfig.filter != null) {
let exculdeController: string[] = <any>this.generatorConfig.filter.exculdeService;
let onlyService: string[] = <any>this.generatorConfig.filter.onlyService;
let exculdeEntity: string[] = <any>this.generatorConfig.filter.exculdeDto;
let onlyEntity: string[] = <any>this.generatorConfig.filter.onlyDto;

controllers = ApiTools.applyControllerFilter(exculdeController, onlyService, controllers);
complexTypes = ApiTools.applyReferenceTypeFilter(exculdeEntity, onlyEntity, api.complexTypes);
}

let data = {
controllers: controllers,
referenceTypes: referenceTypes,
complexTypes: complexTypes,
namespace: this.generatorConfig.namespace,
namespaceDto: this.generatorConfig.namespaceDto,
projectName: projectName
Expand All @@ -124,12 +130,12 @@ export class AndroidRetrofitClientGenerator extends BaseGenerator {
await RenderTemplate.renderTemplateToDir(path.join(this.getTargetDir(), 'src/main/res/values'), createStringsXml, this, 'strings.xml.ejs', data);
await RenderTemplate.renderTemplateToDir(namespaceControllerDir, createConfiguration, this, 'configuration.java.ejs', data, 'Configuration.java');

for (let i = 0; i < referenceTypes.length; i++) {
let dto = referenceTypes[i];
for (let i = 0; i < complexTypes.length; i++) {
let dto = complexTypes[i];
let dtoData = data;
(<any>dtoData).dto = dto;
let dtoJava = dto.getMappedName('Java') + ".java";
await RenderTemplate.renderTemplateToDir(namespaceDtoDir, true, this, 'dto.java.ejs', dtoData, dtoJava);
let fileName = dto.type + ".java";
await RenderTemplate.renderTemplateToDir(namespaceDtoDir, true, this, 'dto.java.ejs', dtoData, fileName);
}

for (let i = 0; i < controllers.length; i++) {
Expand All @@ -141,152 +147,8 @@ export class AndroidRetrofitClientGenerator extends BaseGenerator {
}

return await true;
}


protected applyControllerFilter(filter: AndroidRetrofitFilter, controllers: ControllerSymbol[]): ControllerSymbol[] {
if (filter === undefined || filter === null) {
return controllers;
}

if (controllers === undefined || controllers === null || controllers.length === 0) {
return controllers;
}

let exculdeController: string[] = <any>filter.exculdeService;
let only: string[] = <any>filter.onlyService;

if (exculdeController === undefined || exculdeController === null) {
exculdeController = [];
}
if (only === undefined || only === null) {
only = [];
}

let result: ControllerSymbol[] = [];
for (let k = 0; k < controllers.length; k++) {
let ctrl = controllers[k];
// excluded
if (only.length == 0 && exculdeController.indexOf(ctrl.name) != -1) {
continue;
}
if (only.length > 0 && only.indexOf(ctrl.name) == -1) {
continue;
}
result.push(ctrl);
}

return result;
}

protected applyReferenceTypeFilter(filter: AndroidRetrofitFilter, referenceTypes: ReferenceTypeSymbol[]): ReferenceTypeSymbol[] {
if (referenceTypes === undefined || referenceTypes === null || referenceTypes.length === 0) {
return referenceTypes;
}

let exculdeDto: string[] = <any>filter.exculdeDto;
let only: string[] = <any>filter.onlyDto;

if (exculdeDto === undefined || exculdeDto === null) {
exculdeDto = [];
}
if (only === undefined || only === null) {
only = [];
}

let result: ReferenceTypeSymbol[] = [];
for (let k = 0; k < referenceTypes.length; k++) {
let entity = referenceTypes[k];
// excluded
if (only.length == 0 && exculdeDto.indexOf(entity.name) != -1) {
continue;
}
if (only.length > 0 && only.indexOf(entity.name) == -1) {
continue;
}
result.push(entity);
}

return result;
}

protected setLengthToMetaData() {
if (this.parentGeneratorConfig.nicassaParserDBFile === undefined || this.parentGeneratorConfig.nicassaParserDBFile === null) {
return;
}

if (!fs.existsSync(this.parentGeneratorConfig.nicassaParserDBFile)) {
console.error('error: can\'t find nicassaParserDBFile: ' + this.parentGeneratorConfig.nicassaParserDBFile + '\'');
process.exit(-1);
}

let json = null;
try {
json = fs.readFileSync(this.parentGeneratorConfig.nicassaParserDBFile);
} catch (err) {
console.error('error: can\'t read nicassaParserDBFile: ' + this.parentGeneratorConfig.nicassaParserDBFile + '\'');
process.exit(-1);
}

if (this.parentGeneratorConfig.nicassaParserDBGeneratorName === undefined || this.parentGeneratorConfig.nicassaParserDBGeneratorName === null) {
console.error('error: can\'t find nicassaParserDBGeneratorName for the nicassaParserDBFile: ' + this.parentGeneratorConfig.nicassaParserDBFile + '\'');
process.exit(-1);
}

// we need the config...
let gen: GeneratorConfigSequelizeTSDal = <any>BaseGenerator.getGeneratorByName
(this.parentGeneratorConfig.nicassaParserDBFile, <any>this.parentGeneratorConfig.nicassaParserDBGeneratorName);

if (gen === undefined || gen === null) {
console.error('error: can\'t find generator with name ' +
this.parentGeneratorConfig.nicassaParserDBGeneratorName + ' for the nicassaParserDBFile: ' + this.parentGeneratorConfig.nicassaParserDBFile + '\'');
process.exit(-1);
}

// .. to map with the settings
let dataTypeMapping = AndroidRetrofitJavaMapping.dataTypeMapping;
let typeMapper: AndroidRetrofitClientTypeMapper = new AndroidRetrofitClientTypeMapper(this.generatorConfig, dataTypeMapping);

this.dbSymbolTable = DBSymbolTableReader.readFromJsonString(json, <any>gen.filter, typeMapper);
this.updateMetaSymbolTableLengthFromDbSymbolTable(this.metadataSymbolTable, this.dbSymbolTable);
}

protected updateMetaSymbolTableLengthFromDbSymbolTable(meta: MetadataSymbolTable, db: DBSymbolTable) {
if (db.entities === undefined || db.entities === null || db.entities.length === 0) {
return;
}

if (meta.referenceTypes === undefined || meta.referenceTypes === null || meta.referenceTypes.length === 0) {
return;
}

// create the map
let entityColumnMap: any = {};
for (let i = 0; i < db.entities.length; i++) {
let entity = db.entities[i];
entityColumnMap[entity.getMappedName('Java')] = {};
for (let k = 0; k < entity.columns.length; k++) {
let column = entity.columns[k];
if (column.length === undefined || column.length === null || column.length < 0) {
continue;
}
entityColumnMap[entity.getMappedName('Java')][column.getMappedName('Java')] = column.length;
}
}

for (let i = 0; i < meta.referenceTypes.length; i++) {
let ref = meta.referenceTypes[i];
if (!entityColumnMap.hasOwnProperty(ref.name)) {
continue;
}
for (let k = 0; k < ref.properties.length; k++) {
let prop = ref.properties[k];
if (!entityColumnMap[ref.name].hasOwnProperty(prop.name)) {
continue;
}
prop.length = entityColumnMap[ref.name][prop.name];
}
}
}
}

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="<%- namespace%>">

<uses-permission android:name="android.permission.INTERNET"/>

<application android:allowBackup="true" android:label="@string/app_name"
android:supportsRtl="true">

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ android {
buildToolsVersion "25.0.2"

defaultConfig {
minSdkVersion 23
minSdkVersion 21
targetSdkVersion 25
versionCode 1
versionName "1.0"
Expand All @@ -21,7 +21,7 @@ android {
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:25.1.0'
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:converter-jackson:2.1.0'
compile 'com.squareup.retrofit2:converter-scalars:2.1.0'
Expand Down
Loading

0 comments on commit a983479

Please sign in to comment.