예제 #1
0
        public void Initialize()
        {
            this.solution = VsIdeTestHostContext.ServiceProvider.GetService<ISolution>();
            this.modelBus = VsIdeTestHostContext.ServiceProvider.GetService<SModelBus, IModelBus>();

            var solution = Path.Combine(this.TestContext.DeploymentDirectory, "Runtime.IntegrationTests.Content\\StoreAdapterSpec\\Sample.sln");
            VsIdeTestHostContext.Dte.Solution.Open(solution);
        }
        /// <summary>
        /// Initialize the serialization context on load / save
        /// </summary>
        /// <remarks>We need to supply a model bus for ModelBusReference deserialization to work</remarks>
        protected override void InitializeSerializationContext(Partition partition, SerializationContext serializationContext, bool isLoading)
        {
            Debug.Assert(partition != null, "partition should not be null");
            Debug.Assert(serializationContext != null, "serializationContext should not be null");

            IModelBus modelbus = partition.Store.GetService(typeof(SModelBus)) as IModelBus;

            serializationContext[Microsoft.VisualStudio.Modeling.Integration.ModelBusReferencePropertySerializer.ModelBusLoadContextKey] = modelbus;
        }
예제 #3
0
        public void Initialize()
        {
            this.solution = VsIdeTestHostContext.ServiceProvider.GetService <ISolution>();
            this.modelBus = VsIdeTestHostContext.ServiceProvider.GetService <SModelBus, IModelBus>();

            var solution = Path.Combine(this.TestContext.DeploymentDirectory, "Runtime.IntegrationTests.Content\\StoreAdapterSpec\\Sample.sln");

            VsIdeTestHostContext.Dte.Solution.Open(solution);
        }
예제 #4
0
        /// <summary>
        /// Initializes a new instance of the <see cref="TextTemplateUriProvider"/> class.
        /// </summary>
        public TextTemplateUriProvider(ITextTemplating templating, IModelBus modelBus, Lazy <IUriReferenceService> uriService)
        {
            Guard.NotNull(() => templating, templating);
            Guard.NotNull(() => modelBus, modelBus);
            Guard.NotNull(() => uriService, uriService);

            this.templating = templating;
            this.modelBus   = modelBus;
            this.uriService = uriService;
        }
예제 #5
0
        /// <summary>
        /// Initializes a new instance of the <see cref="TextTemplate"/> class.
        /// </summary>
        public TextTemplate(ITextTemplating templating, IModelBus modelBus, string templateFile)
        {
            Guard.NotNull(() => templating, templating);
            Guard.NotNull(() => modelBus, modelBus);
            Guard.NotNullOrEmpty(() => templateFile, templateFile);

            if (!File.Exists(templateFile))
            {
                throw new FileNotFoundException(Resources.TextTemplate_FileNotFound, templateFile);
            }

            this.templating      = templating;
            this.modelBus        = modelBus;
            this.templateFile    = templateFile;
            this.templateContent = ReplaceTemplatePathVariable(File.ReadAllText(templateFile));
        }
예제 #6
0
        /// <summary>
        /// Initializes a new instance of the <see cref="TextTemplate"/> class.
        /// </summary>
        public TextTemplate(ITextTemplating templating, IModelBus modelBus, string templateFile)
        {
            Guard.NotNull(() => templating, templating);
            Guard.NotNull(() => modelBus, modelBus);
            Guard.NotNullOrEmpty(() => templateFile, templateFile);

            if (!File.Exists(templateFile))
            {
                throw new FileNotFoundException(Resources.TextTemplate_FileNotFound, templateFile);
            }

            this.templating = templating;
            this.modelBus = modelBus;
            this.templateFile = templateFile;
            this.templateContent = ReplaceTemplatePathVariable(File.ReadAllText(templateFile));
        }
예제 #7
0
 public void Initialize()
 {
     this.templating = VsIdeTestHostContext.ServiceProvider.GetService <STextTemplating, ITextTemplating>();
     this.modelBus   = VsIdeTestHostContext.ServiceProvider.GetService <SModelBus, IModelBus>();
     this.solution   = VsIdeTestHostContext.ServiceProvider.GetService <ISolution>();
 }
