/*private ArrayList GetModelsListFromFormattedString(string sourceType, string sourceString)
    {
        if (sourceString == null)
        {
            return null;
        }
        ArrayList list = new ArrayList ();
        string[] Ids = sourceString.TrimEnd(Constants.SEPARATOR).Split(Constants.SEPARATOR);
        foreach (string id in Ids)
        {
            System.Type type = System.Type.GetType(sourceType);
            object model = ActiveRecordMediator.FindByPrimaryKey(type, int.Parse(id));
            list.Add(model);
        }
        return list;
    }*/
    
    /*private ArrayList GetFieldsFromFormattedString(string sourceString)
    {
    	  return GetModelsListFromFormattedString("CastlePortal.Field", sourceString);
    }*/
    
    /*private ArrayList GetAclsFromFormattedString(string sourceString)
    {
        return GetModelsListFromFormattedString("CastlePortal.Acl", sourceString);
    }*/

    private void AddFieldsTemplates(Template template, string edit, string list)
    {

        foreach (FieldTemplate ft in template.Fields)
           ft.Delete();
        template.ListingVisibleFields = new ArrayList();
        template.Fields = new ArrayList();
        if (edit != null)
        {
            string[] options = edit.TrimEnd(':').Split(':');
            string[] ol;
            if (list != null)
                ol = list.TrimEnd(':').Split(':');
            else
                ol = edit.TrimEnd(':').Split(':');
            int i = 1;
            int j = 1;
            // delete current data 
            foreach (string option in options)
            {
                if (option.Length > 0)
                {
                    Field field = Field.Find(int.Parse(option));
                    FieldTemplate fieldTemplate;
                    // if field is within main list
                    if ((Array.BinarySearch(ol, option) >= 0) && (Array.BinarySearch(ol, option) <= options.Length))
                    {
                        fieldTemplate = new FieldTemplate(field, template, i++, j++);
                        fieldTemplate.Save();
                        template.Fields.Add(fieldTemplate);
                        template.ListingVisibleFields.Add(fieldTemplate);
                    }
                    else
                    {
                        fieldTemplate = new FieldTemplate(field, template, -1, j++);
                        fieldTemplate.Save();
                        template.Fields.Add(fieldTemplate);
                    }
                }
            }
        }
    }
    private static string ReadTemplate(XmlNode node, string rootpath)
    {
        if (node.Name == "Template")
        {
            string name = NodeGetString(node, "nombre");
            string description = NodeGetString(node, "nombrelargo");
            string path = NodeGetString(node, "fichero");
            string isPublic = NodeGetString(node, "public");

            string filelist = Constants.DEFAULT_LIST_TEMPLATE;
            string fileview = Constants.DEFAULT_VIEW_TEMPLATE;
            string fileedit = Constants.DEFAULT_EDIT_TEMPLATE;
            string prepath = rootpath + Constants.TEMPLATES_FOLDER + path;

            if (System.IO.File.Exists(prepath + ".vm"))
                filelist = path + ".vm";
            if (System.IO.File.Exists(prepath + "_list.vm"))
                filelist = path + "_list.vm";
            if (System.IO.File.Exists(prepath + "_edit.vm"))
                fileedit = path + "_edit.vm";
            if (System.IO.File.Exists(prepath + "_view.vm"))
                fileview = path + "_view.vm";

            Template t = new Template(name, description, filelist, fileview, fileedit);
            if (isPublic == "true")
            {
                t.Public = true;
            }
            else
            {
                t.Public = false;
            }
            /* FIXME: Estropeado porque antes era field y ahora es fieldtemplate
            t.FieldEdit = listaedit;
            */
            t.Save();

            int i = 1; // orden para la edicion
            int j = 1; // orden para el listado
            foreach (XmlNode field in node.ChildNodes)
            if (field.Name == "Field")
            {
                Field f = (Field) NodeGetObject(field, "nombre", fields);
                string show = NodeGetString(field, "show");

                FieldTemplate ft;
                if (show == "0")
                    ft = new FieldTemplate(f, t, -1, i++);
                else
                    ft = new FieldTemplate(f, t, j++, i++);
                ft.Save();
            }

            System.Console.WriteLine ("Template: "+ name);
            templates[name] = t;
        }
        return null;
    }