Search in sources :

Example 1 with EnvironmentEntityFactory

use of org.whole.lang.environment.factories.EnvironmentEntityFactory in project whole by wholeplatform.

the class ExecuteSampleModelRunnable method run.

@Override
public void run(IOperationProgressMonitor pm) throws InvocationTargetException, InterruptedException {
    IEntity selfEntity = EntityUtils.mapEntity(selfModel, EntityUtils.clone(EntityUtils.getCompoundRoot(selfModel)));
    Set<String> initialNames = bm.wNames();
    pm.beginTask("Executing sample...", IOperationProgressMonitor.TOTAL_WORK);
    behaviorModel = BehaviorUtils.apply("whole:org.whole.lang.ui.views:SamplePerspectiveSemantics#SampleViewBehavior", behaviorModel, bm);
    IEntity derivedModel = null;
    try {
        IEntityIterator<?> iterator = BehaviorUtils.lazyEvaluate(behaviorModel, 0, bm);
        iterator.setBindings(selfBindings);
        iterator.reset(selfEntity);
        if (iterator.getClass().equals(ConstantIterator.class)) {
            IEntity result = iterator.next();
            if (result == null || !EntityUtils.isData(result))
                derivedModel = result;
            else {
                Object resultValue = result.wGetValue();
                derivedModel = IVisitor.class.isInstance(resultValue) ? BindingManagerFactory.instance.createValue(Matcher.match((IVisitor) resultValue, selfEntity)) : result;
            }
        } else if (iterator.hasNext()) {
            derivedModel = MiscEntityFactory.instance.createMisc(0);
            ITransactionScope transactionScope = BindingManagerFactory.instance.createTransactionScope();
            bm.wEnterScope(transactionScope);
            try {
                for (IEntity result : iterator) {
                    transactionScope.commit();
                    derivedModel.wAdd(GenericEntityFactory.instance.create(CommonsEntityDescriptorEnum.SameStageFragment, // CommonsEntityFactory.instance.createSameStageFragment(
                    EntityUtils.clone(// TODO substitute with a no containment fragment
                    result)));
                }
            } finally {
                transactionScope.rollback();
                bm.wExitScope();
            }
        }
    } catch (MissingVariableException e) {
        addMissingVariables(contextModel, e);
    } catch (OperationCanceledException e) {
    // gracefully terminate execution
    } catch (Exception e) {
        if (e.getCause() instanceof MissingVariableException)
            addMissingVariables(contextModel, (MissingVariableException) e.getCause());
    } finally {
        pm.endTask();
    }
    IEntity variablesModel = null;
    if (derivedModel != null) {
        EnvironmentEntityFactory ef = EnvironmentEntityFactory.instance;
        variablesModel = ef.createBindings(0);
        for (String name : new TreeSet<String>(bm.wLocalNames())) if (!initialNames.contains(name))
            variablesModel.wAdd(ef.createBinding(ef.createName(name), ef.createValue(BindingUtils.wGet(bm, name))));
        final IEntity contents = derivedModel;
        final IEntity variables = variablesModel;
        context.get(UISynchronize.class).asyncExec(new Runnable() {

            public void run() {
                context.get(IEntityPartViewer.class).setContents(null, contents);
                context.get(IEventBroker.class).post(IE4UIConstants.TOPIC_UPDATE_VARIABLES, variables);
            }
        });
    }
}
Also used : ITransactionScope(org.whole.lang.bindings.ITransactionScope) IEntity(org.whole.lang.model.IEntity) IVisitor(org.whole.lang.visitors.IVisitor) OperationCanceledException(org.whole.lang.operations.OperationCanceledException) EnvironmentEntityFactory(org.whole.lang.environment.factories.EnvironmentEntityFactory) OperationCanceledException(org.whole.lang.operations.OperationCanceledException) InvocationTargetException(java.lang.reflect.InvocationTargetException) MissingVariableException(org.whole.lang.visitors.MissingVariableException) MissingVariableException(org.whole.lang.visitors.MissingVariableException) TreeSet(java.util.TreeSet) UISynchronize(org.eclipse.e4.ui.di.UISynchronize)

Example 2 with EnvironmentEntityFactory

use of org.whole.lang.environment.factories.EnvironmentEntityFactory in project whole by wholeplatform.

the class ExecuteSampleModelRunnable method addMissingVariables.

protected void addMissingVariables(IEntity contextModel, MissingVariableException e) {
    String[] varNames = e.getVariableNames();
    EnvironmentEntityFactory ef = EnvironmentEntityFactory.instance;
    for (String varName : varNames) {
        Name var = ef.createName(varName);
        IEntity find = Matcher.find(var, contextModel, false);
        if (find == null)
            contextModel.wAdd(ef.createBinding(var, CommonsEntityAdapterFactory.createResolver(EnvironmentEntityDescriptorEnum.Value)));
    }
}
Also used : IEntity(org.whole.lang.model.IEntity) EnvironmentEntityFactory(org.whole.lang.environment.factories.EnvironmentEntityFactory) Name(org.whole.lang.environment.model.Name)

Aggregations

EnvironmentEntityFactory (org.whole.lang.environment.factories.EnvironmentEntityFactory)2 IEntity (org.whole.lang.model.IEntity)2 InvocationTargetException (java.lang.reflect.InvocationTargetException)1 TreeSet (java.util.TreeSet)1 UISynchronize (org.eclipse.e4.ui.di.UISynchronize)1 ITransactionScope (org.whole.lang.bindings.ITransactionScope)1 Name (org.whole.lang.environment.model.Name)1 OperationCanceledException (org.whole.lang.operations.OperationCanceledException)1 IVisitor (org.whole.lang.visitors.IVisitor)1 MissingVariableException (org.whole.lang.visitors.MissingVariableException)1