Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion .github/workflows/test-other.yml
Original file line number Diff line number Diff line change
Expand Up @@ -63,4 +63,8 @@ jobs:
- name: Run tests ${{ inputs.test-name }}
working-directory: tests/
run:
./${{ inputs.test-name }}
./${{ inputs.test-name }}

- name: Run tests cobj-api
run:
make test-cobj-api
3 changes: 3 additions & 0 deletions Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -75,3 +75,6 @@ defaults.h: Makefile.am $(top_builddir)/config.status
echo "#define COB_MODULE_EXT \"$(COB_MODULE_EXT)\""; \
echo "#define LOCALEDIR \"$(datadir)/locale\""; \
} > defaults.h

test-cobj-api:
$(MAKE) -C libcobj test
3 changes: 3 additions & 0 deletions Makefile.in
Original file line number Diff line number Diff line change
Expand Up @@ -1025,6 +1025,9 @@ defaults.h: Makefile.am $(top_builddir)/config.status
echo "#define LOCALEDIR \"$(datadir)/locale\""; \
} > defaults.h

test-cobj-api:
$(MAKE) -C libcobj test

# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
17 changes: 14 additions & 3 deletions libcobj/Makefile.am
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
TARGET_JAR = app/build/libs/libcobj.jar
COBJ_IDX = bin/cobj-idx
COBJ_API = bin/cobj-api

SRC_FILES = \
settings.gradle.kts \
Expand Down Expand Up @@ -71,7 +72,7 @@ SRC_FILES = \
./app/src/main/java/jp/osscons/opensourcecobol/libcobj/ui/CobolCallResult.java \
./app/src/main/java/jp/osscons/opensourcecobol/libcobj/ui/CobolResultInt.java \
./app/src/main/java/jp/osscons/opensourcecobol/libcobj/ui/CobolResultString.java \
./app/src/main/java/jp/osscons/opensourcecobol/libcobj/ui/CobolResultDouble.java \
./app/src/main/java/jp/osscons/opensourcecobol/libcobj/ui/CobolResultDouble.java \
./app/src/main/java/jp/osscons/opensourcecobol/libcobj/user_util/indexed_file/IndexedFileUtilMain.java \
./app/src/main/java/jp/osscons/opensourcecobol/libcobj/user_util/indexed_file/ErrorLib.java \
./app/src/main/java/jp/osscons/opensourcecobol/libcobj/user_util/indexed_file/LoadResult.java \
Expand All @@ -80,7 +81,12 @@ SRC_FILES = \
./app/src/main/java/jp/osscons/opensourcecobol/libcobj/user_util/indexed_file/RecordWriter.java \
./app/src/main/java/jp/osscons/opensourcecobol/libcobj/user_util/indexed_file/StdinRecordReader.java \
./app/src/main/java/jp/osscons/opensourcecobol/libcobj/user_util/indexed_file/FileSeqRecordReader.java \
./app/src/main/java/jp/osscons/opensourcecobol/libcobj/user_util/indexed_file/FileLineSeqRecordReader.java
./app/src/main/java/jp/osscons/opensourcecobol/libcobj/user_util/indexed_file/FileLineSeqRecordReader.java\
./app/src/main/java/jp/osscons/opensourcecobol/libcobj/user_util/cobj_api/ApiFiles.java \
./app/src/main/java/jp/osscons/opensourcecobol/libcobj/user_util/cobj_api/ApiFilesOptions.java

TEST_FILE = \
./app/src/test/java/jp/osscons/opensourcecobol/libcobj/user_util/cobj_api/ApiFilesTest.java

all: $(TARGET_JAR)

Expand All @@ -90,7 +96,12 @@ $(TARGET_JAR): $(SRC_FILES)
clean:
rm -rf $(TARGET_JAR)

install: $(TARGET_JAR) $(COBJ_IDX)
install: $(TARGET_JAR) $(COBJ_IDX) $(COBJ_API)
mkdir -p $(DESTDIR)$(prefix)/lib/opensourcecobol4j/
install $(TARGET_JAR) $(DESTDIR)$(prefix)/lib/opensourcecobol4j/
install $(COBJ_IDX) $(DESTDIR)$(prefix)/bin/
install $(COBJ_API) $(DESTDIR)$(prefix)/bin/

