Search in sources :

Example 1 with Visibility

use of org.kie.workbench.common.services.datamodeller.core.Visibility in project kie-wb-common by kiegroup.

the class JavaRoasterModelDriver method parseProperty.

public ObjectProperty parseProperty(FieldSource<JavaClassSource> field, ClassTypeResolver classTypeResolver) throws ModelDriverException {
    Type type;
    boolean multiple = false;
    String className;
    String bag = null;
    ObjectProperty property;
    Visibility visibility = DriverUtils.buildVisibility(field.getVisibility());
    try {
        type = field.getType();
        if (type.isPrimitive()) {
            className = type.getName();
        } else {
            if (DriverUtils.isSimpleClass(type)) {
                className = resolveTypeName(classTypeResolver, type.getName());
            } else {
                // if this point was reached, we know it's a Collection. Managed type check was done previous to adding the property.
                multiple = true;
                @SuppressWarnings("unchecked") Type elementsType = ((List<Type>) type.getTypeArguments()).get(0);
                className = resolveTypeName(classTypeResolver, elementsType.getName());
                bag = resolveTypeName(classTypeResolver, type.getName());
            }
        }
        property = new ObjectPropertyImpl(field.getName(), className, multiple, bag, visibility, field.isStatic(), field.isFinal());
        List<AnnotationSource<JavaClassSource>> annotations = field.getAnnotations();
        if (annotations != null) {
            for (AnnotationSource annotation : annotations) {
                addPropertyAnnotation(property, annotation, classTypeResolver);
            }
        }
    } catch (ClassNotFoundException e) {
        logger.error(errorMessage(DATA_OBJECT_FIELD_LOAD_ERROR, field.getName(), field.getOrigin().getName()), e);
        throw new ModelDriverException(errorMessage(DATA_OBJECT_FIELD_LOAD_ERROR, field.getName(), field.getOrigin().getName()), e);
    }
    return property;
}
Also used : ObjectProperty(org.kie.workbench.common.services.datamodeller.core.ObjectProperty) ObjectPropertyImpl(org.kie.workbench.common.services.datamodeller.core.impl.ObjectPropertyImpl) Type(org.jboss.forge.roaster.model.Type) JavaType(org.jboss.forge.roaster.model.JavaType) ElementType(org.kie.workbench.common.services.datamodeller.core.ElementType) AnnotationSource(org.jboss.forge.roaster.model.source.AnnotationSource) Visibility(org.kie.workbench.common.services.datamodeller.core.Visibility) List(java.util.List) ArrayList(java.util.ArrayList) ModelDriverException(org.kie.workbench.common.services.datamodeller.driver.ModelDriverException)

Example 2 with Visibility

use of org.kie.workbench.common.services.datamodeller.core.Visibility in project kie-wb-common by kiegroup.

the class ModuleDataModelOracleUtils method addEnumType.

private static void addEnumType(DataModel dataModel, String factType, ClassMetadata classMetadata) {
    String packageName = NamingUtils.extractPackageName(factType);
    String className = NamingUtils.extractClassName(factType);
    Visibility visibility = DriverUtils.buildVisibility(classMetadata.getModifiers());
    JavaEnum javaEnum = new JavaEnumImpl(packageName, className, visibility);
    dataModel.addJavaEnum(javaEnum, ObjectSource.DEPENDENCY);
}
Also used : JavaEnumImpl(org.kie.workbench.common.services.datamodeller.core.impl.JavaEnumImpl) JavaEnum(org.kie.workbench.common.services.datamodeller.core.JavaEnum) Visibility(org.kie.workbench.common.services.datamodeller.core.Visibility)

Example 3 with Visibility

use of org.kie.workbench.common.services.datamodeller.core.Visibility in project kie-wb-common by kiegroup.

the class ModuleDataModelOracleUtils method addDataObjectType.

