public void GenerateComponent(ComponentDTO componentDTO)
        {
            Hashtable templateTable = GetTemplates ();
            Hashtable componentTable = InitComponentTable (componentDTO, templateTable);
            componentTable = FillTable (componentDTO, componentTable);
            //Haremos una segunda pasada para construir los métodos.
            componentTable = FillMethods (componentDTO, componentTable, templateTable);
            //Tercera pasada para conseguir las respuestas.
            componentTable = FillResponses (componentDTO, componentTable, templateTable);

            //Ahora solo resta guardarlo en archivos.  Con la ruta por
            //defecto que se haya configurado.
            DirectoryInfo componentDirectory = CreateSkeleton (componentDTO);
            WriteFiles (componentTable, componentDirectory, componentDTO);

            /**
            IDictionaryEnumerator enumerator = componentTable.GetEnumerator ();
            while (enumerator.MoveNext ()) {
                Console.WriteLine (enumerator.Key + "\n" + enumerator.Value);
            }
            */
        }
 public IDataTransferObject GetDataForm()
 {
     if (ValidateForm ()) {
         switch (ActionState) {
             case ActionState.Create:
                 ComponentDTO componentDTO = new ComponentDTO ();
                 componentDTO.ComponentName = componentNameEntry.Text;
                 componentDTO.ClassExceptionManager = exceptionManagerEntry.Text;
                 componentDTO.ViewCollection = viewTableModel.ListModel;
                 componentDTO.MethodCollection = methodTableModel.ListModel;
                 ActionState = ActionState.None;
                 return componentDTO;
             case ActionState.Edit:
                 this.componentDTO.ComponentName = componentNameEntry.Text;
                 this.componentDTO.ClassExceptionManager = exceptionManagerEntry.Text;
                 this.componentDTO.ViewCollection = viewTableModel.ListModel;
                 this.componentDTO.MethodCollection = methodTableModel.ListModel;
                 ActionState = ActionState.None;
                 return this.componentDTO;
             case ActionState.None:
                 break;
             default:
                 ActionState = ActionState.None;
                 break;
         }
     }
     return null;
 }
 private void OnTestClicked(object sender, EventArgs args)
 {
     ActionState = ActionState.Edit;
     componentDTO = (ComponentDTO) GetDataForm ();
 }
 /* Interface Implementation */
 public void LoadDataForm(IDataTransferObject dto)
 {
     if (dto is ComponentDTO) {
         ComponentDTO componentDTO = (ComponentDTO) dto;
         this.componentDTO = componentDTO;
         componentNameEntry.Text = componentDTO.ComponentName;
         exceptionManagerEntry.Text = componentDTO.ClassExceptionManager;
         viewTableModel = new ViewTableModel (componentDTO.ViewCollection);
         viewsTreeView.Model = viewTableModel.ListStore;
         methodTableModel = new MethodTableModel (componentDTO.MethodCollection);
         methodsTreeView.Model = methodTableModel.ListStore;
     }
 }
 private Hashtable InitComponentTable(ComponentDTO componentDTO, Hashtable templateTable)
 {
     Hashtable componentTable = new Hashtable ();
     //Key fileName without path, string value.
     componentTable.Add (componentDTO.ComponentName+"ComponentModel.cs", templateTable[TemplateNamesDTO.BusinessObject]);
     //Añadimos el gestor de exceptions
     componentTable.Add (componentDTO.ClassExceptionManager+".cs", templateTable[TemplateNamesDTO.ExceptionManager]);
     //Añadimos el manifiesto.
     /**
     StringBuilder manifestBuilder = new StringBuilder (TemplateNamesDTO.AssemblyInfo);
     manifestBuilder = manifestBuilder.Replace ("template", "cs");
     componentTable.Add (manifestBuilder.ToString (), templateTable[TemplateNamesDTO.AssemblyInfo]);
     */
     //Añaidmos las vistas
     IEnumerator enumerator = componentDTO.ViewCollection.GetEnumerator ();
     while (enumerator.MoveNext ()) {
         ViewDTO currentView = (ViewDTO) enumerator.Current;
         componentTable.Add (currentView.ViewName + ".cs", templateTable[TemplateNamesDTO.ViewHandler]);
     }
     //Añadimos el file nant.
     if (preferencesDTO.GenerateBuildfile) {
         componentTable.Add (componentDTO.ComponentName+".build", templateTable[TemplateNamesDTO.NAntBuildfile]);
     }
     return componentTable;
 }
        private void WriteFiles(Hashtable componentTable, DirectoryInfo componentDirectory, ComponentDTO componentDTO)
        {
            StringCollection stringCollection = new StringCollection ();
            IEnumerator enumerator = componentTable.Keys.GetEnumerator ();
            while (enumerator.MoveNext ()) {
                stringCollection.Add ((string) enumerator.Current);
            }

            enumerator = (stringCollection as IEnumerable).GetEnumerator ();
            while (enumerator.MoveNext ()) {
                string fileName = (string) enumerator.Current;
                string content = (string) componentTable[fileName];
                if (fileName.EndsWith ("ComponentModel.cs")) {
                    WriteFileAt (fileName, componentDirectory.GetDirectories ("Bo")[0], content);
                }
                if (fileName.StartsWith (componentDTO.ClassExceptionManager)) {
                    WriteFileAt (fileName, componentDirectory.GetDirectories ("Exceptions")[0], content);
                }
                if (fileName.StartsWith ("AssemblyInfo")) {
                    WriteFileAt (fileName, componentDirectory, content);
                }
                IEnumerator auxEnumerator = (componentDTO.ViewCollection as IEnumerable).GetEnumerator ();
                while (auxEnumerator.MoveNext ()) {
                    if (fileName.StartsWith ((string)auxEnumerator.Current)) {
                        WriteFileAt (fileName, componentDirectory.GetDirectories ("Forms")[0], content);
                    }
                }
            }

            if (preferencesDTO.GenerateBuildfile) {
                enumerator.Reset ();
                while (enumerator.MoveNext ()) {
                    string fileName = (string) enumerator.Current;
                    if (fileName.StartsWith (componentDTO.ComponentName) && fileName.EndsWith (".build")) {
                        string content = (string) componentTable [fileName];
                        WriteFileAt (fileName, componentDirectory, content);
                    }
                }
            }
        }
        private Hashtable FillTable(ComponentDTO componentDTO, Hashtable componentTable)
        {
            StringCollection stringCollection = new StringCollection ();
            IEnumerator enumerator = componentTable.Keys.GetEnumerator ();
            while (enumerator.MoveNext ()) {
                stringCollection.Add ((string) enumerator.Current);
            }

            enumerator = (stringCollection as IEnumerable).GetEnumerator ();
            while (enumerator.MoveNext ()) {
                string currentKey = (string)enumerator.Current;
                StringBuilder stringBuilder = new StringBuilder ((string)componentTable[currentKey]);
                if (currentKey.EndsWith (".build"))
                    stringBuilder = stringBuilder.Replace (TagValuesDTO.NAntComponentName, componentDTO.ComponentName);
                else
                    stringBuilder = stringBuilder.Replace (TagValuesDTO.ComponentName, componentDTO.ComponentName);
                stringBuilder = stringBuilder.Replace (TagValuesDTO.ExceptionManager, componentDTO.ClassExceptionManager);
                if (preferencesDTO.PrefixNamespace.Length != 0) {
                    //Lo seteará y añadirá un punto.
                    StringBuilder prefixBuilder = new StringBuilder (preferencesDTO.PrefixNamespace);
                    prefixBuilder = prefixBuilder.Append (".");
                    stringBuilder = stringBuilder.Replace (TagValuesDTO.Prefix, prefixBuilder.ToString ());
                }
                else {
                    //No lo seteara el prefix namespace
                    stringBuilder = stringBuilder.Replace (TagValuesDTO.Prefix, preferencesDTO.PrefixNamespace);
                }
                //Ahora para las vistas se discernira para cada una.
                foreach (ViewDTO viewDTO in componentDTO.ViewCollection) {
                    string view = viewDTO.ViewName;
                    if (currentKey.StartsWith (view)) {
                        stringBuilder = stringBuilder.Replace (TagValuesDTO.ViewName, view);
                    }
                }
                componentTable[currentKey] = stringBuilder.ToString ();
            }
            return componentTable;
        }
 private Hashtable FillResponses(ComponentDTO componentDTO, Hashtable componentTable, Hashtable templateTable)
 {
     foreach (ViewDTO viewDTO in componentDTO.ViewCollection) {
         string viewName = viewDTO.ViewName;
         StringBuilder responseBuilder = new StringBuilder ();
         foreach (MethodDTO methodDTO in componentDTO.MethodCollection) {
             if (methodDTO.ViewToResponse.Equals (viewName)) {
                 responseBuilder = responseBuilder.Append (templateTable[TemplateNamesDTO.ResponseMethod]);
                 responseBuilder = responseBuilder.Replace (TagValuesDTO.ResponseName, methodDTO.ResponseMethod);
             }
         }
         StringBuilder viewBuilder = new StringBuilder ((string)componentTable [viewName + ".cs"]);
         viewBuilder = viewBuilder.Replace (TagValuesDTO.Body, responseBuilder.ToString ());
         componentTable [viewName + ".cs"] = viewBuilder.ToString ();
     }
     return componentTable;
 }
        private Hashtable FillMethods(ComponentDTO componentDTO, Hashtable componentTable, Hashtable templateTable)
        {
            StringBuilder stringBuilder = new StringBuilder ();
            foreach (MethodDTO methodDTO in componentDTO.MethodCollection) {
                stringBuilder = stringBuilder.Append (templateTable[TemplateNamesDTO.MethodBody]);
                stringBuilder = stringBuilder.Replace (TagValuesDTO.ReturnType, methodDTO.ReturnType);
                stringBuilder = stringBuilder.Replace (TagValuesDTO.MethodName, methodDTO.MethodName);
                //TODO:Build parameters
                StringBuilder methodStringBuilder = new StringBuilder ();
                foreach (ParameterDTO parameterDTO in methodDTO.ParametersCollection) {
                    methodStringBuilder.Append (parameterDTO.TypeName);
                    methodStringBuilder.Append (" ");
                    methodStringBuilder.Append (parameterDTO.VarName);
                    methodStringBuilder.Append (", ");
                }
                //Eliminamos la coma y el ultimo espacio.
                if (methodStringBuilder.Length != 0)
                    methodStringBuilder.Remove (methodStringBuilder.Length -2, 2);
                stringBuilder = stringBuilder.Replace (TagValuesDTO.Parameters, methodStringBuilder.ToString ());
                //Attributes.
                //Set up prefix

                if (preferencesDTO.PrefixNamespace.Length != 0) {
                    //Lo seteará y añadirá un punto.
                    StringBuilder prefixBuilder = new StringBuilder (preferencesDTO.PrefixNamespace);
                    prefixBuilder = prefixBuilder.Append (".");
                    stringBuilder = stringBuilder.Replace (TagValuesDTO.Prefix, prefixBuilder.ToString ());
                }
                else {
                    //No lo seteara el prefix namespace
                    stringBuilder = stringBuilder.Replace (TagValuesDTO.Prefix, preferencesDTO.PrefixNamespace);
                }
                stringBuilder = stringBuilder.Replace (TagValuesDTO.ComponentName, componentDTO.ComponentName);

                stringBuilder = stringBuilder.Replace (TagValuesDTO.ViewName, methodDTO.ViewToResponse);
                stringBuilder = stringBuilder.Replace (TagValuesDTO.ResponseName, methodDTO.ResponseMethod);
            }
            //Obtenemos el BO del componente y seteamos el valor, reemplazando.
            //
            StringCollection stringCollection = new StringCollection ();
            IEnumerator enumerator = componentTable.Keys.GetEnumerator ();
            while (enumerator.MoveNext ()) {
                stringCollection.Add ((string) enumerator.Current);
            }
            enumerator = (stringCollection as IEnumerable).GetEnumerator ();
            string currentValue = String.Empty;
            while (enumerator.MoveNext ()) {
                currentValue = (string) enumerator.Current;
                if (currentValue.EndsWith ("ComponentModel.cs")) {
                    break;
                }
            }
            if (!currentValue.Equals (String.Empty)) {
                //Esta comprobación igual sobra.
                StringBuilder componentTemplateBuilder = new StringBuilder ((string)componentTable[currentValue]);
                componentTemplateBuilder = componentTemplateBuilder.Replace (TagValuesDTO.Body, stringBuilder.ToString ());
                componentTable[currentValue] = componentTemplateBuilder.ToString ();
            }

            return componentTable;
        }
        private DirectoryInfo CreateSkeleton(ComponentDTO componentDTO)
        {
            DirectoryInfo directoryInfo = new DirectoryInfo (preferencesDTO.OutputPath);
            DirectoryInfo componentDirectoryInfo = directoryInfo.CreateSubdirectory (componentDTO.ComponentName);
            //Ahora crearemos uno para cada cosa, Bo, Forms, Dto, Exceptions ...
            componentDirectoryInfo.CreateSubdirectory ("Bo");
            componentDirectoryInfo.CreateSubdirectory ("Forms");
            componentDirectoryInfo.CreateSubdirectory ("Dto");
            componentDirectoryInfo.CreateSubdirectory ("Exceptions");
            componentDirectoryInfo.CreateSubdirectory ("Resources");

            return componentDirectoryInfo;
        }
 public ComponentNode(ComponentDTO componentDTO)
     : base((IDataTransferObject) componentDTO)
 {
 }