Exemplo n.º 1
0
        /// <summary>
        /// Initialize
        /// </summary>
        /// <param name="builderFor">Der Passende Builder für z.B. einen AngularJs Proxy oder jQueryTs Proxy</param>
        /// <param name="proxyWriter">Der ProxyWriter, welcher sich um das Speichern unserer JavaScript Dateien kümmert.</param>
        /// <param name="methodTypeInformationParser">Enthält alle Methodeninformationen für den aktuellen Controller</param>
        public ProxyBuilder(IBuilderFor builderFor, IProxyWriter proxyWriter, IMethodTypeInformationParser methodTypeInformationParser)
        {
            if (proxyWriter == null)
            {
                throw new NullReferenceException("Der Proxywriter ist Null");
            }

            if (methodTypeInformationParser == null)
            {
                throw new NullReferenceException("Der MethodTypeInformationParser ist Null");
            }

            if (builderFor == null)
            {
                throw new NullReferenceException("Der BuilderFor ist Null");
            }

            ProxyWriter = proxyWriter;
            MethodTypeInformationParser = methodTypeInformationParser;
            BuilderFor = builderFor;
        }
        /// <summary>
        /// Zusammenbauen/erstellen des JavaScripProxies
        /// </summary>
        private void BuildJavaScriptProxyFiles(ControllerTypeInformations controllerInfo, IProxyWriter proxyWriter)
        {
            //Wenn keine Methoden übergeben wurden, kann auch keine Proxyklasse erstellt werden
            if (!controllerInfo.MethodTypeInformations.Any())
            {
                return;
            }

            //Den Funktionsnamen/Modulnamen für unser Modul ermitteln, z.B. "HomePSrv"
            string javaScriptSrvName = BuildHelper.GetJavaScriptModuleName(controllerInfo.Controller);

            //Wenn angegeben, den ersten Buchstaben der funktion kleinschreiben
            if (LowerFirstCharInFunctionName)
            {
                javaScriptSrvName = BuildHelper.LowerFirstCharName(javaScriptSrvName);
            }

            StringBuilder builder = new StringBuilder();

            //Beschriftung einfügen das es sich um ein automatisch generiertes Dokument handelt.
            builder.Append(string.Format(AngularProxyJsTemplates.AutomaticlyCreated, DateTime.Now.ToShortDateString(), DateTime.Now.ToLongTimeString(), Environment.UserName));
            builder.Append(Environment.NewLine).Append(Environment.NewLine);

            //unsere Funktionsdefinition zusammenbauen und einfüge, z.B. "function HomePSrv($http, $log) { ..."
            builder.Append(string.Format(AngularProxyJsTemplates.ServerFunctionDefinition, javaScriptSrvName));
            builder.Append(Environment.NewLine).Append(Environment.NewLine);

            //Alle Methoden durchgehen und die entsprechenden Parameter ermitteln und den passenden
            //POST bzw. GET Aufruf zusammenbauen als Prototypefunktion für unsere Funktion.
            foreach (MethodTypeInformations info in controllerInfo.MethodTypeInformations)
            {
                string methodName = info.MethodInfo.Name;

                //Wenn angegeben, den ersten Buchstaben der funktion kleinschreiben
                if (LowerFirstCharInFunctionName)
                {
                    methodName = BuildHelper.LowerFirstCharName(methodName);
                }

                string functionParameters = BuildHelper.GetFunctionParameters(info.MethodInfo);
                string methodCall         = BuildHelper.BuildHttpCall(info, HasSiteRootDefinition);

                //Unseren jeweiligen Methodenaufruf zusammenbauen ob POST oder GET
                string fctCall = string.Format(AngularProxyJsTemplates.BasicSuccessServerCall,
                                               javaScriptSrvName, methodName, functionParameters, methodCall);
                builder.Append(fctCall).Append(Environment.NewLine).Append(Environment.NewLine);
            }

            //Unsere ModulDefinition hinzufügen, z.B. 'angular.module("app.HomePSrv", []).service("HomePSrv", HomePSrv);'
            builder.Append(string.Format(AngularProxyJsTemplates.ModuleDefinition, javaScriptSrvName));

            string proxy = builder.ToString();

            //Die Proxy Dateien ins Dateisystem schreiben
            proxyWriter.SaveProxyContent(proxy, string.Format(@"{0}.js", javaScriptSrvName));
        }
 public void BuildProxyFile(ControllerTypeInformations informations, IProxyWriter proxyWriter)
 {
     BuildJavaScriptProxyFiles(informations, proxyWriter);
 }
        /// <summary>
        /// Zusammenbauen/erstellen des JavaScripProxies
        /// </summary>
        private void BuildJavaScriptProxyFiles(ControllerTypeInformations controllerInfo, IProxyWriter proxyWriter)
        {
            //Wenn keine Methoden übergeben wurden, kann auch keine Proxyklasse erstellt werden
            if (!controllerInfo.MethodTypeInformations.Any())
            {
                return;
            }

            //Den Funktionsnamen/Modulnamen für unser Modul ermitteln, z.B. "HomePSrv"
            string javaScriptSrvName = BuildHelper.GetJavaScriptModuleName(controllerInfo.Controller);
            string controllerName    = BuildHelper.GetClearControllerName(controllerInfo.Controller).Trim() + "PService";

            //Wenn angegeben, den ersten Buchstaben der funktion kleinschreiben
            if (LowerFirstCharInFunctionName)
            {
                javaScriptSrvName = BuildHelper.LowerFirstCharName(javaScriptSrvName);
            }

            StringBuilder builder = new StringBuilder();

            //Beschriftung einfügen das es sich um ein automatisch generiertes Dokument handelt.
            builder.Append(string.Format(AngularJsProxyTsTemplates.AutomaticlyCreated, DateTime.Now.ToShortDateString(), DateTime.Now.ToLongTimeString(), Environment.UserName));
            builder.Append(Environment.NewLine).Append(Environment.NewLine);

            //Unser GesamtTemplate entsprechend ausfüllen. Beschreibung der Templatewerte:
            //{0}  --> Der Name der Klasse
            //{1}  --> Auflistung der Interface Funktionen für unsere Klasse
            //{2} -->  Auflistung der Service Funktionen die über das Interface eingebunden wurden
            //{3} --> der Name des Service Moduls nach "außen"

            string fct = string.Format(AngularJsProxyTsTemplates.ModuleTemplate,
                                       controllerName,
                                       BuildInterfaceDifinitions(controllerInfo),
                                       BuildfunctionDefinitions(controllerInfo),
                                       javaScriptSrvName);

            builder.Append(fct);
            builder.Append(Environment.NewLine).Append(Environment.NewLine);

            string proxy = builder.ToString();

            //Die Proxy Datei ins Dateisystem schreiben *.ts -> TypeScript
            proxyWriter.SaveProxyContent(proxy, string.Format(@"{0}.ts", javaScriptSrvName));
        }