private static void addDataObjectType(DataModel dataModel, ModuleDataModelOracle oracleDataModel, String factType, ClassMetadata classMetadata) throws ModelDriverException {
    String superClass = DataModelOracleUtilities.getSuperType(oracleDataModel, factType);
    Visibility visibility = DriverUtils.buildVisibility(classMetadata.getModifiers());
    DataObject dataObject;
    logger.debug("Adding dataObjectType: " + factType + ", to dataModel: " + dataModel + ", from oracleDataModel: " + oracleDataModel);
    dataObject = dataModel.addDataObject(factType, visibility, Modifier.isAbstract(classMetadata.getModifiers()), Modifier.isFinal(classMetadata.getModifiers()), ObjectSource.DEPENDENCY);
    dataObject.setSuperClassName(superClass);
    Map<String, ModelField[]> fields = oracleDataModel.getModuleModelFields();
    if (fields != null) {
        ModelField[] factFields = fields.get(factType);
        ModelField field;
        if (factFields != null && factFields.length > 0) {
            for (int j = 0; j < factFields.length; j++) {
                field = factFields[j];
                if (isLoadableField(field)) {
                    if (field.getType().equals("Collection")) {
                        // read the correct bag and item classes.
                        String bag = DataModelOracleUtilities.getFieldClassName(oracleDataModel, factType, field.getName());
                        String itemsClass = DataModelOracleUtilities.getParametricFieldType(oracleDataModel, factType, field.getName());
                        if (itemsClass == null) {
                            // if we don't know the items class, the property will be managed as a simple property.
                            dataObject.addProperty(field.getName(), bag);
                        } else {
                            dataObject.addProperty(field.getName(), itemsClass, true, bag);
                        }
                    } else {
                        dataObject.addProperty(field.getName(), field.getClassName());
                    }
                }
            }
        }
    } else {
        logger.debug("No fields found for factTye: " + factType);
    }
}
Also used : DataObject(org.kie.workbench.common.services.datamodeller.core.DataObject) ModelField(org.kie.soup.project.datamodel.oracle.ModelField) Visibility(org.kie.workbench.common.services.datamodeller.core.Visibility)

Example 4 with Visibility

use of org.kie.workbench.common.services.datamodeller.core.Visibility in project kie-wb-common by kiegroup.

the class DataModelOracleModelDriver method addFactType.

private void addFactType(DataModel dataModel, ModuleDataModelOracle oracleDataModel, String factType, ObjectSource source, ClassLoader classLoader) throws ModelDriverException {
    String packageName = NamingUtils.extractPackageName(factType);
    String className = NamingUtils.extractClassName(factType);
    String superClass = DataModelOracleUtilities.getSuperType(oracleDataModel, factType);
    DataObject dataObject;
    logger.debug("Adding factType: " + factType + ", to dataModel: " + dataModel + ", from oracleDataModel: " + oracleDataModel);
    ClassMetadata classMetadata = readClassMetadata(factType, classLoader);
    if (classMetadata != null && !classMetadata.isMemberClass() && !classMetadata.isAnonymousClass() && !classMetadata.isLocalClass()) {
        Visibility visibility = DriverUtils.buildVisibility(classMetadata.getModifiers());
        dataObject = dataModel.addDataObject(factType, visibility, Modifier.isAbstract(classMetadata.getModifiers()), Modifier.isFinal(classMetadata.getModifiers()), source);
        dataObject.setSuperClassName(superClass);
        // process type annotations
        Set<Annotation> typeAnnotations = DataModelOracleUtilities.getTypeAnnotations(oracleDataModel, factType);
        if (typeAnnotations != null) {
            for (Annotation annotation : typeAnnotations) {
                addFactTypeAnnotation(dataObject, annotation);
            }
        }
        Map<String, ModelField[]> fields = oracleDataModel.getModuleModelFields();
        if (fields != null) {
            ModelField[] factFields = fields.get(factType);
            ModelField field;
            ObjectProperty property;
            Map<String, Set<Annotation>> typeFieldsAnnotations = DataModelOracleUtilities.getTypeFieldsAnnotations(oracleDataModel, factType);
            Set<Annotation> fieldAnnotations;
            if (factFields != null && factFields.length > 0) {
                for (int j = 0; j < factFields.length; j++) {
                    field = factFields[j];
                    if (isLoadableField(field)) {
                        if (field.getType().equals("Collection")) {
                            // particular processing for collection types
                            // read the correct bag and item classes.
                            String bag = DataModelOracleUtilities.getFieldClassName(oracleDataModel, factType, field.getName());
                            String itemsClass = DataModelOracleUtilities.getParametricFieldType(oracleDataModel, factType, field.getName());
                            if (itemsClass == null) {
                                // if we don't know the items class, the property will be managed as a simple property.
                                property = dataObject.addProperty(field.getName(), bag);
                            } else {
                                property = dataObject.addProperty(field.getName(), itemsClass, true, bag);
                            }
                        } else {
                            property = dataObject.addProperty(field.getName(), getFieldType(oracleDataModel, packageName, field.getClassName()));
                        }
                        // process property annotations
                        if (typeFieldsAnnotations != null && (fieldAnnotations = typeFieldsAnnotations.get(field.getName())) != null) {
                            for (Annotation fieldAnnotation : fieldAnnotations) {
                                addFieldAnnotation(dataObject, property, fieldAnnotation);
                            }
                        }
                    }
                }
            }
        } else {
            logger.debug("No fields for factTye: " + factType);
        }
    }
}
Also used : ObjectProperty(org.kie.workbench.common.services.datamodeller.core.ObjectProperty) Set(java.util.Set) Annotation(org.kie.soup.project.datamodel.oracle.Annotation) DataObject(org.kie.workbench.common.services.datamodeller.core.DataObject) ModelField(org.kie.soup.project.datamodel.oracle.ModelField) Visibility(org.kie.workbench.common.services.datamodeller.core.Visibility)

