Skip to content
This repository was archived by the owner on Jan 21, 2024. It is now read-only.

Commit b9b9316

Browse files
Initial commit
1 parent 8dded01 commit b9b9316

19 files changed

+1808
-2
lines changed

.gitignore

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/node_modules
2+
3+
/src/**/*.js
4+
/src/**/*.js.map
5+
/src/**/*.d.ts
6+
/java
7+
8+
*.iml
9+
*.log
10+
11+
/typings/
12+
13+
/dist/
14+
15+
.project
16+
.settings

.npmignore

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
/node_modules
2+
3+
/src/**/*.js
4+
/src/**/*.js.map
5+
/src/**/*.d.ts
6+
7+
*.iml
8+
9+
.project
10+
.settings

README.md

+41-2
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,41 @@
1-
# raml-java-parser-interfaces
2-
Generator for Java RAML parser interfaces
1+
# RAML Definition System
2+
3+
> This repository contains a set of interfaces that represents a declarative description of the RAML specification.
4+
5+
**IMPORTANT: This is still in development and should be considered alpha.**
6+
7+
## Installation
8+
9+
### From NPM
10+
11+
```
12+
npm install java-raml-parser-interfaces --save
13+
```
14+
15+
### From Sources
16+
17+
```
18+
typings install
19+
npm install
20+
tsc
21+
```
22+
23+
## Generate
24+
25+
Make sure you executed all necessary installation steps before you try to generate anything.
26+
The result files can be found inside the `./java` subfolder ending with `.json`.
27+
28+
```
29+
node dist/generateSpecInterfaces.js
30+
```
31+
32+
You may also specify the `-dstPath` parameter in order to override default `./java` destination path.
33+
34+
35+
## RAML version support
36+
37+
Currently, the definition system provides interfaces for RAML 0.8 and 1.0 RC1 version.
38+
39+
## License
40+
41+
Apache License 2.0

custom_typings/pluralize.d.ts

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
declare module "pluralize" {
2+
function plural(value: string):string
3+
function singular(value: string):string
4+
}

license.txt

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
Copyright 2015 (c) MuleSoft, Inc.
2+
3+
Licensed under the Apache License, Version 2.0 (the "License");
4+
you may not use this file except in compliance with the License.
5+
You may obtain a copy of the License at
6+
7+
http://www.apache.org/licenses/LICENSE-2.0
8+
9+
Unless required by applicable law or agreed to in writing,
10+
software distributed under the License is distributed on an
11+
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
12+
either express or implied. See the License for the specific
13+
language governing permissions and limitations under the License.

package.json

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
{
2+
"name": "raml-parser-java-interfaces",
3+
"version": "0.0.1",
4+
"main": "dist/definitionSystem.js",
5+
"scripts": {
6+
"compile": "tsc"
7+
},
8+
"dependencies": {
9+
"mkdirp": "^0.5.1",
10+
"pluralize": "^1.2.1",
11+
"raml-definition-system": "^0.0.14",
12+
"ts-model": "^0.0.1",
13+
"ts-structure-parser": "^0.0.5",
14+
"underscore": "^1.8.3"
15+
},
16+
"typings": "dist/definitionSystem.d.ts",
17+
"repository": {
18+
"type": "git",
19+
"url": "https://github.com/raml-org/raml-parser-java-interfaces.git"
20+
},
21+
"keywords": [
22+
"raml",
23+
"parser",
24+
"java"
25+
],
26+
"homepage": "https://github.com/raml-org/raml-parser-java-interfaces",
27+
"license": "Apache-2.0",
28+
"bugs": {
29+
"url": "https://github.com/raml-org/raml-parser-java-interfaces/issues"
30+
},
31+
"devDependencies": {
32+
"typescript": "^1.8.9",
33+
"typings": "^0.7.9"
34+
}
35+
}

src/fsutil.ts

