示例#1
0
        public static int GetEnumItemNumber(IMgaFCO IMgaFCO, string attributeName)
        {
            Contract.Requires(IMgaFCO != null);
            Contract.Requires(IMgaFCO.MetaBase is MgaMetaFCO);
            Contract.Requires(string.IsNullOrEmpty(attributeName) == false);

            try
            {
                MgaMetaFCO       meta = (IMgaFCO.MetaBase as MgaMetaFCO);
                MgaMetaAttribute attr = meta.AttributeByName[attributeName];

                string selectedItemValue = IMgaFCO.Attribute[attr].StringValue;
                int    i = 0;
                foreach (MgaMetaEnumItem item in attr.EnumItems)
                {
                    if (item.Value == selectedItemValue)
                    {
                        return(i);
                    }
                    i++;
                }
                throw new Exception("Attribute / selected item was not found.");
            }
            catch (Exception)
            {
                throw;
            }
        }
示例#2
0
        /// <summary>
        /// Get the meta object
        /// </summary>
        /// <param name="metaPart">MetaPart</param>
        /// <param name="metaFco">returns the MetaFCO</param>
        /// <returns>true if succeeded</returns>
        bool GetMetaFCO(MgaMetaPart metaPart, out MgaMetaFCO metaFco)
        {
            metaFco = null;
            if (metaPart == null)
            {
                return(false);
            }

            metaFco = metaPart.Role.Kind;
            return(metaFco != null);
        }