Example 5 with Visibility

use of org.kie.workbench.common.services.datamodeller.core.Visibility in project kie-wb-common by kiegroup.

the class JavaRoasterModelDriver method parseDataObject.

private Pair<DataObject, List<ObjectProperty>> parseDataObject(JavaClassSource javaClassSource) throws ModelDriverException {
    String className;
    String packageName;
    String superClass;
    String qualifiedName;
    ClassTypeResolver classTypeResolver;
    className = javaClassSource.getName();
    packageName = javaClassSource.getPackage();
    qualifiedName = NamingUtils.createQualifiedName(packageName, className);
    if (logger.isDebugEnabled()) {
        logger.debug("Building DataObject for, packageName: " + packageName + ", className: " + className);
    }
    classTypeResolver = DriverUtils.createClassTypeResolver(javaClassSource, classLoader);
    Visibility visibility = DriverUtils.buildVisibility(javaClassSource.getVisibility());
    DataObject dataObject = new DataObjectImpl(packageName, className, visibility, javaClassSource.isAbstract(), javaClassSource.isFinal());
    List<ObjectProperty> unmanagedProperties = new ArrayList<ObjectProperty>();
    try {
        if (javaClassSource.getSuperType() != null) {
            superClass = resolveTypeName(classTypeResolver, javaClassSource.getSuperType());
            dataObject.setSuperClassName(superClass);
        }
        List<AnnotationSource<JavaClassSource>> annotations = javaClassSource.getAnnotations();
        if (annotations != null) {
            for (AnnotationSource annotation : annotations) {
                addJavaClassAnnotation(dataObject, annotation, classTypeResolver);
            }
        }
        List<MethodSource<JavaClassSource>> classMethods = javaClassSource.getMethods();
        if (classMethods != null) {
            for (MethodSource<JavaClassSource> classMethod : classMethods) {
                if (isAccepted(classMethod)) {
                    addMethod(dataObject, classMethod, classTypeResolver);
                }
            }
        }
        List<JavaSource<?>> nestedTypes = javaClassSource.getNestedTypes();
        if (nestedTypes != null) {
            for (JavaSource nestedType : nestedTypes) {
                if (isAccepted(nestedType)) {
                    if (nestedType instanceof JavaClassSource) {
                        JavaClassImpl nestedJavaClass = new JavaClassImpl("", nestedType.getName(), DriverUtils.buildVisibility(nestedType.getVisibility()));
                        dataObject.addNestedClass(nestedJavaClass);
                        if (javaClassSource.getInterfaces() != null) {
                            for (String interfaceDefinition : ((JavaClassSource) nestedType).getInterfaces()) {
                                nestedJavaClass.addInterface(interfaceDefinition);
                            }
                        }
                        List<AnnotationSource<JavaClassSource>> nestedClassAnnotations = nestedType.getAnnotations();
                        if (nestedClassAnnotations != null) {
                            for (AnnotationSource annotation : nestedClassAnnotations) {
                                addJavaClassAnnotation(nestedJavaClass, annotation, classTypeResolver);
                            }
                        }
                        List<MethodSource<JavaClassSource>> nestedClassMethods = ((JavaClassSource) nestedType).getMethods();
                        if (nestedClassMethods != null) {
                            for (Method nestedClassMethod : nestedClassMethods) {
                                if (isAccepted(nestedClassMethod)) {
                                    addMethod(nestedJavaClass, nestedClassMethod, classTypeResolver);
                                }
                            }
                        }
                    }
                }
            }
        }
        List<FieldSource<JavaClassSource>> fields = javaClassSource.getFields();
        if (fields != null) {
            for (FieldSource<JavaClassSource> field : fields) {
                if (DriverUtils.isManagedType(field.getType(), classTypeResolver)) {
                    addProperty(dataObject, field, classTypeResolver);
                } else {
                    logger.debug("field: " + field + "with fieldName: " + field.getName() + " won't be loaded by the diver because type: " + field.getType().getName() + " isn't a managed type.");
                    unmanagedProperties.add(new ObjectPropertyImpl(field.getName(), field.getType().toString(), false, DriverUtils.buildVisibility(field.getVisibility()), field.isStatic(), field.isFinal()));
                }
            }
        }
        List<Import> imports = javaClassSource.getImports();
        if (imports != null) {
            for (Import _import : imports) {
                dataObject.addImport(new ImportImpl(_import.getQualifiedName()));
            }
        }
        return new Pair<DataObject, List<ObjectProperty>>(dataObject, unmanagedProperties);
    } catch (ClassNotFoundException e) {
        logger.error(errorMessage(DATA_OBJECT_LOAD_ERROR, qualifiedName), e);
        throw new ModelDriverException(errorMessage(DATA_OBJECT_LOAD_ERROR, qualifiedName), e);
    } catch (ModelDriverException e) {
        logger.error(errorMessage(DATA_OBJECT_LOAD_ERROR, qualifiedName), e);
        throw new ModelDriverException(errorMessage(DATA_OBJECT_LOAD_ERROR, qualifiedName), e);
    }
}
Also used : Import(org.jboss.forge.roaster.model.source.Import) ArrayList(java.util.ArrayList) ModelDriverException(org.kie.workbench.common.services.datamodeller.driver.ModelDriverException) JavaClassImpl(org.kie.workbench.common.services.datamodeller.core.impl.JavaClassImpl) JavaSource(org.jboss.forge.roaster.model.source.JavaSource) FieldSource(org.jboss.forge.roaster.model.source.FieldSource) Pair(org.uberfire.commons.data.Pair) ObjectProperty(org.kie.workbench.common.services.datamodeller.core.ObjectProperty) JavaClassSource(org.jboss.forge.roaster.model.source.JavaClassSource) Method(org.jboss.forge.roaster.model.Method) DataObjectImpl(org.kie.workbench.common.services.datamodeller.core.impl.DataObjectImpl) ObjectPropertyImpl(org.kie.workbench.common.services.datamodeller.core.impl.ObjectPropertyImpl) DataObject(org.kie.workbench.common.services.datamodeller.core.DataObject) AnnotationSource(org.jboss.forge.roaster.model.source.AnnotationSource) MethodSource(org.jboss.forge.roaster.model.source.MethodSource) Visibility(org.kie.workbench.common.services.datamodeller.core.Visibility) ImportImpl(org.kie.workbench.common.services.datamodeller.core.impl.ImportImpl) ClassTypeResolver(org.kie.soup.project.datamodel.commons.types.ClassTypeResolver)