test:
./gradlew test
rm -f ./app/testController.java ./app/testRecord.java
15 changes: 13 additions & 2 deletions libcobj/Makefile.in
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,7 @@ top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
TARGET_JAR = app/build/libs/libcobj.jar
COBJ_IDX = bin/cobj-idx
COBJ_API = bin/cobj-api
SRC_FILES = \
settings.gradle.kts \
./app/build.gradle.kts \
Expand Down Expand Up @@ -360,7 +361,12 @@ SRC_FILES = \
./app/src/main/java/jp/osscons/opensourcecobol/libcobj/user_util/indexed_file/RecordWriter.java \
./app/src/main/java/jp/osscons/opensourcecobol/libcobj/user_util/indexed_file/StdinRecordReader.java \
./app/src/main/java/jp/osscons/opensourcecobol/libcobj/user_util/indexed_file/FileSeqRecordReader.java \
./app/src/main/java/jp/osscons/opensourcecobol/libcobj/user_util/indexed_file/FileLineSeqRecordReader.java
./app/src/main/java/jp/osscons/opensourcecobol/libcobj/user_util/indexed_file/FileLineSeqRecordReader.java\
./app/src/main/java/jp/osscons/opensourcecobol/libcobj/user_util/cobj_api/ApiFiles.java \
./app/src/main/java/jp/osscons/opensourcecobol/libcobj/user_util/cobj_api/ApiFilesOptions.java

TEST_FILE = \
./app/src/test/java/jp/osscons/opensourcecobol/libcobj/user_util/cobj_api/ApiFilesTest.java

all: all-am

Expand Down Expand Up @@ -561,10 +567,15 @@ $(TARGET_JAR): $(SRC_FILES)
clean:
rm -rf $(TARGET_JAR)

install: $(TARGET_JAR) $(COBJ_IDX)
install: $(TARGET_JAR) $(COBJ_IDX) $(COBJ_API)
mkdir -p $(DESTDIR)$(prefix)/lib/opensourcecobol4j/
install $(TARGET_JAR) $(DESTDIR)$(prefix)/lib/opensourcecobol4j/
install $(COBJ_IDX) $(DESTDIR)$(prefix)/bin/
install $(COBJ_API) $(DESTDIR)$(prefix)/bin/

test:
./gradlew test
rm -f ./app/testController.java ./app/testRecord.java

# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
Expand Down
16 changes: 16 additions & 0 deletions libcobj/app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ dependencies {
implementation("com.google.guava:guava:31.1-jre")
implementation("org.xerial:sqlite-jdbc:3.30.1")
implementation("commons-cli:commons-cli:1.6.0")
testImplementation("org.junit.jupiter:junit-jupiter:5.9.3")
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
implementation("org.json:json:20231013")
spotbugs("com.github.spotbugs:spotbugs:4.8.0")
}

