use of org.kie.workbench.common.services.datamodeller.driver.model.ModelDriverResult in project kie-wb-common by kiegroup.
the class DataModelOracleModelDriver method loadModel.
@Override
public ModelDriverResult loadModel() throws ModelDriverException {
ModelDriverResult result = new ModelDriverResult();
result.setDataModel(loadModel(oracleDataModel, moduleClassLoader));
return result;
}
use of org.kie.workbench.common.services.datamodeller.driver.model.ModelDriverResult in project kie-wb-common by kiegroup.
the class JavaRoasterModelDriver method loadModel.
@Override
public ModelDriverResult loadModel() throws ModelDriverException {
ModelDriverResult result = new ModelDriverResult();
DataModel dataModel;
String fileContent;
dataModel = createModel();
result.setDataModel(dataModel);
List<Path> rootPaths = new ArrayList<Path>();
rootPaths.add(javaRootPath);
Collection<FileUtils.ScanResult> scanResults = FileUtils.getInstance().scan(ioService, rootPaths, ".java", true);
if (scanResults != null) {
for (FileUtils.ScanResult scanResult : scanResults) {
logger.debug("Starting file loading into model, file: " + scanResult.getFile());
fileContent = ioService.readAllString(scanResult.getFile());
if (fileContent == null || "".equals(fileContent)) {
logger.debug("file: " + scanResult.getFile() + " is empty.");
result.addError(new DriverError("File has no content", Paths.convert(scanResult.getFile())));
continue;
}
try {
JavaType<?> javaType = Roaster.parse(fileContent);
final boolean isManaged = isManagedJavaType(javaType);
final boolean vetoed = (isManaged ? isVetoed(javaType) : false);
if (isManaged && !vetoed) {
if (javaType.getSyntaxErrors() != null && !javaType.getSyntaxErrors().isEmpty()) {
// if a file has parsing errors it will be skipped.
addSyntaxErrors(result, scanResult.getFile(), javaType.getSyntaxErrors());
} else if (javaType.isEnum()) {
loadFromJavaEnum((JavaEnumSource) javaType, scanResult.getFile(), dataModel, result);
} else {
loadFromJavaClass((JavaClassSource) javaType, scanResult.getFile(), dataModel, result);
}
} else if (vetoed) {
logger.debug("The class, {}, in the file, {}, was vetoed and will be skipped.", javaType.getQualifiedName(), scanResult.getFile());
} else {
logger.debug("File: " + scanResult.getFile() + " do not contain a managed java type, it will be skipped.");
}
} catch (ParserException e) {
result.addError(new DriverError(e.getMessage(), Paths.convert(scanResult.getFile())));
} catch (Exception e) {
// Unexpected error.
logger.error(errorMessage(MODEL_LOAD_GENERIC_ERROR, javaRootPath.toUri()), e);
throw new ModelDriverException(errorMessage(MODEL_LOAD_GENERIC_ERROR, javaRootPath.toUri()), e);
}
}
}
return result;
}
use of org.kie.workbench.common.services.datamodeller.driver.model.ModelDriverResult in project kie-wb-common by kiegroup.
the class JavaRoasterModelDriver method loadDataObject.
public ModelDriverResult loadDataObject(final String source, final Path path) throws ModelDriverException {
ModelDriverResult result = new ModelDriverResult();
DataModel dataModel = createModel();
result.setDataModel(dataModel);
if (source == null || "".equals(source)) {
logger.debug("source: " + source + " is empty.");
result.addError(new DriverError("Source is empty", Paths.convert(path)));
return result;
}
try {
JavaType<?> javaType = Roaster.parse(source);
if (javaType.isClass()) {
if (javaType.getSyntaxErrors() != null && !javaType.getSyntaxErrors().isEmpty()) {
// if a file has parsing errors it will be skipped.
addSyntaxErrors(result, path, javaType.getSyntaxErrors());
} else {
try {
// try to load the data object.
Pair<DataObject, List<ObjectProperty>> pair = parseDataObject((JavaClassSource) javaType);
dataModel.addDataObject(pair.getK1());
result.setClassPath(pair.getK1().getClassName(), Paths.convert(path));
result.setUnmanagedProperties(pair.getK1().getClassName(), pair.getK2());
} catch (ModelDriverException e) {
logger.error("An error was produced when source: " + source + " was being loaded into a DataObject.", e);
addModelDriverError(result, path, e);
}
}
} else {
logger.debug("No Class definition was found for source: " + source + ", it will be skipped.");
}
} catch (ParserException e) {
result.addError(new DriverError(e.getMessage(), Paths.convert(path)));
} catch (Exception e) {
// Unexpected exception.
logger.error(errorMessage(MODEL_LOAD_GENERIC_ERROR, javaRootPath.toUri()), e);
throw new ModelDriverException(errorMessage(MODEL_LOAD_GENERIC_ERROR, javaRootPath.toUri()), e);
}
return result;
}
use of org.kie.workbench.common.services.datamodeller.driver.model.ModelDriverResult in project kie-wb-common by kiegroup.
the class JavaRoasterModelDriverTest method nestedClassUpdateTest.
@Test
public void nestedClassUpdateTest() {
try {
// First read the NestedClassUpdateTest
Path nestedClassUpdateTestFilePath = rootPath.resolve("package5").resolve("NestedClassUpdateTest.java");
String source = ioService.readAllString(nestedClassUpdateTestFilePath);
JavaClassSource nestedClassUpdateTestJavaClassSource = (JavaClassSource) Roaster.parse(source);
ClassLoader classLoader = getClass().getClassLoader();
ClassTypeResolver classTypeResolver = DriverUtils.createClassTypeResolver(nestedClassUpdateTestJavaClassSource, classLoader);
final SourceFilter pojo1Filter = javaType -> false;
final NestedClassFilter nestedClassFilter = javaType -> javaType.isClass() && javaType.getAnnotation(Generated.class) != null;
final MethodFilter methodFilter = method -> !method.isConstructor() && method.getAnnotation(Generated.class) != null;
FilterHolder filterHolder = mock(FilterHolder.class);
when(filterHolder.getSourceFilters()).thenReturn(Collections.singleton(pojo1Filter));
when(filterHolder.getNestedClassFilters()).thenReturn(Collections.singleton(nestedClassFilter));
when(filterHolder.getMethodFilters()).thenReturn(Collections.singleton(methodFilter));
JavaRoasterModelDriver javaRoasterModelDriver = new JavaRoasterModelDriver(ioService, rootPath, classLoader, filterHolder);
ModelDriverResult result = javaRoasterModelDriver.loadDataObject(source, nestedClassUpdateTestFilePath);
// 1) read the NestedClassUpdateTest
DataObject nestedClassUpdateTest = result.getDataModel().getDataObject("org.kie.workbench.common.services.datamodeller.driver.package5.NestedClassUpdateTest");
// 2) modify the NestedClassUpdateTest according to the expected result
JavaClass nestedClass = nestedClassUpdateTest.getNestedClasses().stream().filter(t -> t.getName().equals("NestedClass")).findFirst().get();
assertNotNull(nestedClass);
nestedClass.setName("UpdatedNestedClass");
String removedInterface = nestedClass.removeInterface("ParametrizedInterface<Integer>");
assertNotNull(removedInterface);
nestedClass.addInterface("ParametrizedInterface<Double>");
Method method = nestedClass.getMethod("method", Collections.EMPTY_LIST);
assertNotNull(method);
method.setName("updatedMethod");
nestedClassUpdateTest.setName("NestedClassUpdateTestResult");
// 3) compare the modified data object with the expected data object.
Path expectedFilePath = rootPath.resolve("package5").resolve("NestedClassUpdateTestResult.java");
String expectedSource = ioService.readAllString(expectedFilePath);
JavaClassSource expectedJavaClassSource = (JavaClassSource) Roaster.parse(expectedSource);
ModelDriverResult expectedResult = javaRoasterModelDriver.loadDataObject(expectedSource, expectedFilePath);
DataObject nestedClassUpdateTestResult = expectedResult.getDataModel().getDataObject("org.kie.workbench.common.services.datamodeller.driver.package5.NestedClassUpdateTestResult");
// First check, the modified data object in memory should be the same as the readed from the model.
DataModelerAssert.assertEqualsDataObject(nestedClassUpdateTestResult, nestedClassUpdateTest);
// Second check, update the JavaClassSource corresponding to the NestedClassUpdateTest
javaRoasterModelDriver.updateSource(nestedClassUpdateTestJavaClassSource, nestedClassUpdateTest, new UpdateInfo(), classTypeResolver);
ModelDriverResult updatedResult = javaRoasterModelDriver.loadDataObject(nestedClassUpdateTestJavaClassSource.toString(), nestedClassUpdateTestFilePath);
// and now compare the updatedResult with the expected value.
DataModelerAssert.assertEqualsDataObject(nestedClassUpdateTestResult, updatedResult.getDataModel().getDataObject("org.kie.workbench.common.services.datamodeller.driver.package5.NestedClassUpdateTestResult"));
logger.debug(nestedClassUpdateTestJavaClassSource.toString());
} catch (Exception e) {
e.printStackTrace();
fail("Test failed: " + e.getMessage());
}
}
use of org.kie.workbench.common.services.datamodeller.driver.model.ModelDriverResult in project kie-wb-common by kiegroup.
the class JavaRoasterModelDriverTest method modelVetoingTest.
@Test
public void modelVetoingTest() throws Exception {
try {
final SourceFilter pojo1Filter = javaType -> javaType.getName().equals("Pojo1");
final NestedClassFilter nestedClassFilter = javaType -> javaType.isClass() && javaType.getAnnotation(Generated.class) != null;
final MethodFilter methodFilter = method -> !method.isConstructor() && method.getAnnotation(Generated.class) != null;
FilterHolder filterHolder = mock(FilterHolder.class);
when(filterHolder.getSourceFilters()).thenReturn(Collections.singleton(pojo1Filter));
when(filterHolder.getNestedClassFilters()).thenReturn(Collections.singleton(nestedClassFilter));
when(filterHolder.getMethodFilters()).thenReturn(Collections.singleton(methodFilter));
final JavaRoasterModelDriver javaRoasterModelDriver = new JavaRoasterModelDriver(ioService, rootPath, getClass().getClassLoader(), filterHolder);
ModelDriverResult modelDriverResult = javaRoasterModelDriver.loadModel();
DataModel dataModelOriginal = createModel();
assertNotNull(modelDriverResult);
assertNotNull(modelDriverResult.getDataModel());
assertEquals(dataModelOriginal.getDataObjects().size() - 1, modelDriverResult.getDataModel().getDataObjects().size());
for (DataObject dataObject : modelDriverResult.getDataModel().getDataObjects()) {
if (!dataObject.getClassName().endsWith("Pojo1")) {
DataModelerAssert.assertEqualsDataObject(dataObject, modelDriverResult.getDataModel().getDataObject(dataObject.getClassName()));
} else {
fail("Pojo1 should have been vetoed.");
}
}
} catch (Exception e) {
e.printStackTrace();
fail("Test failed: " + e.getMessage());
}
}
Aggregations