Aggregations

Visibility (org.kie.workbench.common.services.datamodeller.core.Visibility)7 ArrayList (java.util.ArrayList)3 AnnotationSource (org.jboss.forge.roaster.model.source.AnnotationSource)3 DataObject (org.kie.workbench.common.services.datamodeller.core.DataObject)3 ObjectProperty (org.kie.workbench.common.services.datamodeller.core.ObjectProperty)3 ModelField (org.kie.soup.project.datamodel.oracle.ModelField)2 JavaEnumImpl (org.kie.workbench.common.services.datamodeller.core.impl.JavaEnumImpl)2 ObjectPropertyImpl (org.kie.workbench.common.services.datamodeller.core.impl.ObjectPropertyImpl)2 ModelDriverException (org.kie.workbench.common.services.datamodeller.driver.ModelDriverException)2 List (java.util.List)1 Set (java.util.Set)1 JavaType (org.jboss.forge.roaster.model.JavaType)1 Method (org.jboss.forge.roaster.model.Method)1 Parameter (org.jboss.forge.roaster.model.Parameter)1 Type (org.jboss.forge.roaster.model.Type)1 FieldSource (org.jboss.forge.roaster.model.source.FieldSource)1 Import (org.jboss.forge.roaster.model.source.Import)1 JavaClassSource (org.jboss.forge.roaster.model.source.JavaClassSource)1 JavaSource (org.jboss.forge.roaster.model.source.JavaSource)1 MethodSource (org.jboss.forge.roaster.model.source.MethodSource)1