Search in sources :

Example 1 with ParserException

use of org.jboss.forge.roaster.ParserException in project kie-wb-common by kiegroup.

the class JavaRoasterModelDriver method loadJavaTypeInfo.

public TypeInfoResult loadJavaTypeInfo(final String source) throws ModelDriverException {
    TypeInfoResult result = new TypeInfoResult();
    if (source == null || "".equals(source)) {
        logger.debug("source: " + source + " is empty.");
        result.addError(new DriverError("Source is empty"));
        return result;
    }
    try {
        JavaType<?> javaType = Roaster.parse(source);
        if (javaType.getSyntaxErrors() != null && !javaType.getSyntaxErrors().isEmpty()) {
            addSyntaxErrors(result, null, javaType.getSyntaxErrors());
        } else {
            JavaTypeInfoImpl typeInfo = new JavaTypeInfoImpl();
            result.setTypeInfo(typeInfo);
            typeInfo.setName(javaType.getName());
            typeInfo.setPackageName(javaType.getPackage());
            typeInfo.setAnnotation(javaType.isAnnotation());
            typeInfo.setClass(javaType.isClass());
            typeInfo.setEnum(javaType.isEnum());
            typeInfo.setInterface(javaType.isInterface());
            typeInfo.setPackagePrivate(javaType.isPackagePrivate());
            typeInfo.setPrivate(javaType.isPrivate());
            typeInfo.setProtected(javaType.isProtected());
            typeInfo.setPublic(javaType.isPublic());
        }
    } catch (ParserException e) {
        result.addError(new DriverError(e.getMessage()));
    } catch (Exception e) {
        // Unexpected parsing o model loading exception.
        logger.error(errorMessage(GENERIC_ERROR, e));
        throw new ModelDriverException(errorMessage(MODEL_LOAD_GENERIC_ERROR), e);
    }
    return result;
}
Also used : ParserException(org.jboss.forge.roaster.ParserException) JavaTypeInfoImpl(org.kie.workbench.common.services.datamodeller.core.impl.JavaTypeInfoImpl) TypeInfoResult(org.kie.workbench.common.services.datamodeller.driver.TypeInfoResult) ModelDriverException(org.kie.workbench.common.services.datamodeller.driver.ModelDriverException) ModelDriverException(org.kie.workbench.common.services.datamodeller.driver.ModelDriverException) IOException(java.io.IOException) ParserException(org.jboss.forge.roaster.ParserException) DriverError(org.kie.workbench.common.services.datamodeller.driver.model.DriverError)

Example 2 with ParserException

use of org.jboss.forge.roaster.ParserException 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;
}
Also used : Path(org.uberfire.java.nio.file.Path) ParserException(org.jboss.forge.roaster.ParserException) FileUtils(org.kie.workbench.common.services.datamodeller.util.FileUtils) ArrayList(java.util.ArrayList) JavaClassSource(org.jboss.forge.roaster.model.source.JavaClassSource) ModelDriverException(org.kie.workbench.common.services.datamodeller.driver.ModelDriverException) ModelDriverException(org.kie.workbench.common.services.datamodeller.driver.ModelDriverException) IOException(java.io.IOException) ParserException(org.jboss.forge.roaster.ParserException) DriverError(org.kie.workbench.common.services.datamodeller.driver.model.DriverError) DataModel(org.kie.workbench.common.services.datamodeller.core.DataModel) JavaEnumSource(org.jboss.forge.roaster.model.source.JavaEnumSource) ModelDriverResult(org.kie.workbench.common.services.datamodeller.driver.model.ModelDriverResult)

Example 3 with ParserException

use of org.jboss.forge.roaster.ParserException 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;
}
Also used : ParserException(org.jboss.forge.roaster.ParserException) DataObject(org.kie.workbench.common.services.datamodeller.core.DataObject) DataModel(org.kie.workbench.common.services.datamodeller.core.DataModel) List(java.util.List) ArrayList(java.util.ArrayList) ModelDriverResult(org.kie.workbench.common.services.datamodeller.driver.model.ModelDriverResult) ModelDriverException(org.kie.workbench.common.services.datamodeller.driver.ModelDriverException) ModelDriverException(org.kie.workbench.common.services.datamodeller.driver.ModelDriverException) IOException(java.io.IOException) ParserException(org.jboss.forge.roaster.ParserException) DriverError(org.kie.workbench.common.services.datamodeller.driver.model.DriverError)

Aggregations

IOException (java.io.IOException)3 ParserException (org.jboss.forge.roaster.ParserException)3 ModelDriverException (org.kie.workbench.common.services.datamodeller.driver.ModelDriverException)3 DriverError (org.kie.workbench.common.services.datamodeller.driver.model.DriverError)3 ArrayList (java.util.ArrayList)2 DataModel (org.kie.workbench.common.services.datamodeller.core.DataModel)2 ModelDriverResult (org.kie.workbench.common.services.datamodeller.driver.model.ModelDriverResult)2 List (java.util.List)1 JavaClassSource (org.jboss.forge.roaster.model.source.JavaClassSource)1 JavaEnumSource (org.jboss.forge.roaster.model.source.JavaEnumSource)1 DataObject (org.kie.workbench.common.services.datamodeller.core.DataObject)1 JavaTypeInfoImpl (org.kie.workbench.common.services.datamodeller.core.impl.JavaTypeInfoImpl)1 TypeInfoResult (org.kie.workbench.common.services.datamodeller.driver.TypeInfoResult)1 FileUtils (org.kie.workbench.common.services.datamodeller.util.FileUtils)1 Path (org.uberfire.java.nio.file.Path)1