Skip to content

Commit

Permalink
JBPM-4625 Generation of JPA enabled models
Browse files Browse the repository at this point in the history
  • Loading branch information
wmedvede authored and manstis committed May 13, 2015
1 parent f4ce5fb commit 98f8e70
Show file tree
Hide file tree
Showing 5 changed files with 73 additions and 60 deletions.
Expand Up @@ -27,15 +27,17 @@
import org.drools.workbench.jcr2vfsmigration.xml.model.asset.DataModelAsset;
import org.guvnor.common.services.project.service.ProjectService;
import org.kie.workbench.common.screens.datamodeller.model.AnnotationDefinitionTO;
import org.kie.workbench.common.screens.datamodeller.model.AnnotationMemberDefinitionTO;
import org.kie.workbench.common.screens.datamodeller.model.DataModelTO;
import org.kie.workbench.common.screens.datamodeller.model.DataObjectTO;
import org.kie.workbench.common.screens.datamodeller.model.ObjectPropertyTO;
import org.kie.workbench.common.screens.datamodeller.model.PropertyTypeTO;
import org.kie.workbench.common.screens.datamodeller.service.DataModelerService;
import org.kie.workbench.common.services.datamodeller.core.Annotation;
import org.kie.workbench.common.services.datamodeller.core.AnnotationDefinition;
import org.kie.workbench.common.services.datamodeller.core.AnnotationMemberDefinition;
import org.kie.workbench.common.services.datamodeller.driver.impl.annotations.PositionAnnotationDefinition;
import org.kie.workbench.common.services.datamodeller.core.DataModel;
import org.kie.workbench.common.services.datamodeller.core.DataObject;
import org.kie.workbench.common.services.datamodeller.core.ObjectProperty;
import org.kie.workbench.common.services.datamodeller.core.impl.AnnotationImpl;
import org.kie.workbench.common.services.datamodeller.core.impl.DataModelImpl;
import org.kie.workbench.common.services.datamodeller.core.impl.DataObjectImpl;
import org.kie.workbench.common.services.datamodeller.core.impl.ObjectPropertyImpl;
import org.kie.workbench.common.services.shared.project.KieProject;
import org.uberfire.backend.server.util.Paths;
import org.uberfire.backend.vfs.Path;
Expand All @@ -58,7 +60,7 @@ public class FactModelImporter implements AssetImporter<DataModelAsset> {
private DataModelerService modelerService;

private Map<String, String> orderedBaseTypes = new TreeMap<String, String>();
private Map<String, AnnotationDefinitionTO> annotationDefinitions;
private Map<String, AnnotationDefinition> annotationDefinitions;

@Override
public Path importAsset( Module xmlModule, DataModelAsset xmlAsset, Path previousVersionPath ) {
Expand All @@ -75,7 +77,6 @@ public Path importAsset( Module xmlModule, DataModelAsset xmlAsset, Path previou

initBasePropertyTypes();
initAnnotationDefinitions();
AnnotationDefinitionTO positionAnnotationDef = getPositionAnnotationDefinition();

if ( project == null ) {
// formerly jcrModule.getName(), but when arriving at this point the jcrModule name has been replaced with
Expand All @@ -90,15 +91,15 @@ public Path importAsset( Module xmlModule, DataModelAsset xmlAsset, Path previou
"" );
}

DataModelTO dataModelTO = new DataModelTO();
DataModel dataModel = new DataModelImpl();

for ( Iterator<DataModelAsset.DataModelObject> objIt = xmlAsset.modelObjects(); objIt.hasNext(); ) {
DataModelAsset.DataModelObject obj = objIt.next();

// Same remark for the package as above
DataObjectTO dataObject = new DataObjectTO( obj.getName(),
normalizedPackageName,
obj.getSuperType() );
DataObject dataObject = new DataObjectImpl( obj.getName(),
normalizedPackageName );
dataObject.setSuperClassName( obj.getSuperType() );

// TODO add fileOrder to object properties, and adapt kie-wb-common accordingly so that the param order in the
// param constructor respects the order of the properties in the generated java source file.
Expand All @@ -109,12 +110,11 @@ public Path importAsset( Module xmlModule, DataModelAsset xmlAsset, Path previou
boolean isMultiple = false;
boolean isBaseType = isBaseType( fieldType );

ObjectPropertyTO property = new ObjectPropertyTO( fieldName,
ObjectProperty property = new ObjectPropertyImpl( fieldName,
fieldType,
isMultiple,
isBaseType );

dataObject.getProperties().add( property );
isMultiple);
property.setBaseType( isBaseType );
dataObject.addProperty( property );
}

// Add annotations to data object
Expand All @@ -123,15 +123,17 @@ public Path importAsset( Module xmlModule, DataModelAsset xmlAsset, Path previou
String name = objAnn.getName();
String key = objAnn.getKey();
String value = objAnn.getValue();
Annotation annotation;

if ( "Role".equals( name ) ) {
dataObject.addAnnotation( annotationDefinitions.get( AnnotationDefinitionTO.ROLE_ANNOTATION ), key, value );
annotation = new AnnotationImpl( annotationDefinitions.get( AnnotationDefinitionTO.ROLE_ANNOTATION ) );
annotation.setValue( key, value );
}
}

dataModelTO.getDataObjects().add( dataObject );
dataModel.addDataObject( dataObject );
}
modelerService.saveModel( dataModelTO, project );
modelerService.saveModel( dataModel, project );

return path;
}
Expand All @@ -149,17 +151,6 @@ private void initAnnotationDefinitions() {
annotationDefinitions = modelerService.getAnnotationDefinitions();
}

private AnnotationDefinitionTO getPositionAnnotationDefinition() {
AnnotationDefinition positionAnnotationDef = PositionAnnotationDefinition.getInstance();
AnnotationDefinitionTO positionAnnotationDefTO = new AnnotationDefinitionTO( positionAnnotationDef.getName(), positionAnnotationDef.getClassName(), positionAnnotationDef.getShortDescription(), positionAnnotationDef.getDescription(), positionAnnotationDef.isObjectAnnotation(), positionAnnotationDef.isPropertyAnnotation() );
AnnotationMemberDefinitionTO memberDefinitionTO;
for ( AnnotationMemberDefinition memberDefinition : positionAnnotationDef.getAnnotationMembers() ) {
memberDefinitionTO = new AnnotationMemberDefinitionTO( memberDefinition.getName(), memberDefinition.getClassName(), memberDefinition.isPrimitiveType(), memberDefinition.isEnum(), memberDefinition.defaultValue(), memberDefinition.getShortDescription(), memberDefinition.getDescription() );
positionAnnotationDefTO.addMember( memberDefinitionTO );
}
return positionAnnotationDefTO;
}

private Boolean isBaseType( String type ) {
return orderedBaseTypes.containsValue( type );
}
Expand Down
Expand Up @@ -82,6 +82,10 @@
<groupId>org.uberfire</groupId>
<artifactId>uberfire-metadata-api</artifactId>
</dependency>
<dependency>
<groupId>org.kie.workbench.services</groupId>
<artifactId>kie-wb-common-data-modeller-core</artifactId>
</dependency>
<dependency>
<groupId>org.kie.workbench.screens</groupId>
<artifactId>kie-wb-common-data-modeller-api</artifactId>
Expand Down
Expand Up @@ -54,11 +54,17 @@
import org.guvnor.common.services.shared.metadata.model.Metadata;
import org.jboss.errai.security.shared.api.identity.User;
import org.kie.workbench.common.screens.datamodeller.model.AnnotationDefinitionTO;
import org.kie.workbench.common.screens.datamodeller.model.DataModelTO;
import org.kie.workbench.common.screens.datamodeller.model.DataObjectTO;
import org.kie.workbench.common.screens.datamodeller.model.ObjectPropertyTO;
import org.kie.workbench.common.screens.datamodeller.model.PropertyTypeTO;
import org.kie.workbench.common.screens.datamodeller.service.DataModelerService;
import org.kie.workbench.common.services.datamodeller.core.Annotation;
import org.kie.workbench.common.services.datamodeller.core.AnnotationDefinition;
import org.kie.workbench.common.services.datamodeller.core.DataModel;
import org.kie.workbench.common.services.datamodeller.core.DataObject;
import org.kie.workbench.common.services.datamodeller.core.ObjectProperty;
import org.kie.workbench.common.services.datamodeller.core.impl.AnnotationImpl;
import org.kie.workbench.common.services.datamodeller.core.impl.DataModelImpl;
import org.kie.workbench.common.services.datamodeller.core.impl.DataObjectImpl;
import org.kie.workbench.common.services.datamodeller.core.impl.ObjectPropertyImpl;
import org.kie.workbench.common.services.shared.project.KieProject;
import org.kie.workbench.common.services.shared.project.KieProjectService;
import org.kie.workbench.common.services.shared.project.ProjectImportsService;
Expand Down Expand Up @@ -119,7 +125,7 @@ public class DecisionTableXLSToDecisionTableGuidedConverter implements DecisionT
private GlobalResourceTypeDefinition globalsType;

private Map<String, String> orderedBaseTypes = new TreeMap<String, String>();
private Map<String, AnnotationDefinitionTO> annotationDefinitions;
private Map<String, AnnotationDefinition> annotationDefinitions;

@PostConstruct
public void initialiseTypeConversionMetaData() {
Expand Down Expand Up @@ -265,14 +271,14 @@ private void makeNewJavaTypes( final Path context,
for ( String declaredType : declaredTypes ) {
final FactModels factModels = FactModelPersistence.unmarshal( declaredType );
final String packageName = factModels.getPackageName();
final DataModelTO dataModelTO = new DataModelTO();
final DataModel dataModel = new DataModelImpl();

for ( FactMetaModel factMetaModel : factModels.getModels() ) {
final DataObjectTO dataObjectTO = new DataObjectTO( factMetaModel.getName(),
packageName,
factMetaModel.getSuperType() );
final DataObject dataObject = new DataObjectImpl( factMetaModel.getName(),
packageName );
dataObject.setSuperClassName( factMetaModel.getSuperType() );
final List<AnnotationMetaModel> annotationMetaModel = factMetaModel.getAnnotations();
addAnnotations( dataObjectTO,
addAnnotations( dataObject,
annotationMetaModel );

final List<FieldMetaModel> fields = factMetaModel.getFields();
Expand All @@ -283,40 +289,42 @@ private void makeNewJavaTypes( final Path context,
//Guvnor 5.5 (and earlier) does not have MultipleType
boolean isMultiple = false;
boolean isBaseType = orderedBaseTypes.containsValue( fieldType );
ObjectPropertyTO property = new ObjectPropertyTO( fieldName,
ObjectProperty property = new ObjectPropertyImpl( fieldName,
fieldType,
isMultiple,
isBaseType );
isMultiple);
property.setBaseType( isBaseType );

//field has no annotation in Guvnor 5.5 (and earlier)
dataObjectTO.getProperties().add( property );
dataObject.addProperty( property );

result.addMessage( "Created Java Type " + getJavaTypeFQCN( dataObjectTO ),
result.addMessage( "Created Java Type " + getJavaTypeFQCN( dataObject ),
ConversionMessageType.INFO );
}

dataModelTO.getDataObjects().add( dataObjectTO );
dataModel.getDataObjects().add( dataObject );
}

modellerService.saveModel( dataModelTO,
modellerService.saveModel( dataModel,
project );
}
}

private String getJavaTypeFQCN( final DataObjectTO dataObjectTO ) {
final String packageName = dataObjectTO.getPackageName();
final String className = dataObjectTO.getClassName();
private String getJavaTypeFQCN( final DataObject dataObject ) {
final String packageName = dataObject.getPackageName();
final String className = dataObject.getClassName();
if ( packageName == null || packageName.equals( "" ) ) {
return className;
}
return packageName + "." + className;
}

private void addAnnotations( final DataObjectTO dataObject,
private void addAnnotations( final DataObject dataObject,
final List<AnnotationMetaModel> annotationMetaModelList ) {
for ( AnnotationMetaModel annotationMetaModel : annotationMetaModelList ) {
final String name = annotationMetaModel.name;
final Map<String, String> values = annotationMetaModel.values;

Annotation annotation;
String key = AnnotationDefinitionTO.VALUE_PARAM;
String value = "";

Expand All @@ -326,17 +334,17 @@ private void addAnnotations( final DataObjectTO dataObject,
}

if ( "Role".equals( name ) ) {
dataObject.addAnnotation( annotationDefinitions.get( AnnotationDefinitionTO.ROLE_ANNOTATION ),
key,
value );
annotation = new AnnotationImpl( annotationDefinitions.get( AnnotationDefinitionTO.ROLE_ANNOTATION ) );
annotation.setValue( key, value );
dataObject.addAnnotation( annotation );
} else if ( "Position".equals( name ) ) {
dataObject.addAnnotation( annotationDefinitions.get( AnnotationDefinitionTO.POSITION_ANNOTATION ),
key,
value );
annotation = new AnnotationImpl( annotationDefinitions.get( AnnotationDefinitionTO.POSITION_ANNOTATION ) );
annotation.setValue( key, value );
dataObject.addAnnotation( annotation );
} else if ( "Equals".equals( name ) ) {
dataObject.addAnnotation( annotationDefinitions.get( AnnotationDefinitionTO.KEY_ANNOTATION ),
key,
value );
annotation = new AnnotationImpl( annotationDefinitions.get( AnnotationDefinitionTO.KEY_ANNOTATION ) );
annotation.setValue( key, value );
dataObject.addAnnotation( annotation );
}
}
}
Expand Down
9 changes: 9 additions & 0 deletions drools-wb-webapp/pom.xml
Expand Up @@ -360,6 +360,11 @@
<artifactId>kie-wb-common-project-explorer-backend</artifactId>
</dependency>

<dependency>
<groupId>org.kie.workbench.services</groupId>
<artifactId>kie-wb-common-data-modeller-core</artifactId>
</dependency>

<dependency>
<groupId>org.kie.workbench.screens</groupId>
<artifactId>kie-wb-common-data-modeller-api</artifactId>
Expand Down Expand Up @@ -793,6 +798,8 @@
<deploy>${project.build.directory}/gwt-symbols-deploy</deploy>
<localWorkers>1</localWorkers>
<extraJvmArgs>-Xmx2048m -XX:MaxPermSize=256m -Xms1024m -XX:PermSize=128m -Xss1M -XX:CompileThreshold=7000 -Derrai.jboss.home=${errai.jboss.home}</extraJvmArgs>
<module>org.drools.workbench.FastCompiledDroolsWorkbench</module>

<logLevel>INFO</logLevel>
<noServer>false</noServer>
<server>org.jboss.errai.cdi.server.gwt.EmbeddedWildFlyLauncher</server>
Expand Down Expand Up @@ -829,6 +836,8 @@
<compileSourcesArtifact>org.kie.workbench.screens:kie-wb-common-search-screen-client</compileSourcesArtifact>
<compileSourcesArtifact>org.kie.workbench.screens:kie-wb-common-project-explorer-api</compileSourcesArtifact>
<compileSourcesArtifact>org.kie.workbench.screens:kie-wb-common-project-explorer-client</compileSourcesArtifact>

<compileSourcesArtifact>org.kie.workbench.services:kie-wb-common-data-modeller-core</compileSourcesArtifact>
<compileSourcesArtifact>org.kie.workbench.screens:kie-wb-common-data-modeller-api</compileSourcesArtifact>
<compileSourcesArtifact>org.kie.workbench.screens:kie-wb-common-data-modeller-client</compileSourcesArtifact>
<compileSourcesArtifact>org.kie.workbench.screens:kie-wb-common-home-api</compileSourcesArtifact>
Expand Down
Expand Up @@ -34,6 +34,7 @@
<inherits name="org.kie.workbench.common.screens.server.management.ServerManagementClient"/>

<!-- Common Services -->
<inherits name="org.kie.workbench.common.services.datamodeller.DataModellerCore" />
<inherits name='org.kie.workbench.common.services.KieWorkbenchCommonServicesAPI'/>
<inherits name='org.kie.workbench.common.services.datamodel.KieWorkbenchCommonDataModelAPI'/>
<inherits name='org.kie.workbench.common.services.refactoring.KieWorkbenchCommonRefactoringAPI'/>
Expand Down

0 comments on commit 98f8e70

Please sign in to comment.