blob: 4e1621fa3c45dd7ee5bf3e47112d57bc2682489a [file] [log] [blame]
/******************************************************************************
* *
* Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany) *
* *
* All rights reserved. This program and the accompanying materials *
* are made available under the terms of the Eclipse Public License 2.0 *
* which accompanies this distribution, and is available at *
* https://www.eclipse.org/legal/epl-2.0/ *
* *
* SPDX-License-Identifier: EPL-2.0 *
* *
*============================================================================*
* Initial contribution: *
* Loetz GmbH & Co. KG *
* *
* generated by xtext *
******************************************************************************/
package org.eclipse.osbp.xtext.dialogdsl.jvmmodel
import com.vaadin.ui.VerticalLayout
import java.util.Locale
import java.util.Map
import javax.inject.Inject
import org.eclipse.e4.core.contexts.IContextFunction
import org.eclipse.e4.core.contexts.IEclipseContext
import org.eclipse.e4.ui.model.application.MApplication
import org.eclipse.osbp.core.api.persistence.IPersistenceService
import org.eclipse.osbp.dsl.common.datatypes.IDto
import org.eclipse.osbp.dsl.semantic.entity.LEntity
import org.eclipse.osbp.ecview.semantic.uimodel.UiBeanSlot
import org.eclipse.osbp.ecview.semantic.uimodel.UiModel
import org.eclipse.osbp.ecview.semantic.uimodel.UiView
import org.eclipse.osbp.runtime.common.filter.IDTOServiceWithMutablePersistence
import org.eclipse.osbp.ui.api.contextfunction.IViewEmbeddedProvider
import org.eclipse.osbp.ui.api.customfields.IBlobConverter
import org.eclipse.osbp.ui.api.customfields.IBlobService
import org.eclipse.osbp.ui.api.statemachine.IDataProvider
import org.eclipse.osbp.ui.api.statemachine.IPeripheral
import org.eclipse.osbp.ui.api.statemachine.IStateMachine
import org.eclipse.osbp.ui.api.statemachine.IStateMachineParticipant
import org.eclipse.osbp.ui.api.user.IUser
import org.eclipse.osbp.utils.annotation.CommonUtils
import org.eclipse.osbp.utils.common.EntityUtils
import org.eclipse.osbp.xtext.action.common.IToolbarAction
import org.eclipse.osbp.xtext.dialogdsl.Dialog
import org.eclipse.osbp.xtext.dialogdsl.DialogPackage
import org.eclipse.osbp.xtext.dialogdsl.common.AbstractECViewDialog
import org.eclipse.osbp.xtext.dialogdsl.common.AbstractEmbeddedDialog
import org.eclipse.osbp.xtext.dialogdsl.common.AbstractUIDialog
import org.eclipse.osbp.xtext.dialogdsl.constants.DialogConstants
import org.eclipse.osbp.xtext.dialogdsl.mapper.AutowireUiFactory
import org.eclipse.osbp.xtext.i18n.I18NKeyGenerator
import org.eclipse.xtext.common.types.JvmDeclaredType
import org.eclipse.xtext.common.types.JvmField
import org.eclipse.xtext.common.types.JvmGenericType
import org.eclipse.xtext.common.types.JvmType
import org.eclipse.xtext.common.types.JvmTypeReference
import org.eclipse.xtext.common.types.JvmVisibility
import org.eclipse.xtext.common.types.util.RawSuperTypes
import org.eclipse.xtext.naming.IQualifiedNameProvider
import org.eclipse.xtext.util.Strings
import org.eclipse.xtext.xbase.jvmmodel.IJvmDeclaredTypeAcceptor
import org.eclipse.xtext.xbase.jvmmodel.JvmAnnotationReferenceBuilder
import org.eclipse.xtext.xbase.jvmmodel.JvmTypeReferenceBuilder
import org.eclipse.xtext.xbase.jvmmodel.JvmTypesBuilder
import org.osgi.service.component.annotations.Component
import org.slf4j.Logger
import org.eclipse.osbp.xtext.dialogdsl.common.AbstractSelectionDialog
/**
* Infers a JVM model from the source model.
* <p>
* The JVM model should contain all elements that would appear in the Java code
* which is generated from the source model. Other models link against the JVM model rather than the source model.
*/
class DialogDslVaaclipseViewCreator {
/**
* convenience API to build and initialize JVM types and their members.
*/
@Inject extension JvmTypesBuilder
@Inject extension DialogConstants
@Inject extension IQualifiedNameProvider
@Inject extension CommonUtils
private JvmAnnotationReferenceBuilder _annotationTypesBuilder;
private JvmTypeReferenceBuilder _typeReferenceBuilder;
def void createVaaclipseUI(DialogPackage pckg, Dialog dialog, IJvmDeclaredTypeAcceptor acceptor,
JvmAnnotationReferenceBuilder annotationTypesBuilder, JvmTypeReferenceBuilder typeReferenceBuilder) {
val mainBeanSlotType = getMainBeanslotType(dialog)
_annotationTypesBuilder = annotationTypesBuilder
_typeReferenceBuilder = typeReferenceBuilder
var uiViewName = getUiName(dialog)
if (uiViewName !== null && !uiViewName.empty) {
var clsName = '''«dialog.fullyQualifiedName»«VAACLIPSE_VIEW_PREFIX»'''
if (dialog.embedded) {
clsName = '''«clsName»Embedded'''
}
var cls = dialog.toClass(clsName)
acceptor.accept(cls,
[
if (dialog.embedded) {
superTypes += _typeReferenceBuilder.typeRef(AbstractEmbeddedDialog,
_typeReferenceBuilder.typeRef(getMainBeanslotType(dialog)))
superTypes += _typeReferenceBuilder.typeRef(IViewEmbeddedProvider)
} else if (dialog.stateful) {
superTypes += _typeReferenceBuilder.typeRef(AbstractUIDialog)
} else if (dialog.parametrized) {
superTypes += _typeReferenceBuilder.typeRef(AbstractSelectionDialog)
} else {
if(mainBeanSlotType !== null) {
superTypes += _typeReferenceBuilder.typeRef(AbstractECViewDialog, _typeReferenceBuilder.typeRef(mainBeanSlotType))
}
}
it.toConstructor(dialog)
it.toFields(dialog)
it.toOperations(dialog, pckg)
])
if (dialog.embedded) {
// the context function class
var contextClassName = '''«dialog.name»«VAACLIPSE_VIEW_PREFIX»EmbeddedContextFunction'''
val contextCls = pckg.toClass(contextClassName)
val dialogClsName = clsName
contextCls.getSuperTypes().add(_typeReferenceBuilder.typeRef(IContextFunction))
contextCls.simpleName = contextCls.simpleName.toFirstUpper
acceptor.accept(contextCls,
[
var annotationRef = _annotationTypesBuilder.annotationRef(Component)
annotationRef.addAnnAttr(dialog, "service", _typeReferenceBuilder.typeRef(IContextFunction) as JvmTypeReference)
var propContent = '''«IContextFunction.SERVICE_CONTEXT_KEY»=«dialog.name.toFirstUpper»'''
annotationRef.addAnnAttr(dialog, "property", propContent)
annotations += annotationRef
packageName = pckg.fullyQualifiedName.toString
it.toContextOperations(dialog, dialogClsName)
])
}
}
}
def getMainBeanslotType(Dialog dialog) {
if(dialog.autowire) {
return AutowireUiFactory.getDtoFQN(dialog.dto)
}else{
return dialog.mainBeanSlot?.jvmType.qualifiedName
}
}
def getUiName(Dialog dialog) {
if(dialog.autowire) {
return AutowireUiFactory.getECViewId(dialog)
}else{
return dialog.uiView.name
}
}
/**
* <p>create an injectable context function to be used by an e4 application.
*
* @param type
* @param dialog
* @param clsName
*/
def void toContextOperations(JvmGenericType type, Dialog dialog, String clsName) {
// compute override
type.members += dialog.toMethod("compute", _typeReferenceBuilder.typeRef(Object), [
annotations += _annotationTypesBuilder.annotationRef(Override)
visibility = JvmVisibility.PUBLIC
parameters += dialog.toParameter("context", _typeReferenceBuilder.typeRef(IEclipseContext))
parameters += dialog.toParameter("contextKey", _typeReferenceBuilder.typeRef(String))
body = [append(
'''
MApplication application = context.get(MApplication.class);
IEclipseContext appCtx = application.getContext();
IViewEmbeddedProvider provider = ContextInjectionFactory.make(«clsName».class, appCtx);
appCtx.set(IViewEmbeddedProvider.class, provider);
return provider;''')]
])
}
/**
* <p>build the constructors to be used by an e4 application.
*
* @param type
* @param dialog
*/
def void toConstructor(JvmDeclaredType type, Dialog dialog) {
if(dialog.embedded) {
type.members += dialog.toConstructor(
[
body = [append('''
super();
uuid = UUID.randomUUID().toString();''')]
])
} else {
type.members += dialog.toConstructor(
[
annotations += _annotationTypesBuilder.annotationRef(Inject)
parameters += dialog.toParameter("parent", _typeReferenceBuilder.typeRef(VerticalLayout))
parameters += dialog.toParameter("context", _typeReferenceBuilder.typeRef(IEclipseContext))
parameters += dialog.toParameter("app", _typeReferenceBuilder.typeRef(MApplication))
body = [append('''
super(parent,context,app);
uuid = UUID.randomUUID().toString();''')]
])
}
}
/**
* <p>build the class variables.
*
* @param type
* @param dialog
*/
def void toFields(JvmDeclaredType type, Dialog dialog) {
var JvmField field = null
// create logger
field = dialog.toField("log", _typeReferenceBuilder.typeRef(Logger))[
setInitializer([append('''LoggerFactory.getLogger("vaaclipseDialog")''')])]
field.final = true
field.static = true
type.members += field
}
/**
* <p>build the methods.
*
* @param type
* @param dialog
* @param pckg
*/
def void toOperations(JvmDeclaredType type, Dialog dialog, DialogPackage pckg) {
// getViewId
type.members += dialog.toMethod("getViewId", _typeReferenceBuilder.typeRef(String),
[
body = [append('''return "«dialog.getUiModelPackageName».«dialog.getViewName()»";''')]
])
if(dialog.stateful) {
type.members += dialog.toMethod("createRenderingParams", _typeReferenceBuilder.typeRef(Map,
_typeReferenceBuilder.typeRef(String),
_typeReferenceBuilder.typeRef(Object)),
[
parameters += dialog.toParameter("user", _typeReferenceBuilder.typeRef(IUser))
parameters += dialog.toParameter("blobService", _typeReferenceBuilder.typeRef(IBlobService))
body = [append('''«dialog.uiView.createRenderingParams»''')]
])
type.members += dialog.toMethod("localeChanged", _typeReferenceBuilder.typeRef(Void::TYPE),
[
parameters += dialog.toParameter("locale", _typeReferenceBuilder.typeRef(Locale))
body = [append('''«dialog.uiView.localeChanged»''')]
])
} else {
// getMainBeanSlot
val mainBeanSlot = dialog.mainBeanSlot
val isDto = EntityUtils.getDto(mainBeanSlot.jvmType.type) != null
// getBaseDtoName
type.members += dialog.toMethod("getBaseDtoName", _typeReferenceBuilder.typeRef(String),
[
body = [append(
'''return "«IF isDto»«mainBeanSlot.jvmType.type.qualifiedName»«ENDIF»";''')]
])
// getBaseEntityName
type.members += dialog.toMethod("getBaseEntityName", _typeReferenceBuilder.typeRef(String),
[
body = [append(
'''return "«IF isDto»«EntityUtils.getQualifiedEntityNameForQualifiedDtoName(mainBeanSlot.jvmType.type.qualifiedName)»«ENDIF»";''')]
])
// getIdForDto
type.members += dialog.toMethod("getIdForDto", _typeReferenceBuilder.typeRef(Object),
[
parameters += dialog.toParameter("savedDto", _typeReferenceBuilder.typeRef(mainBeanSlot.jvmType.qualifiedName))
body = [append('''return «IF isDto»«mainBeanSlot.idForDto»«ELSE»null«ENDIF»;''')]
])
// getDataName
type.members += dialog.toMethod("getDataName", _typeReferenceBuilder.typeRef(String),
[
body = [append('''return "«mainBeanSlot.jvmType.type.entityName»";''')]
])
// getPrimaryKey
val entityFQNEmptyOrNull = mainBeanSlot.jvmType.type.entityFQN === null || mainBeanSlot.jvmType.type.entityFQN.empty
type.members += dialog.toMethod("getPrimaryKey", _typeReferenceBuilder.typeRef(String),
[
body = [append('''return "«IF !entityFQNEmptyOrNull»«mainBeanSlot.jvmType.type.entityFQN».«EntityUtils.getDto(mainBeanSlot.jvmType.type).idAttributeName»«ENDIF»";''')]
])
// getDtoService
type.members += dialog.toMethod("getDtoService", _typeReferenceBuilder.typeRef(IDTOServiceWithMutablePersistence,
_typeReferenceBuilder.typeRef(mainBeanSlot.jvmType.qualifiedName)),
[
body = [append('''return (IDTOServiceWithMutablePersistence<«mainBeanSlot.jvmType.qualifiedName»>) DtoServiceAccess
.getService(«mainBeanSlot.jvmType.qualifiedName».class);''')]
])
// registerPersistenceUnit
type.members += dialog.toMethod("registerPersistenceUnit", _typeReferenceBuilder.typeRef(Void::TYPE),
[
val entity = EntityUtils.getEntityFromDto(mainBeanSlot.jvmType.type) as LEntity
parameters += dialog.toParameter("persistenceService", _typeReferenceBuilder.typeRef(IPersistenceService))
body = [append('''''')]
if (entity !== null){
body = [append('''
persistenceService.registerPersistenceUnit("«entity?.persistenceUnit»",
«entity?.fullyQualifiedName».class);
log.debug("PersistenceService registered");''')]
}
])
// create createToobarHelper
type.members += dialog.toMethod("createToobarHelper", _typeReferenceBuilder.typeRef(IToolbarAction),
[
body = [append('''«IF dialog.toolbar !== null»return new «dialog.toolbar.fullyQualifiedName»Toolbar(uuid);«ELSE»return null;«ENDIF»''')]
])
// create getBindingPropertyName
type.members += dialog.toMethod("getBindingPropertyName", _typeReferenceBuilder.typeRef(String),
[
annotations += _annotationTypesBuilder.annotationRef(Override)
body = [append('''return "«I18NKeyGenerator.key(dialog.name)»";''')]
])
// get number of layout columns
type.members += dialog.toMethod("getNumColumns", _typeReferenceBuilder.typeRef(int),
[
annotations += _annotationTypesBuilder.annotationRef(Override)
body = [append('''return «dialog.numColumns»;''')]
])
// getInitialization
type.members += dialog.toMethod("getInitializationGroup", _typeReferenceBuilder.typeRef(String),
[
body = [append('''return «IF dialog.group !== null»"«dialog.group.fullyQualifiedName»"«ELSE»null«ENDIF»;''')]
])
type.members += dialog.toMethod("getInitializationMethod", _typeReferenceBuilder.typeRef(String),
[
body = [append('''return «IF dialog.initialization !== null»"«dialog.initialization.name»"«ELSE»null«ENDIF»;''')]
])
}
}
def boolean containsSuperType(JvmType type, String fqn) {
if(!(type instanceof JvmDeclaredType)) {
return false
}
return new RawSuperTypes().collectNames(type).contains(fqn)
}
/**
*
* @param type
* @return
*/
def String getEntityName(JvmType type){
var entity = EntityUtils.getEntityFromDto(type)
return '''«entity?.name»'''
}
def String getEntityFQN(JvmType type){
var entity = EntityUtils.getEntityFromDto(type)
return '''«entity?.fullyQualifiedName»'''
}
/**
*
* @param slot
* @return
*/
def String getIdForDto(UiBeanSlot slot){
return '''savedDto.«slot.jvmType.getDtoIdGetter»'''
}
/**
* Provides the name of the first found bean slot defined in the ui view
*
* @param dialog
* @return
*/
def UiBeanSlot getMainBeanSlot(Dialog dialog){
if(dialog.autowire) {
// create a dummy beanslot
val UiBeanSlot slot = AutowireUiFactory.createBeanSlot(dialog.dto)
// we need to resolve the proxy here, due to lack of resourceset in slot
val typeRef = _typeReferenceBuilder.typeRef(AutowireUiFactory.getDtoFQN(dialog.dto))
slot.jvmType = typeRef
return slot
}else{
for (UiBeanSlot uiBeanSlot : dialog.uiView.beanSlots) {
return uiBeanSlot
}
}
}
/**
*
* @param dialog
* @return
*/
def String createDtoServices(Dialog dialog) {
var body = '''// DTO Services (via DS)'''
for (UiBeanSlot uiBeanSlot : dialog.uiView.beanSlots) {
body = '''
«body»
dto«uiBeanSlot.jvmType.simpleName»Service = (IDTOServiceWithMutablePersistence<«uiBeanSlot.jvmType.simpleName»>)DtoServiceAccess.getService(«uiBeanSlot.jvmType.simpleName».class);
'''
}
return body
}
/**
* <p>build the data components.
*
* @param dialog
* @return
*/
def String removeOldView(Dialog dialog) {
return '''
if (viewContext != null){
viewContext.dispose();
}
if (dataArea.getComponentCount() > 0) {
dataArea.removeAllComponents();
}
'''
}
/**
* Method to subscribe the view with the event broker to receive events due to the defined in the grammar
*
* @param dialog
* @param pckg
* @return
*/
def String subscribe(Dialog dialog, DialogPackage pckg) {
var body = ""
var idx = 0;
for (UiBeanSlot uiBeanSlot : dialog.uiView.beanSlots) {
var entity = EntityUtils.getEntityFromDto(uiBeanSlot.jvmType.type)
if (entity !== null) {
idx++
// Only once required.
if (idx == 1){
body = '''
«body»
persistenceService.registerPersistenceUnit("«entity?.persistenceUnit»", «entity?.fullyQualifiedName».class);
log.debug("PersistenceService registered");'''
}
}
}
body = '''
«body»
««« StrategyHandler event subscription
eventBroker.subscribe(EventBrokerMsg.DIALOG_STRATEGY_CHANGED,
strategyEventHandler);
'''
return body
}
/**
* Method to unsubscribe the view with the event broker to receive events due to the defined in the grammar
*
* @param dialog
* @return
*/
def unsubscribe(Dialog dialog) {
var unsubscribers = '''
«IF dialog.toolbar !== null»
eventBroker.unsubscribe(dispatchActionHandler);
«ENDIF»
eventBroker.unsubscribe(strategyEventHandler);'''
return unsubscribers
}
/**
*
* @param jvmType
* @return
*
*/
def String getDtoIdGetter(JvmTypeReference jvmType) {
return getDtoIdGetter(EntityUtils.getEntityFromDto(jvmType.type))
}
/**
*
* @param entity
* @return
*
*/
def String getDtoIdGetter(LEntity entity) {
if (entity !== null) {
for (attribute : entity.allAttributes) {
if (attribute.isId || attribute.isUuid) {
return '''get«Strings.toFirstUpper(attribute.name)»()'''
}
}
}
return '''getId()'''
}
/**
*
* @param dialog
* @return
*/
def String loadBeans(Dialog dialog) {
var body = ''''''
for (UiBeanSlot uiBeanSlot : dialog.uiView.beanSlots) {
val simpleTypeName = uiBeanSlot.jvmType.simpleName
val variableName = '''newLoaded«simpleTypeName»'''
body = '''
«body»
«simpleTypeName» «variableName» = null;
Object data = event.getProperty(org.eclipse.e4.core.di.extensions.EventUtils.DATA);
if (data instanceof «simpleTypeName») {
«variableName» = («simpleTypeName»)data;
}
else if (data instanceof EventBrokerMsg) {
EventBrokerMsg msg = (EventBrokerMsg)data;
String id = msg.getId();
log.debug("load bean with id:"+id);
if (id!=null){
try {
«variableName» = dto«simpleTypeName»Service.get((int)Double.parseDouble(id));
} catch (NumberFormatException e) {
«variableName» = dto«simpleTypeName»Service.get(id);
} catch (NullPointerException e) {
«variableName» = dto«simpleTypeName»Service.get(id);
}
}
}
ecviewComponent.setValue(VIEW_ID, «variableName», params);
'''
}
return body
}
def String localeChanged(UiView view) {
var body =
'''
if(getViewContext() != null) {
getViewContext().setLocale(locale);
}'''
var slots = view.beanSlots
for(slot:slots) {
if(slot.jvmType.type.containsSuperType(typeof(IStateMachineParticipant).name)) {
body = '''
«body»
if(getViewContext() != null && getViewContext().getBeanSlot("«slot.name»") != null) {
((IStateMachineParticipant)getViewContext().getBeanSlot("«slot.name»").getValue()).setLocale(locale);
}'''
} else if(slot.jvmType.type.containsSuperType(typeof(IStateMachine).name)) {
body = '''
«body»
if(getViewContext() != null && getViewContext().getBeanSlot("«slot.name»") != null) {
((IStateMachine)getViewContext().getBeanSlot("«slot.name»").getValue()).setLocale(locale);
}'''
}
}
return body
}
def String createRenderingParams(UiView view) {
var body = '''
Map<String, Object> params = super.createRenderingParams(user, blobService);
IConfiguration config = new IConfiguration() {
@Override
public void beforeUiRendering(IContext viewContext) {
'''
var slots = view.beanSlots
for(slot:slots) {
if(slot.jvmType.type.containsSuperType(typeof(IStateMachineParticipant).name) ||
slot.jvmType.type.containsSuperType(typeof(IPeripheral).name)
) {
body = '''
«body»
IStateMachineParticipant «slot.name» = new «slot.jvmType.qualifiedName»();
«slot.name».setLocale(user.getLocale());
viewContext.createBeanSlot("«slot.name»", «slot.jvmType.qualifiedName».class).setValue(«slot.name»);
'''
} else if(slot.jvmType.type.containsSuperType(typeof(IStateMachine).name)) {
body = '''
«body»
IStateMachine «slot.name» = new «slot.jvmType.qualifiedName»();
«slot.name».setUser(user);
«slot.name».setLocale(user.getLocale());
viewContext.setLocale(user.getLocale());
«slot.name».setDslMetadataService(getDslMetadataService());
«slot.name».setThemeResourceService(getThemeResourceService());
«slot.name».setReportProvider(getReportProvider());
«slot.name».setEclipseContext(getEclipseContext());
«slot.name».setBlobService(getBlobService());
viewContext.createBeanSlot("«slot.name»", «slot.jvmType.qualifiedName».class).setValue(«slot.name»);
'''
} else if(slot.jvmType.type.containsSuperType(typeof(IBlobConverter).name)) {
body = '''
«body»
viewContext.createBeanSlot("«slot.name»", BlobConverter.class).setValue(new BlobConverter(blobService));
'''
} else {
val entity = EntityUtils.getEntityFromDto(slot.jvmType.type);
body = '''
«body»
viewContext.createBeanSlot("«slot.name»", «slot.jvmType.qualifiedName».class).setValue(new «slot.jvmType.qualifiedName»());
«IF entity !== null»
persistenceService.registerPersistenceUnit("«entity.persistenceUnit»", «EntityUtils.getQualifiedEntityNameForQualifiedDtoName(slot.jvmType.type.qualifiedName)».class);
«ENDIF»
'''
}
}
body = '''
«body»
}
@Override
public void afterUiRendering(IContext context) {
}
@Override
public void beforeBind(IContext context) {
'''
body = '''
«body»
}
@Override
public void afterBind(IContext context) {
'''
for(slot:slots) {
if((slot.jvmType.type.containsSuperType(typeof(IStateMachineParticipant).name))) {
body = '''
«body»
((IStateMachineParticipant)context.getBeanSlot("«slot.name»").getValue()).init();
'''
if((slot.jvmType.type.containsSuperType(typeof(IDataProvider).name))) {
for(innerslot:slots) {
if((innerslot.jvmType.type.containsSuperType(typeof(IDto).name))) {
body = '''
«body»
if (context.getBeanSlot("«innerslot.name»") != null) {
((IDataProvider)context.getBeanSlot("«slot.name»").getValue()).addDatasource("«innerslot.name»", context.getBeanSlot("«innerslot.name»").getValueType());
}
'''
}
}
}
}
}
for(slot:slots) {
if((slot.jvmType.type.containsSuperType(typeof(IStateMachine).name))) {
body = '''
«body»
((IStateMachine)context.getBeanSlot("«slot.name»").getValue()).start();
'''
}
}
body = '''
«body»
}
};
params.put(IViewContext.PARAM_CONFIGURATION, config);
return params;
'''
return body
}
// HELPER METHODS
/**
* Method to set a default instance into the view context (for each defined datasource object in the uimodel)
*/
def String setBeanToViewContext(Dialog dialog) {
var body = ''''''
for (UiBeanSlot uiBeanSlot : dialog.uiView.beanSlots) {
body = '''«body»viewContext.setBean("«uiBeanSlot.name»",«uiBeanSlot.name»);'''
}
return body
}
def String getViewName(Dialog dialog) {
if(dialog.autowire) {
return AutowireUiFactory.getECViewName(dialog);
} else {
return dialog.uiView.name
}
}
def String getUiModelPackageName(Dialog dialog) {
if(dialog.autowire) {
return AutowireUiFactory.getECViewPackage(dialog);
}else{
var parent = dialog.uiView.eContainer
while (!(parent instanceof UiModel)) {
parent = parent.eContainer
}
var uiModel = parent as UiModel
return uiModel.packageName
}
}
}