예제 #8
0
        public static void AddSubProcessConnector(IModelBus modelBus, ModelBusReference processOverview)
        {
            ModelBusAdapter adapter = modelBus.CreateAdapter(processOverview);

            if (adapter != null)
            {
                ModelBusView view = adapter.GetDefaultView();

                Diagram targetDiagram = ((StandardVsModelingDiagramView)view).Diagram;

                var process = (ProcessOverview.Process)targetDiagram.ModelElement;

                foreach (var item in process.BTSubProcess)
                {
                    ModelBusReference fromSubProcRef = adapter.GetElementReference(item);
                    ModelBusAdapter toSubProcAdapter = modelBus.CreateAdapter(item.SubProcessRef);
                    var toSubProc = (SubProcess)toSubProcAdapter.ResolveElementReference(item.SubProcessRef);

                    List<Activity> subProcActs = new List<Activity>();
                    subProcActs.AddRange(toSubProc.Activities.Where(a => a is ToProcessConnector));

                    foreach (var act in subProcActs)
                    {
                        string fileName = Utilities.GetFileNameForStore(act.Store);

                        if (fileName == "")
                            return;

                        ModelBusReference mbr = ((ToProcessConnector)act).ToProcessConnectorRef;

                        IModelBus modelBusAct = act.Store.GetService(typeof(SModelBus)) as IModelBus;
                        ModelBusAdapterManager manager = modelBusAct.FindAdapterManagers(((ModelingAdapterReference)mbr.AdapterReference).AbsoluteTargetPath).First();
                        ModelBusReference reference = manager.CreateReference(((ModelingAdapterReference)mbr.AdapterReference).AbsoluteTargetPath);
                        ModelBusAdapter adapterAct = modelBus.CreateAdapter(reference);

                        var subProcAct = (Activity)adapterAct.ResolveElementReference(mbr);

                        ModelBusReference toSubProcRef = subProcAct.SubProcess.ProcessOverviewSubProcessRef;

                        //AddConnector(processOverview, fromSubProcRef, toSubProcRef);
                    }

                    subProcActs = new List<Activity>();
                    subProcActs.AddRange(toSubProc.Activities.Where(a => a is FromProcessConnector));

                    foreach (var act in subProcActs)
                    {
                        string fileName = Utilities.GetFileNameForStore(act.Store);

                        if (fileName == "")
                            return;

                        ModelBusReference mbr = ((FromProcessConnector)act).FromProcessConnectorRef;

                        IModelBus modelBusAct = act.Store.GetService(typeof(SModelBus)) as IModelBus;
                        ModelBusAdapterManager manager = modelBusAct.FindAdapterManagers(((ModelingAdapterReference)mbr.AdapterReference).AbsoluteTargetPath).First();
                        ModelBusReference reference = manager.CreateReference(((ModelingAdapterReference)mbr.AdapterReference).AbsoluteTargetPath);
                        ModelBusAdapter adapterAct = modelBus.CreateAdapter(reference);

                        var subProcAct = (Activity)adapterAct.ResolveElementReference(mbr);

                        ModelBusReference toSubProcRef = subProcAct.SubProcess.ProcessOverviewSubProcessRef;

                        //AddConnector(processOverview, toSubProcRef, fromSubProcRef);
                    }
                }
            }
        }
예제 #9
0
        public static ModelBusReference DeleteRefSubProcess(SubProcessBase element, IModelBus modelBus)
        {
            ModelBusReference fromProcessActivitRef = null;

            //Get current element reference
            string fileName = Utilities.GetFileNameForStore(element.Store);

            if (fileName == "")
                return null;

            ModelBusAdapterManager manager = modelBus.FindAdapterManagers(fileName).First();
            ModelBusReference reference = manager.CreateReference(fileName);

            using (ModelBusAdapter adapter = modelBus.CreateAdapter(reference))
            {
                fromProcessActivitRef = adapter.GetElementReference(element);
            }

            if (element.ProcessOverviewSubProcessRef != null)
            {
                using (ModelBusAdapter adapterExternalRef = modelBus.CreateAdapter(element.ProcessOverviewSubProcessRef))
                {
                    if (adapterExternalRef != null)
                    {
                        ModelBusView view = adapterExternalRef.GetDefaultView();
                        view.SetSelection(element.ProcessOverviewSubProcessRef);

                        Diagram targetDiagram = ((StandardVsModelingDiagramView)view).Diagram;

                        using (Transaction t = targetDiagram.Store.TransactionManager.BeginTransaction("Delete Old Item"))
                        {
                            //Delete old ExternalModelbusActivity
                            var targetAct = (ProcessOverview.SubProcessElement)adapterExternalRef.ResolveElementReference(element.ProcessOverviewSubProcessRef);

                            if (targetAct != null)
                            {
                                if (targetDiagram.FindShape(targetAct) != null)
                                {
                                    ((ProcessOverview.SubProcessShape)targetDiagram.FindShape(targetAct)).Delete();
                                }
                            }

                            t.Commit();
                        }
                    }
                }
            }

            return fromProcessActivitRef;
        }
