use of org.kie.soup.project.datamodel.oracle.Annotation 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);
}
}
}
use of org.kie.soup.project.datamodel.oracle.Annotation in project kie-wb-common by kiegroup.
the class PackageDataModelFactAnnotationsTest method testIncorrectPackageDMOZeroAnnotationAttributes.
@Test
public void testIncorrectPackageDMOZeroAnnotationAttributes() throws Exception {
// Build ModuleDMO
final ModuleDataModelOracleBuilder moduleBuilder = ModuleDataModelOracleBuilder.newModuleOracleBuilder(new RawMVELEvaluator());
final ModuleDataModelOracleImpl moduleLoader = new ModuleDataModelOracleImpl();
final ClassFactBuilder cb = new ClassFactBuilder(moduleBuilder, Product.class, false, TypeSource.JAVA_PROJECT);
cb.build(moduleLoader);
// Build PackageDMO. Defaults to defaultpkg
final PackageDataModelOracleBuilder packageBuilder = PackageDataModelOracleBuilder.newPackageOracleBuilder(new RawMVELEvaluator());
packageBuilder.setModuleOracle(moduleLoader);
final PackageDataModelOracle packageLoader = packageBuilder.build();
// Emulate server-to-client conversions
final Caller<IncrementalDataModelService> service = new MockIncrementalDataModelServiceCaller(packageLoader);
final AsyncPackageDataModelOracle oracle = new AsyncPackageDataModelOracleImpl(service, validatorInstance);
final PackageDataModelOracleBaselinePayload dataModel = new PackageDataModelOracleBaselinePayload();
dataModel.setPackageName(packageLoader.getPackageName());
dataModel.setModelFields(packageLoader.getModuleModelFields());
dataModel.setTypeAnnotations(packageLoader.getModuleTypeAnnotations());
dataModel.setTypeFieldsAnnotations(packageLoader.getModuleTypeFieldsAnnotations());
PackageDataModelOracleTestUtils.populateDataModelOracle(mock(Path.class), new MockHasImports(), oracle, dataModel);
assertEquals(0, oracle.getFactTypes().length);
oracle.getTypeAnnotations("Product", new Callback<Set<Annotation>>() {
@Override
public void callback(final Set<Annotation> annotations) {
assertNotNull(annotations);
assertEquals(0, annotations.size());
}
});
}
use of org.kie.soup.project.datamodel.oracle.Annotation in project kie-wb-common by kiegroup.
the class PackageDataModelFactAnnotationsTest method testCorrectPackageDMOZeroAnnotationAttributes.
@Test
public void testCorrectPackageDMOZeroAnnotationAttributes() throws Exception {
// Build ModuleDMO
final ModuleDataModelOracleBuilder moduleBuilder = ModuleDataModelOracleBuilder.newModuleOracleBuilder(new RawMVELEvaluator());
final ModuleDataModelOracleImpl moduleLoader = new ModuleDataModelOracleImpl();
final ClassFactBuilder cb = new ClassFactBuilder(moduleBuilder, Product.class, false, TypeSource.JAVA_PROJECT);
cb.build(moduleLoader);
// Build PackageDMO
final PackageDataModelOracleBuilder packageBuilder = PackageDataModelOracleBuilder.newPackageOracleBuilder(new RawMVELEvaluator(), "org.kie.workbench.common.widgets.client.datamodel.testclasses");
packageBuilder.setModuleOracle(moduleLoader);
final PackageDataModelOracle packageLoader = packageBuilder.build();
// Emulate server-to-client conversions
final Caller<IncrementalDataModelService> service = new MockIncrementalDataModelServiceCaller(packageLoader);
final AsyncPackageDataModelOracle oracle = new AsyncPackageDataModelOracleImpl(service, validatorInstance);
final PackageDataModelOracleBaselinePayload dataModel = new PackageDataModelOracleBaselinePayload();
dataModel.setPackageName(packageLoader.getPackageName());
dataModel.setModelFields(packageLoader.getModuleModelFields());
dataModel.setTypeAnnotations(packageLoader.getModuleTypeAnnotations());
dataModel.setTypeFieldsAnnotations(packageLoader.getModuleTypeFieldsAnnotations());
PackageDataModelOracleTestUtils.populateDataModelOracle(mock(Path.class), new MockHasImports(), oracle, dataModel);
assertEquals(1, oracle.getFactTypes().length);
assertEquals("Product", oracle.getFactTypes()[0]);
oracle.getTypeAnnotations("Product", new Callback<Set<Annotation>>() {
@Override
public void callback(final Set<Annotation> annotations) {
assertNotNull(annotations);
assertEquals(0, annotations.size());
}
});
}
use of org.kie.soup.project.datamodel.oracle.Annotation in project kie-wb-common by kiegroup.
the class PackageDataModelFactAnnotationsTest method testIncorrectPackageDMOAnnotationAttributes.
@Test
public void testIncorrectPackageDMOAnnotationAttributes() throws Exception {
// Build ModuleDMO
final ModuleDataModelOracleBuilder moduleBuilder = ModuleDataModelOracleBuilder.newModuleOracleBuilder(new RawMVELEvaluator());
final ModuleDataModelOracleImpl moduleLoader = new ModuleDataModelOracleImpl();
final ClassFactBuilder cb = new ClassFactBuilder(moduleBuilder, Smurf.class, false, TypeSource.JAVA_PROJECT);
cb.build(moduleLoader);
// Build PackageDMO. Defaults to defaultpkg
final PackageDataModelOracleBuilder packageBuilder = PackageDataModelOracleBuilder.newPackageOracleBuilder(new RawMVELEvaluator());
packageBuilder.setModuleOracle(moduleLoader);
final PackageDataModelOracle packageLoader = packageBuilder.build();
// Emulate server-to-client conversions
final Caller<IncrementalDataModelService> service = new MockIncrementalDataModelServiceCaller(packageLoader);
final AsyncPackageDataModelOracle oracle = new AsyncPackageDataModelOracleImpl(service, validatorInstance);
final PackageDataModelOracleBaselinePayload dataModel = new PackageDataModelOracleBaselinePayload();
dataModel.setPackageName(packageLoader.getPackageName());
dataModel.setModelFields(packageLoader.getModuleModelFields());
dataModel.setTypeAnnotations(packageLoader.getModuleTypeAnnotations());
dataModel.setTypeFieldsAnnotations(packageLoader.getModuleTypeFieldsAnnotations());
PackageDataModelOracleTestUtils.populateDataModelOracle(mock(Path.class), new MockHasImports(), oracle, dataModel);
assertEquals(0, oracle.getFactTypes().length);
oracle.getTypeAnnotations("Smurf", new Callback<Set<Annotation>>() {
@Override
public void callback(final Set<Annotation> annotations) {
assertNotNull(annotations);
assertEquals(0, annotations.size());
}
});
}
use of org.kie.soup.project.datamodel.oracle.Annotation in project kie-wb-common by kiegroup.
the class PackageDataModelFactFieldsAnnotationsTest method testCorrectPackageDMOAnnotationAttributes.
@Test
public void testCorrectPackageDMOAnnotationAttributes() throws Exception {
// Build ModuleDMO
final ModuleDataModelOracleBuilder moduleBuilder = ModuleDataModelOracleBuilder.newModuleOracleBuilder(new RawMVELEvaluator());
final ModuleDataModelOracleImpl moduleLoader = new ModuleDataModelOracleImpl();
final ClassFactBuilder cb = new ClassFactBuilder(moduleBuilder, SmurfHouse.class, false, TypeSource.JAVA_PROJECT);
cb.build(moduleLoader);
// Build PackageDMO
final PackageDataModelOracleBuilder packageBuilder = PackageDataModelOracleBuilder.newPackageOracleBuilder(new RawMVELEvaluator(), "org.kie.workbench.common.widgets.client.datamodel.testclasses.annotations");
packageBuilder.setModuleOracle(moduleLoader);
final PackageDataModelOracle packageLoader = packageBuilder.build();
// Emulate server-to-client conversions
final Caller<IncrementalDataModelService> service = new MockIncrementalDataModelServiceCaller(packageLoader);
final AsyncPackageDataModelOracle oracle = new AsyncPackageDataModelOracleImpl(service, validatorInstance);
final PackageDataModelOracleBaselinePayload dataModel = new PackageDataModelOracleBaselinePayload();
dataModel.setPackageName(packageLoader.getPackageName());
dataModel.setModelFields(packageLoader.getModuleModelFields());
dataModel.setTypeAnnotations(packageLoader.getModuleTypeAnnotations());
dataModel.setTypeFieldsAnnotations(packageLoader.getModuleTypeFieldsAnnotations());
PackageDataModelOracleTestUtils.populateDataModelOracle(mock(Path.class), new MockHasImports(), oracle, dataModel);
assertEquals(1, oracle.getFactTypes().length);
assertEquals("SmurfHouse", oracle.getFactTypes()[0]);
oracle.getTypeFieldsAnnotations("SmurfHouse", new Callback<Map<String, Set<Annotation>>>() {
@Override
public void callback(final Map<String, Set<Annotation>> fieldsAnnotations) {
assertNotNull(fieldsAnnotations);
assertEquals(2, fieldsAnnotations.size());
assertTrue(fieldsAnnotations.containsKey("occupant"));
final Set<Annotation> occupantAnnotations = fieldsAnnotations.get("occupant");
assertNotNull(occupantAnnotations);
assertEquals(1, occupantAnnotations.size());
final Annotation annotation = occupantAnnotations.iterator().next();
assertEquals("org.kie.workbench.common.widgets.client.datamodel.testclasses.annotations.SmurfFieldDescriptor", annotation.getQualifiedTypeName());
assertEquals("blue", annotation.getParameters().get("colour"));
assertEquals("M", annotation.getParameters().get("gender"));
assertEquals("Brains", annotation.getParameters().get("description"));
assertTrue(fieldsAnnotations.containsKey("positionedOccupant"));
final Set<Annotation> posOccupantAnnotations = fieldsAnnotations.get("positionedOccupant");
assertNotNull(posOccupantAnnotations);
assertEquals(1, posOccupantAnnotations.size());
final Annotation annotation2 = posOccupantAnnotations.iterator().next();
assertEquals("org.kie.workbench.common.widgets.client.datamodel.testclasses.annotations.SmurfFieldPositionDescriptor", annotation2.getQualifiedTypeName());
assertEquals(1, annotation2.getParameters().get("value"));
}
});
}
Aggregations