+141
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
import fs = require("fs");
2+
import mkdirp = require("mkdirp");
3+
import path = require("path");
4+
import util = require("./util")
5+
6+
export interface PatternReplacementSet{
7+
[key:string]:{
8+
regexp?:RegExp
9+
map:{
10+
[key:string]:string}
11+
}
12+
}
13+
14+
export interface CopyOptions{
15+
16+
forceDelete?: boolean
17+
18+
pathReplacements?:{[key:string]:string}
19+
20+
contentReplacements?:{[key:string]:string}
21+
22+
pathPatternReplacements?:PatternReplacementSet
23+
24+
contentPatternReplacements?:PatternReplacementSet
25+
26+
ignore?:string
27+
}
28+
29+
export function copyDirSyncRecursive(
30+
to:string,
31+
from:string,
32+
opt?:CopyOptions,
33+
pathFilter?:(x:string)=>boolean,
34+
contentFilter?:(x:string)=>boolean):void{
35+
36+
opt = opt||{};
37+
38+
if(path.resolve(to)==path.resolve(from)){
39+
return;
40+
}
41+
42+
if(opt.ignore && new RegExp(opt.ignore).exec(from)!=null){
43+
return;
44+
}
45+
46+
var fd = opt.forceDelete;
47+
48+
if(!fs.lstatSync(from).isDirectory()){
49+
50+
to = patch(to, to, opt.pathReplacements,opt.pathPatternReplacements);
51+
if(!fd && fs.existsSync(to)){
52+
return;
53+
}
54+
mkdirp.sync(path.dirname(to));
55+
56+
var buffer = fs.readFileSync(from);
57+
if(opt.contentReplacements||opt.contentPatternReplacements||contentFilter){
58+
var content = buffer.toString();
59+
var contentLegal = contentFilter ? contentFilter(content) : true;
60+
if(contentLegal) {
61+
content = patch(to, content, opt.contentReplacements, opt.contentPatternReplacements);
62+
fs.writeFileSync(to, content);
63+
}
64+
}
65+
else{
66+
fs.writeFileSync(to, buffer);
67+
}
68+
return;
69+
}
70+
fs.readdirSync(from).forEach(x=>{
71+
72+
var fromChild = path.resolve(from,x);
73+
if(pathFilter && !pathFilter(fromChild)){
74+
return;
75+
}
76+
var toChild = path.resolve(to,x);
77+
copyDirSyncRecursive(toChild,fromChild,opt,pathFilter,contentFilter);
78+
});
79+
}
80+
81+
export function removeDirSyncRecursive(dirPath:string) {
82+
83+
if(!fs.existsSync(dirPath)){
84+
return;
85+
}
86+
if(!fs.lstatSync(dirPath).isDirectory()){
87+
fs.unlinkSync(dirPath);
88+
return;
89+
}
90+
fs.readdirSync(dirPath).map(x=>path.resolve(dirPath,x)).forEach(x=>removeDirSyncRecursive(x));
91+
fs.rmdirSync(dirPath);
92+
}
93+
94+
95+
var patch = function (
96+
filePath:string,
97+
target:string,
98+
replacements:{[key:string]:string},
99+
patternReplacements:PatternReplacementSet) {
100+
101+
if(patternReplacements){
102+
var regexps = Object.keys(patternReplacements);
103+
for(var i = 0 ; i < regexps.length; i++){
104+
var str = regexps[i];
105+
var regexp:RegExp = patternReplacements[str].regexp;
106+
if(regexp == null){
107+
regexp = new RegExp(str);
108+
patternReplacements[str].regexp = regexp;
109+
}
110+
if(regexp.exec(filePath)!=null){
111+
return util.replaceMap(target,patternReplacements[str].map);
112+
}
113+
}
114+
}
115+
116+
if(replacements) {
117+
return util.replaceMap(target, replacements);
118+
}
119+
return target;
120+
};
121+
122+
export function copyFileSync(sourcePath: string, targetPath : string) {
123+
124+
var bufferLength = 16384;
125+
var buffer = new Buffer(bufferLength);
126+
var sourceDescriptor = fs.openSync(sourcePath, 'r');
127+
var targetDescriptor = fs.openSync(targetPath, 'w');
128+
129+
var numBytes = fs.readSync(sourceDescriptor, buffer, 0, bufferLength, 0);
130+
var currentPosition = 0;
131+
132+
while(numBytes > 0) {
133+
(<any>fs).writeSync(targetDescriptor,buffer,0,numBytes);
134+
135+
currentPosition += numBytes;
136+
numBytes = fs.readSync(sourceDescriptor, buffer, 0, bufferLength, currentPosition);
137+
}
138+
139+
fs.closeSync(sourceDescriptor)
140+
fs.closeSync(targetDescriptor)
141+
}

src/generateSpecInterfaces.ts