예제 #10
0
        public static void AddLinkedSubProcess(IModelBus modelBus, SubProcessBase subProcess, ModelBusReference toReference)
        {
            List<Activity> subProcessActList = new List<Activity>();
            subProcessActList.AddRange(subProcess.Activities.Where(a => a is ToProcessConnector));
            subProcessActList.AddRange(subProcess.Activities.Where(a => a is FromProcessConnector));

            foreach (var item in subProcessActList)
            {
                ModelBusAdapter adapter;

                if (item is ToProcessConnector)
                {
                    adapter = modelBus.CreateAdapter(((ToProcessConnector)item).ToProcessConnectorRef);
                    var toSubProcessActivity = (FromProcessConnector)adapter.ResolveElementReference(((ToProcessConnector)item).ExternalActivityRef);

                    ModelBusReference toSubProcessRef = adapter.GetElementReference(toSubProcessActivity.SubProcess);

                    if (toSubProcessActivity.SubProcess.ProcessRef != null)
                        DeleteRefSubProcess(toSubProcessActivity.SubProcess, modelBus);

                    string fileName = Utilities.GetFileNameForStore(item.Store);

                    if (fileName == "")
                        return;

                    IModelBus modelBusSubProcess = item.Store.GetService(typeof(SModelBus)) as IModelBus;
                    ModelBusAdapterManager manager = modelBusSubProcess.FindAdapterManagers(fileName).First();
                    ModelBusReference reference = manager.CreateReference(fileName);
                    ModelBusAdapter adapterSubProcess = modelBus.CreateAdapter(reference);

                    //AddRefSubProcess(modelBus, toReference, adapter.GetElementReference(toSubProcessActivity.SubProcess), toSubProcessActivity.SubProcess);
                    AddLinkedSubProcess(modelBus, toSubProcessActivity.SubProcess, toReference);
                }
                else
                {
                    adapter = modelBus.CreateAdapter(((FromProcessConnector)item).FromProcessConnectorRef);
                    var fromSubProcessActivity = (ToProcessConnector)adapter.ResolveElementReference(((FromProcessConnector)item).FromProcessConnectorRef);

                    ModelBusReference fromSubProcessRef = adapter.GetElementReference(fromSubProcessActivity.SubProcess);

                    if (fromSubProcessActivity.SubProcess.ProcessRef != null)
                        DeleteRefSubProcess(fromSubProcessActivity.SubProcess, modelBus);

                    string fileName = Utilities.GetFileNameForStore(item.Store);

                    if (fileName == "")
                        return;

                    IModelBus modelBusSubProcess = item.Store.GetService(typeof(SModelBus)) as IModelBus;
                    ModelBusAdapterManager manager = modelBusSubProcess.FindAdapterManagers(fileName).First();
                    ModelBusReference reference = manager.CreateReference(fileName);
                    ModelBusAdapter adapterSubProcess = modelBus.CreateAdapter(reference);

                    //AddRefSubProcess(modelBus, toReference, adapter.GetElementReference(fromSubProcessActivity.SubProcess), fromSubProcessActivity.SubProcess);
                    AddLinkedSubProcess(modelBus, fromSubProcessActivity.SubProcess, toReference);
                }
            }
        }
        public ModelBusUriReferenceProvider(IModelBus modelBus)
        {
            Guard.NotNull(() => modelBus, modelBus);

            this.modelBus = modelBus;
        }