Expand Down Expand Up @@ -81,3 +84,16 @@ tasks.withType<Jar>().configureEach {
tasks.withType<ShadowJar> {
archiveClassifier.set("")
}

tasks.test {
useJUnitPlatform()
testLogging {
events("passed", "skipped", "failed")
}
}

tasks.named<Test>("test") {
// Use JUnit Platform for unit tests.
useJUnitPlatform()
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,213 @@
/*
* This Java source file was generated by the Gradle 'init' task.
*/
package jp.osscons.opensourcecobol.libcobj.user_util.cobj_api;

import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.file.Files;
import java.nio.file.Paths;
import org.json.JSONArray;
import org.json.JSONObject;

public class ApiFiles {
public static void main(String[] args) {
ApiFilesOptions.getOptions(args);

if (args.length == 0) {
System.out.println("No json file is specified.");
System.exit(1);
}

String filePath;
try {
filePath = args[1];
} catch (ArrayIndexOutOfBoundsException e) {
filePath = args[0];
}

javaCreate(filePath);
}

public static void javaCreate(String filePath) {
try {
String json = new String(Files.readAllBytes(Paths.get(filePath)));
JSONObject obj = new JSONObject(json);
String programId = obj.getString("program_id");
JSONArray params = obj.getJSONArray("procedure_division_using_parameters");

String outputDir;
FileWriter ctlFile;
FileWriter rcdFile;

if (ApiFilesOptions.outputDir != null) {
outputDir = ApiFilesOptions.outputDir + "/";
ctlFile = new FileWriter(outputDir + programId + "Controller.java");
rcdFile = new FileWriter(outputDir + programId + "Record.java");
} else {
ctlFile = new FileWriter(programId + "Controller.java");
rcdFile = new FileWriter(programId + "Record.java");
}

writeController(ctlFile, programId, params);
writeRecord(rcdFile, programId, params);

} catch (IOException e) {
e.printStackTrace();
System.err.println("Error reading file: " + e.getMessage());
System.exit(1);
}
}

public static void writeController(FileWriter ctlFile, String programId, JSONArray params) {
PrintWriter ctlWriter = new PrintWriter(ctlFile);
JSONObject param;
String name;
String type;
String defaultValue;
String methodName;
String nameController = programId + "Controller";
String nameRecord = programId + "Record";
int i;

if (ApiFilesOptions.packageName != null) {
ctlWriter.println("package " + ApiFilesOptions.packageName + ";");
} else {
ctlWriter.println("package com.example.restservice;");
}

ctlWriter.println(
"import java.util.concurrent.atomic.AtomicLong;\n"
+ "import org.springframework.web.bind.annotation.GetMapping;\n"
+ "import org.springframework.web.bind.annotation.RequestParam;\n"
+ "import org.springframework.web.bind.annotation.RestController;\n"
+ "import jp.osscons.opensourcecobol.libcobj.ui.*;\n");

ctlWriter.println(
"@RestController\n"
+ "public class "
+ nameController
+ " {\n"
+ " @GetMapping(\"/"
+ programId
+ "\")\n"
+ " public "
+ nameRecord
+ " "
+ nameController
+ "(");

for (i = 0; i < params.length(); ++i) {
param = params.getJSONObject(i);
name = param.getString("variable_name");
type = param.getString("java_type");
if ("String".equals(type)) {
defaultValue = "\"\"";
} else {
defaultValue = "\"0\"";
}

ctlWriter.print(
" @RequestParam(value = "
+ "\""
+ name
+ "\", defaultValue = "
+ defaultValue
+ ") "
+ type
+ " "
+ name);

if (i < params.length() - 1) {
ctlWriter.println(",");
} else {
ctlWriter.println();
}
}

ctlWriter.print(
" ) {\n"
+ " int statuscode = 200;\n"
+ " "
+ programId
+ " "
+ programId
+ "Cobol = new "
+ programId
+ "();\n"
+ " CobolResultSet result = "
+ programId
+ "Cobol.execute(");

for (i = 0; i < params.length(); ++i) {
param = params.getJSONObject(i);
name = param.getString("variable_name");
ctlWriter.print(name);

if (i < params.length() - 1) {
ctlWriter.print(", ");
}
}
ctlWriter.println(");\n" + " try {");

for (i = 0; i < params.length(); ++i) {
param = params.getJSONObject(i);
name = param.getString("variable_name");
type = param.getString("java_type");
if ("String".equals(type)) {
methodName = "getString";
} else if ("int".equals(type)) {
methodName = "getInt";
} else {
methodName = "getDouble";
}
ctlWriter.println(" " + name + " = result." + methodName + "(" + (i + 1) + ");");
}

ctlWriter.print(
" } catch (Exception e) {\n"
+ " statuscode = 500;\n"
+ " }\n"
+ " return new "
+ programId
+ "Record(statuscode, ");

for (i = 0; i < params.length(); ++i) {
param = params.getJSONObject(i);
name = param.getString("variable_name");
ctlWriter.print(name);
if (i < params.length() - 1) {
ctlWriter.print(", ");
}
}
ctlWriter.println(");\n" + " }\n" + "}");
ctlWriter.close();
}

public static void writeRecord(FileWriter rcdFile, String programId, JSONArray params) {
PrintWriter rcdWriter = new PrintWriter(rcdFile);
JSONObject param;
String name;
String type;
int i;

rcdWriter.print(
"package com.example.restservice;\n"
+ "public record "
+ programId
+ "Record(int statuscode, ");

for (i = 0; i < params.length(); ++i) {
param = params.getJSONObject(i);
name = param.getString("variable_name");
type = param.getString("java_type");
rcdWriter.print(type + " " + name);
if (i < params.length() - 1) {
rcdWriter.print(", ");
}
}
rcdWriter.println(") {}");
rcdWriter.close();
}
}
Loading