예제 #1
0
        public async Task <DataMap> NewAsync(ApplicationSchemaDefinition application, CompositeDataMap dataMap = null)
        {
            var newDataMap = new DataMap(application);

            // If we have no composite data map it means
            // a "parent" data map is being created. For
            // the sake of coherence, let's simply wrap
            // it inside a CompositeDataMap structure.
            if (null == dataMap)
            {
                dataMap = CompositeDataMap.Wrap(application, newDataMap);
            }
            else
            {
                // A component data map is being created.
                // Let's link it to the composite root.
                newDataMap.LocalState.ParentId = dataMap.Composite.LocalState.LocalId;
            }

            await Task
            .Factory
            .StartNew(() => Dispatcher.OnNew(newDataMap, application, dataMap));

            return(newDataMap);
        }
예제 #2
0
 internal void Construct(ApplicationCompositionDefinition composition, CompositeDataMap dataMap, DetailController detailController)
 {
     _composition       = composition;
     _compositeDataMap  = dataMap;
     _componentDataMaps = dataMap.Components(composition.To());
     _detailController  = detailController;
 }
예제 #3
0
        public async Task SaveAsync(CompositeDataMap dataMap, CancellationToken cancellationToken = default(CancellationToken))
        {
            Dispatcher.OnBeforeSave(dataMap);

            await Database
            .GetConnection(cancellationToken)
            .RunInTransactionAsync(c => SaveAsyncImpl(dataMap, c));
        }
 public void Construct(ApplicationSchemaDefinition application, DataMap dataMap, bool isNew, CompositeDataMap composite, DetailController detailController, Action <DetailComponentController.Result> onCompletion)
 {
     _applicationMetadata = application;
     _dataMap             = dataMap;
     _isNew            = isNew;
     _composite        = composite;
     _detailController = detailController;
     _onCompletion     = onCompletion;
 }
예제 #5
0
 public ApplicationCommandArguments(ApplicationSchemaDefinition schema, MetadataRepository metadataRepository, DataMap dataMap, DataRepository dataRepository, CompositeDataMap composite, User user, UIViewController controller)
 {
     _applicationMetadata = schema;
     _metadataRepository  = metadataRepository;
     _dataMap             = dataMap;
     _dataRepository      = dataRepository;
     _composite           = composite;
     _user       = user;
     _controller = controller;
 }
예제 #6
0
            public static void OnBeforeSave(CompositeDataMap dataMap)
            {
                ApplicationBehaviorDispatcher
                .OnBeforeSave(dataMap.Composite, dataMap.Application);

                foreach (var component in dataMap.Components())
                {
                    foreach (var componentDataMap in component.DataMaps)
                    {
                        ApplicationBehaviorDispatcher
                        .OnBeforeSave(componentDataMap, component.Application);
                    }
                }
            }
예제 #7
0
        private static void SaveAsyncImpl(CompositeDataMap dataMap, SQLiteConnection connection)
        {
            connection.Execute("delete from DataMap where LocalId = ?", dataMap.Composite.LocalState.LocalId);
            connection.Insert(new PersistableDataMap(dataMap.Application, dataMap.Composite, true, DateTime.Now));

            foreach (var component in dataMap.Components())
            {
                foreach (var componentDataMap in component.DataMaps)
                {
                    // Links the component to its composite.
                    componentDataMap.LocalState.ParentId = dataMap.Composite.LocalState.LocalId;

                    connection.Execute("delete from DataMap where LocalId = ?", componentDataMap.LocalState.LocalId);
                    connection.Insert(new PersistableDataMap(component.Application, componentDataMap, true, DateTime.Now));
                }
            }
        }
예제 #8
0
        internal void Construct(ApplicationSchemaDefinition application, DataMap dataMap, bool isNew, CompositeDataMap composite, DetailController detailController, Func <Task <bool> > commandPreCondition, Action <string> titleSetter)
        {
            _applicationMetadata = application;
            _dataMap             = dataMap;
            _composite           = composite;
            _detailController    = detailController;
            _commandPreCondition = commandPreCondition;
            _titleSetter         = titleSetter;

            // Create our buddy binding which will help
            // us to move data between the data map and
            // the UI controls.
            _binding = UiBinder.Bind(_dataMap, _applicationMetadata, isNew);

            // Load the data, but ignore validation for
            // now. We don't want objects that are already
            // invalid triggering a sea of red in the UI.
            _binding.IsValidationSuppressed = true;
        }
예제 #9
0
 public OnNewContext(ApplicationSchemaDefinition application, MetadataRepository metadataRepository, User user, CompositeDataMap composite)
     : base(application, metadataRepository, user)
 {
     _composite = composite;
 }
예제 #10
0
        public static void OnNew(DataMap dataMap, ApplicationSchemaDefinition application, CompositeDataMap composite)
        {
            var context  = new OnNewContext(application, MetadataRepository, User.Current, composite);
            var behavior = GetBehavior(context.Application);

            behavior.OnNew(context, dataMap);
        }
예제 #11
0
 public static void OnNew(DataMap newDataMap, ApplicationSchemaDefinition application, CompositeDataMap composite)
 {
     ApplicationBehaviorDispatcher
     .OnNew(newDataMap, application, composite);
 }
예제 #12
0
 public Task SaveAsync(ApplicationSchemaDefinition application, DataMap dataMap, CancellationToken cancellationToken = default(CancellationToken))
 {
     return(SaveAsync(CompositeDataMap.Wrap(application, dataMap), cancellationToken));
 }
예제 #13
0
        public void Construct(ApplicationSchemaDefinition application, DataMap dataMap, bool isNew, CompositeDataMap composite, DetailController detailController, Action <Result> onCompletion)
        {
            _applicationMetadata = application;
            _dataMap             = dataMap;
            _onCompletion        = onCompletion;
            _isNew = isNew;

            // Creates the controller that
            // contains the actual form.
            _formController = Storyboard.InstantiateViewController <DetailFormController>();
            _formController.Construct(_applicationMetadata, _dataMap, isNew, composite, detailController, OnCommand, t => Title = t);
            AddChildViewController(_formController);
            _formController.DidMoveToParentViewController(this);
        }
예제 #14
0
 private Task <CompositeDataMap> ExpandCompositeDataMap(DataMap dataMap)
 {
     return(CompositeDataMap.Expand(_applicationMetadata, dataMap));
 }
예제 #15
0
        public void Construct(CompositeDataMap dataMap, bool isNew)
        {
            _dataMap = dataMap;

            ConstructChildControllers(isNew);
        }