예제 #12
0
        private static ModelBusAdapter CreateModelBusAdapter(ModelBusReference reference)
        {
            IModelBus bus = reference.ModelBus ?? RuntimeHelper.ServiceProvider.GetService(typeof(IModelBus)) as IModelBus;

            return(bus.CreateAdapter(reference));
        }
        // MBR format:
        // modelbus://logicalAdapterId/model display name/element display name/adapter reference data.
        // V3 format:
        // mel://[DSLNAMESPACE]\[MODELELEMENTTYPE]\[MODELELEMENT]@[PROJECT]\[MODELFILE]
        private object ConvertToModelBusReference <T>(SerializationContext serializationContext, string input)
        {
            if (serializationContext == null)
            {
                throw new ArgumentNullException("serializationContext");
            }
            if (string.IsNullOrWhiteSpace(input) ||
                !typeof(ModelBusReference).IsAssignableFrom(typeof(T)))
            {
                return(default(T));
            }

            // filter out the schema part
            input = input.Replace(MelSchema, string.Empty);

            string[] data = input.Split(new string[] { "@" }, StringSplitOptions.RemoveEmptyEntries);
            if (data.Length != 2)
            {
                serializationContext.Result.AddMessage(BuildSerializationMessage(Properties.Resources.InvalidMoniker, input));
                return(default(T));
            }

            string[] modelData = data[0].Split(new string[] { "\\" }, StringSplitOptions.RemoveEmptyEntries);
            if (modelData.Length != 3)
            {
                serializationContext.Result.AddMessage(BuildSerializationMessage(Properties.Resources.InvalidMoniker, input));
                return(default(T));
            }

            string[] locationData = data[1].Split(new string[] { "\\" }, StringSplitOptions.RemoveEmptyEntries);
            if (locationData.Length != 2)
            {
                serializationContext.Result.AddMessage(BuildSerializationMessage(Properties.Resources.InvalidMoniker, input));
                return(default(T));
            }
            // set full path to model file
            if (!Path.IsPathRooted(locationData[1]))
            {
                locationData[1] = Path.Combine(Path.GetDirectoryName(serializationContext.Location), locationData[1]);
            }

            ModelBusReference result = null;
            IModelBus         bus    = serializationContext[ModelBusReferencePropertySerializer.ModelBusLoadContextKey] as IModelBus;

            if (bus != null)
            {
                using (ModelBusAdapterManager manager = bus.GetAdapterManager(LogicalAdapterId))
                {
                    ModelBusReference reference = null;
                    if (manager.TryCreateReference(out reference, Path.ChangeExtension(locationData[1], FileExtension)))
                    {
                        using (ModelBusAdapter adapter = manager.CreateAdapter(reference))
                        {
                            IModelingAdapterWithStore storeAdapter = adapter as IModelingAdapterWithStore;
                            if (storeAdapter.Store != null)
                            {
                                foreach (ModelElement mel in FilterElementsByType(storeAdapter.Store, modelData[1]))
                                {
                                    if (ValidatorUtility.GetTargetName(mel).Equals(modelData[2], StringComparison.OrdinalIgnoreCase))
                                    {
                                        return(adapter.GetElementReference(mel));
                                    }
                                }
                                // If we are still here, we could not find any match so try will all mels
                                foreach (ModelElement mel in FilterElementsByType(storeAdapter.Store, string.Empty))
                                {
                                    if (ValidatorUtility.GetTargetName(mel).Equals(modelData[2], StringComparison.OrdinalIgnoreCase))
                                    {
                                        return(adapter.GetElementReference(mel));
                                    }
                                }
                            }
                        }
                    }
                }
            }

            serializationContext.Result.AddMessage(BuildSerializationMessage(Properties.Resources.ReferenceElementNotFound, input));
            return(result);
        }
예제 #14
0
 public void Initialize()
 {
     this.templating = VsIdeTestHostContext.ServiceProvider.GetService<STextTemplating, ITextTemplating>();
     this.modelBus = VsIdeTestHostContext.ServiceProvider.GetService<SModelBus, IModelBus>();
     this.solution = VsIdeTestHostContext.ServiceProvider.GetService<ISolution>();
 }