+111
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
/**
2+
* Generates spec interfaces for Java RAML 1.0 and 0.8 parser.
3+
*
4+
* Command line parameters:
5+
* -dstPath location of the target workspace. Default is ./java/nativeParser in the 'api-workbench' project
6+
*
7+
**/
8+
9+
/// <reference path="../typings/main.d.ts" />
10+
11+
import javaNativeParserWrappersGenerator = require("./javaNativeParserWrappersGenerator");
12+
import path = require("path");
13+
import def = require("raml-definition-system");
14+
import universeDef = def.universesInfo;
15+
import util = require("./util");
16+
import fsutil = require("./fsutil");
17+
18+
var DEFAULT_DST = path.resolve(__dirname,"../java");
19+
var STATIC_CORE_DIR = path.resolve(__dirname,"../staticCode");
20+
var PARENT_PROJECT = "spec-model";
21+
22+
var SPEC_PROJECT_NAME_10 = 'raml-spec-model-1.0';
23+
24+
var SPEC_PROJECT_NAME_08 = 'raml-spec-model-0.8';
25+
26+
var ROOT_SPEC_PACKAGE_10 = "org.raml";
27+
28+
var ROOT_SPEC_PACKAGE_08 = "org.raml";
29+
30+
var CORE_PACKAGE = "org.raml.model.core";
31+
32+
function generate( _dstWSPath:string, corePackage )
33+
{
34+
var parentProjectPathDst = path.resolve(_dstWSPath,PARENT_PROJECT);
35+
var parentProjectPathSrc = path.resolve(STATIC_CORE_DIR,PARENT_PROJECT);
36+
fsutil.copyDirSyncRecursive(parentProjectPathDst,parentProjectPathSrc);
37+
38+
var universe10 = def.getUniverse("RAML10");
39+
var apiType10= universe10.type(universeDef.Universe10.Api.name);
40+
41+
42+
var raml10SrcFolder = path.resolve(parentProjectPathDst, `${SPEC_PROJECT_NAME_10}/src/main/java`);
43+
var wrapperConfig10 = {
44+
rootPackage: ROOT_SPEC_PACKAGE_10,
45+
sourceFolderAbsolutePath: raml10SrcFolder,
46+
ramlVersion: "RAML10",
47+
generateImplementation:false,
48+
ignoreInSufficientHelpers:true,
49+
generateRegistry:false,
50+
corePackage: corePackage
51+
};
52+
javaNativeParserWrappersGenerator.def2Parser(apiType10, wrapperConfig10, universe10);
53+
54+
var universe08 = def.getUniverse("RAML08");
55+
var apiType08= universe08.type(universeDef.Universe08.Api.name);
56+
57+
var raml08SrcFolder = path.resolve(parentProjectPathDst, `${SPEC_PROJECT_NAME_08}/src/main/java`);
58+
var wrapperConfig08 = {
59+
rootPackage: ROOT_SPEC_PACKAGE_08,
60+
sourceFolderAbsolutePath: raml08SrcFolder,
61+
ramlVersion: "RAML08",
62+
generateImplementation:false,
63+
ignoreInSufficientHelpers:true,
64+
generateRegistry:false,
65+
corePackage: corePackage
66+
};
67+
javaNativeParserWrappersGenerator.def2Parser(apiType08, wrapperConfig08, universe08);
68+
69+
var originalCoreSrc = path.resolve(STATIC_CORE_DIR,"corePackage");
70+
71+
var contentPatternReplacements:fsutil.PatternReplacementSet = {
72+
".java$": {
73+
"map": {
74+
"__core_package__": corePackage
75+
}
76+
}
77+
};
78+
var pathMap:{[key:string]:string} = {
79+
"__core_package__": corePackage.replace(/\./g, "/")
80+
};
81+
var replacementOptions = {
82+
contentPatternReplacements: contentPatternReplacements,
83+
pathReplacements: pathMap
84+
};
85+
86+
fsutil.copyDirSyncRecursive(raml10SrcFolder,originalCoreSrc, replacementOptions);
87+
fsutil.copyDirSyncRecursive(raml08SrcFolder,originalCoreSrc, replacementOptions);
88+
}
89+
90+
var dstWorkspacePath;
91+
var rootPackage;
92+
93+
var args:string[] = process.argv;
94+
for(var i = 0 ; i < args.length ; i++){
95+
if(args[i]=='-dstPath' && i < args.length-1){
96+
dstWorkspacePath = args[i+1];
97+
}
98+
else if(args[i]=='-rootPackage' && i < args.length-1){
99+
rootPackage = args[i+1];
100+
}
101+
}
102+
103+
if(!dstWorkspacePath){
104+
dstWorkspacePath = DEFAULT_DST;
105+
}
106+
if(!rootPackage){
107+
rootPackage = CORE_PACKAGE;
108+
}
109+
110+
111+
generate( dstWorkspacePath, rootPackage );

0 commit comments

Comments
 (0)