示例#3
0
        public static void SetEnumItem(IMgaFCO IMgaFCO, string attributeName, int index)
        {
            Contract.Requires(IMgaFCO != null);
            Contract.Requires(IMgaFCO.MetaBase is MgaMetaFCO);
            Contract.Requires(string.IsNullOrEmpty(attributeName) == false);

            try
            {
                MgaMetaFCO       meta = (IMgaFCO.MetaBase as MgaMetaFCO);
                MgaMetaAttribute attr = meta.AttributeByName[attributeName];

                IMgaFCO.Attribute[attr].StringValue = attr.EnumItems[index + 1].Value;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
示例#4
0
        private void CreateMaterialObjects(MgaFolder materialFolder,
                                           List <string> materialsList)
        {
            List <string> existingMaterials = new List <string>();

            foreach (MgaFCO item in materialFolder.ChildFCOs)
            {
                existingMaterials.Add(item.StrAttrByName["Name"]);
            }

            foreach (var materialName in materialsList)
            {
                if (!existingMaterials.Contains(materialName))
                {
                    MgaMetaFCO role      = (materialFolder.MetaFolder as MgaMetaFolder).get_LegalRootObjectByName("Material");
                    MgaFCO     aMaterial = materialFolder.CreateRootObject(role);
                    aMaterial.Name = materialName;
                    aMaterial.StrAttrByName["Name"] = materialName;
                }
            }
        }
        /// <summary>
        /// Get the meta object
        /// </summary>
        /// <param name="metaPart">MetaPart</param>
        /// <param name="metaFco">returns the MetaFCO</param>
        /// <returns>true if succeeded</returns>
        bool GetMetaFCO(MgaMetaPart metaPart, out MgaMetaFCO metaFco)
        {
            metaFco = null;
            if (metaPart == null)
                return false;

            metaFco = metaPart.Role.Kind;
            return metaFco != null;
        }
        public void Initialize(
            MgaProject project,
            MgaMetaPart meta,
            MgaFCO obj)
        {
            // only store temporarily, they might be unavailable later
            myobj = obj;
            mymetaobj = null;
            LastMetaKind = myobj.Meta.Name;

            // obtain the metaobject
            GetMetaFCO(meta, out mymetaobj);

            if (obj != null)
            {
                // concrete object
                name = myobj.Name;
                if (myobj.Meta.Name == "Task")
                {
                    // task
                    // get progid check whether it is already in the cache
                    TaskProgId = myobj.StrAttrByName["COMName"];
                    if (interpreters.Keys.Contains(TaskProgId) == false)
                    {
                        // create an instance
                        ComComponent task = new ComComponent(TaskProgId);
                        interpreters.Add(TaskProgId, task);
                    }
                    // save parameters
                    Parameters = myobj.StrAttrByName["Parameters"];
                    h = IconHeight;
                    w = IconWidth;
                }
                else if (myobj.Meta.Name == "WorkflowRef")
                {
                    // Workflow reference get the tasks
                    // TODO: get those in the right order
                    workflow.Clear();
                    MgaReference wfRef = myobj as MgaReference;
                    Queue<string> items = new Queue<string>();
                    List<MgaAtom> tasks = new List<MgaAtom>();
                    List<MgaFCO> processed = new List<MgaFCO>();

                    if (wfRef.Referred != null)
                    {
                        tasks.AddRange(wfRef.Referred.ChildObjects.OfType<MgaAtom>());

                        MgaAtom StartTask = null;

                        StartTask = tasks.
                            Where(x => x.ExSrcFcos().Count() == 0).
                            FirstOrDefault();

                        if (StartTask != null)
                        {
                            this.EnqueueTask(StartTask as MgaFCO);
                            processed.Add(StartTask as MgaFCO);

                            MgaFCO NextTask = StartTask.ExDstFcos().FirstOrDefault();

                            // avoid loops
                            while (NextTask != null &&
                                processed.Contains(NextTask) == false)
                            {
                                processed.Add(NextTask as MgaFCO);
                                this.EnqueueTask(NextTask);
                                NextTask = NextTask.ExDstFcos().FirstOrDefault();
                            }
                        }
                    }
                    h = IconHeight;
                    if (workflow.Count > 0)
                    {
                        w = IconWidth * workflow.Count +
                            TaskPadding * (workflow.Count - 1);
                    }
                    else
                    {
                        w = IconWidth;
                    }
                }
            }
            else
            {
                // not a concreter object (maybe in part browser?)
                name = mymetaobj.DisplayedName;
            }

            // to handle color and labelColor settings in GME
            if (!GetColorPreference(out color, "color"))
            {
                color = Color.Black;
            }
            if (!GetColorPreference(out labelColor, "nameColor"))
            {
                labelColor = Color.Black;
            }

            // null them for sure
            // myobj = null;
            mymetaobj = null;
        }
 public ReadOnlyDecorator(GenericDecorator decorator, 
     IntPtr parentHwnd, MgaFCO fco, MgaMetaFCO metafco, MgaProject project, Type formType, IBackroundDraw bgdraw)
     : base(decorator, parentHwnd, fco, metafco, project, bgdraw, formType)
 {
 }
        public DefaultBitmapDecorator(GenericDecorator decorator,
            IntPtr parentHwnd, MgaFCO fco, MgaMetaFCO metafco, MgaProject project, IBackroundDraw backgrounddraw, Type formType = null)
            : base(parentHwnd, fco, project, formType != null)
        {
            string iconName;
            decorator.GetPreference(out iconName, "icon");
            string defaultIconName = iconName;

            if (fco != null)
            {
                string kind = fco.Meta.Name;
                if (kind == "ParkingSign")
                {
                    iconName = GetParkingSignIcon(fco);
                }
                else if (kind == "FloodSign")
                {
                    iconName = GetFloodSignIcon(fco);
                }
                else if (kind == "StreetSign")
                {
                    iconName = GetStreetSignIcon(fco);
                }
                // else fall through to the default icon
            }

            this.backgrounddraw = backgrounddraw;

            this.formType = formType;

            string projectDir = Path.GetDirectoryName(project.ProjectConnStr.Substring(4));
            string paradigmDir = Path.GetDirectoryName(project.ParadigmConnStr.Substring(4));

            MgaRegistrar registrar = new MgaRegistrar();
            StringBuilder iconPath = new StringBuilder(registrar.IconPath[regaccessmode_enum.REGACCESS_BOTH]);

            iconPath.Replace("$PROJECTDIR", projectDir);
            iconPath.Replace("$PARADIGMDIR", paradigmDir);

            search_paths = iconPath.ToString().Split(';');

            foreach (string path in search_paths)
            {
                string fileName = Path.Combine(path, iconName);
                if (File.Exists(fileName))
                {
                    image = Image.FromFile(fileName);
                    break;
                }
            }

            if (image == null) // look at the default
            {
                foreach (string path in search_paths)
                {
                    string fileName = Path.Combine(path, defaultIconName);
                    if (File.Exists(fileName))
                    {
                        image = Image.FromFile(fileName);
                        break;
                    }
                }
            }

            if (image == null)
            {
                image = LoadImage(defaultIconStr);
                default_image = image;
            }

            if (fco != null)
            {
                fcoName = fco.Name;
                //fcoName = String.IsNullOrEmpty(metafco.DisplayedName) ? metafco.Name : metafco.DisplayedName;

                if (fco.ObjType == objtype_enum.OBJTYPE_REFERENCE)
                {

                    MgaReference reference = fco as MgaReference;
                    if (reference.Referred == null)
                    {
                        Embellish = EmbellishType.NullReference;
                    }
                    else
                    {
                        Embellish = EmbellishType.Reference;
                    }

                } else  if (fco.IsInstance)
                {
                    // instance

                    Embellish = EmbellishType.Instance;
                }
                else if (fco.DerivedFrom != null)
                {
                    // Subtype
                    Embellish = EmbellishType.SubType;
                }
                else if (fco.DerivedObjects.Count != 0)
                {
                    Embellish = EmbellishType.Type;
                }
                else
                {
                    Embellish = EmbellishType.None;
                }
            }
            else
            {
                fcoName = String.IsNullOrEmpty(metafco.DisplayedName) ? metafco.Name : metafco.DisplayedName;
            }
        }
示例#9
0
        public void Initialize(
            MgaProject project,
            MgaMetaPart meta,
            MgaFCO obj)
        {
            // only store temporarily, they might be unavailable later
            myobj     = obj;
            mymetaobj = null;
            FCOKind   = myobj?.Meta?.Name;
            MetaKind  = meta.Name;

            // obtain the metaobject
            GetMetaFCO(meta, out mymetaobj);

            if (obj != null)
            {
                // concrete object
                name = myobj.Name;
                if (myobj.Meta.Name == "Task")
                {
                    // task
                    // get progid check whether it is already in the cache
                    TaskProgId = myobj.StrAttrByName["COMName"];
                    if (interpreters.Keys.Contains(TaskProgId) == false)
                    {
                        // create an instance
                        ComComponent task = new ComComponent(TaskProgId);
                        interpreters.Add(TaskProgId, task);
                    }
                    // save parameters
                    Parameters = myobj.StrAttrByName["Parameters"];
                    h          = IconHeight;
                    w          = IconWidth;
                }
                else if (myobj.Meta.Name == "WorkflowRef")
                {
                    // Workflow reference get the tasks
                    // TODO: get those in the right order
                    workflow.Clear();
                    MgaReference   wfRef     = myobj as MgaReference;
                    Queue <string> items     = new Queue <string>();
                    List <MgaAtom> tasks     = new List <MgaAtom>();
                    List <MgaFCO>  processed = new List <MgaFCO>();

                    if (wfRef.Referred != null)
                    {
                        HashSet <string> taskKinds = new HashSet <string>()
                        {
                            "ExecutionTask",
                            "Task"
                        };
                        tasks.AddRange(wfRef.Referred.ChildObjects.OfType <MgaAtom>().Where(atom => taskKinds.Contains(atom.Meta.Name)));

                        MgaAtom StartTask = null;

                        StartTask = tasks.
                                    Where(x => x.ExSrcFcos().Count() == 0).
                                    FirstOrDefault();

                        if (StartTask != null)
                        {
                            this.EnqueueTask(StartTask as MgaFCO);
                            processed.Add(StartTask as MgaFCO);

                            MgaFCO NextTask = StartTask.ExDstFcos().FirstOrDefault();

                            // avoid loops
                            while (NextTask != null &&
                                   processed.Contains(NextTask) == false)
                            {
                                processed.Add(NextTask as MgaFCO);
                                this.EnqueueTask(NextTask);
                                NextTask = NextTask.ExDstFcos().FirstOrDefault();
                            }
                        }
                    }
                    h = IconHeight;
                    if (workflow.Count > 0)
                    {
                        w = IconWidth * workflow.Count +
                            TaskPadding * (workflow.Count - 1);
                    }
                    else
                    {
                        w = IconWidth;
                    }
                }
                else if (myobj.Meta.Name == "MetricConstraint")
                {
                    h = 40;
                    w = 40;
                    MetricConstraint_TargetType = myobj.GetStrAttrByNameDisp("TargetType");
                }
            }
            else
            {
                // not a concreter object (maybe in part browser?)
                name = mymetaobj.DisplayedName;
                h    = IconHeight;
                w    = IconWidth;
                if (MetaKind == "MetricConstraint")
                {
                    h = 40;
                    w = 40;
                }
            }

            // to handle color and labelColor settings in GME
            if (!GetColorPreference(out color, "color"))
            {
                color = Color.Black;
            }
            if (!GetColorPreference(out labelColor, "nameColor"))
            {
                labelColor = Color.Black;
            }

            // null them for sure
            // myobj = null;
            mymetaobj = null;
        }
示例#10
0
        /// <summary>
        ///
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="parent"></param>
        /// <param name="metaRef">meta ref of the new object</param>
        /// <param name="roleMetaRef">meta ref of the role (if the parent is a model)</param>
        /// <returns></returns>
        public static T CreateObject <T>(
            ISIS.GME.Common.Interfaces.Container parent,
            int metaRef,
            int roleMetaRef = 0)
            where T : ISIS.GME.Common.Classes.Base, new()
        {
            Contract.Requires(parent != null);

            T result = new T();

            if (parent.Impl is MgaModel)
            {
                MgaModel    model = parent.Impl as MgaModel;
                MgaMetaRole role  = null;
                try
                {
                    // try to use user defined role
                    role = (model.MetaBase as MgaMetaModel).
                           Roles.
                           Cast <MgaMetaRole>().
                           FirstOrDefault(x => x.MetaRef == roleMetaRef);
                }
                catch (Exception ex)
                {
                    StringBuilder sb = new StringBuilder();
                    sb.AppendLine("Role was not found in the container.");
                    sb.AppendLine("Paradigm violation.");
                    sb.AppendFormat("Container type: {0} Requested role: {1}",
                                    parent.Kind,
                                    result.GetType().Name);
                    throw new Exception(sb.ToString(), ex);
                }

                try
                {
                    IMgaFCO fco = model.CreateChildObject(role);
                    result.Impl = fco as IMgaObject;
                    return(result);
                }
                catch (Exception ex)
                {
                    StringBuilder sb = new StringBuilder();
                    sb.AppendLine("New element could not be created.");
                    sb.AppendFormat("Container type: {0} Requested role: {1}",
                                    parent.Kind,
                                    result.GetType().Name);
                    throw new Exception(sb.ToString(), ex);
                }
            }
            else if (parent.Impl is MgaFolder)
            {
                try
                {
                    MgaFolder folder = parent.Impl as MgaFolder;

                    MgaMetaFolder item = folder.MetaFolder.
                                         LegalChildFolders.
                                         Cast <MgaMetaFolder>().
                                         FirstOrDefault(x => x.MetaRef == metaRef);

                    if (item != null)
                    {
                        // create new folder
                        MgaFolder f = folder.CreateFolder(item);
                        result.Impl = f as IMgaObject;
                        return(result);
                    }
                    else
                    {
                        MgaMetaFCO itemFco = folder.MetaFolder.
                                             LegalRootObjects.
                                             Cast <MgaMetaFCO>().
                                             FirstOrDefault(x => x.MetaRef == metaRef);

                        if (itemFco != null)
                        {
                            IMgaFCO f = folder.CreateRootObject(itemFco);
                            result.Impl = f as IMgaObject;
                            return(result);
                        }
                    }
                }
                catch (Exception ex)
                {
                    StringBuilder sb = new StringBuilder();
                    sb.AppendLine("New element could not be created in folder.");
                    sb.AppendFormat("Container type: {0} Requested child type: {1}",
                                    parent.Kind,
                                    result.GetType().Name);
                    throw new Exception(sb.ToString(), ex);
                }
            }

            return(null);
        }
示例#11
0
 public MgaMetaRole get_RoleByMeta(MgaModel parent, MgaMetaFCO p_kind, objtype_enum objtype, MgaMetaRole p_role, MgaMetaAspect aspect)
 {
     return(delegate_.RoleByMeta[parent, p_kind, objtype, p_role, aspect]);
 }
示例#12
0
 public MgaMetaRole GetRoleByMetaDisp(MgaModel parent, MgaMetaFCO p_kind, objtype_enum objtype, MgaMetaRole p_role, MgaMetaAspect aspect)
 {
     return(delegate_.GetRoleByMetaDisp(parent, p_kind, objtype, p_role, aspect));
 }