public virtual ShutdownMethod getShutdownMethod()
        {
            ParsedDescription p = parseDescription();

            if (p.ShutdownType.HasValue)
            {
                switch (parseDescription().ShutdownType.Value)
                {
                case ParsedDescription.ShutdownTypeEnum.SaveState:
                    return(new SaveStateMethod());

                case ParsedDescription.ShutdownTypeEnum.ACPIShutdown:
                    return(new ServiceAwareACPIShutdownMethod(this));

                case ParsedDescription.ShutdownTypeEnum.HardOff:
                    return(new HardOffMethod());

                default:
                    throw new InvalidOperationException("ShutdownMethod could not be matched");
                }
            }
            else
            {
                return(DEFAULT_SHUTDOWNMETHOD);
            }
        }
        public virtual bool getAutoBoot()
        {
            ParsedDescription p = parseDescription();

            if (p.Autostart.HasValue)
            {
                return(p.Autostart.Value);
            }
            else
            {
                return(DEFAULT_AUTOBOOT);
            }
        }
        public virtual int getACPIShutdownTimeoutMilliSeconds()
        {
            ParsedDescription p = parseDescription();

            if (p.ACPIShutdownTimeout.HasValue)
            {
                return(p.ACPIShutdownTimeout.Value);
            }
            else
            {
                return(DEFAULT_ACPI_SHUTDOWN_TIMEOUT);
            }
        }
 private ParsedDescription parseDescription()
 {
     try {
         return(ParsedDescription.Parse(_proxy.getDescription()));
     }
     catch (InvalidDataException) {
         //_log.TraceEvent(TraceEventType.Verbose, (int)VirtualBoxService.Logging.MachineControllerEventIds.DescriptionNotParsable, "Description could not be parsed: {0} \n\nUsing Defaults.", ida.ToString());
         return(new ParsedDescription());
     }
     catch (Exception ex) {
         _log.TraceEvent(TraceEventType.Verbose, (int)VirtualBoxService.Logging.MachineControllerEventIds.DescriptionNotParsable, "Description could not be parsed: {0} \n\nUsing Defaults.", ex.ToString());
         return(new ParsedDescription());
     }
 }
        public static ParsedDescription Parse(string rawDescription)
        {
            Regex virtualboxServiceTagRE = new Regex(VIRTUAL_BOX_SERVICE_OPEN_TAG + @"(?<json>[\w\s{}\[\]:,""]+)" + VIRTUAL_BOX_SERVICE_CLOSING_TAG);

            if (virtualboxServiceTagRE.IsMatch(rawDescription))
            {
                //VirtualBoxService-Tag found --> Parse JSON and set Values
                Match  virtualBoxServiceTag = virtualboxServiceTagRE.Match(rawDescription);
                string json = virtualBoxServiceTag.Groups["json"].Value;

                JSONRepresentation parsed = JSONHelper.Deserialize <JSONRepresentation>(json);

                parsed.Description = rawDescription.Substring(0, virtualBoxServiceTag.Index);
                return(parsed);
            }
            else
            {
                //Service-Tag not found -> no Autostart, etc
                ParsedDescription d = new ParsedDescription();
                d.Autostart = false;
                return(d);
            }
        }
        public virtual string getRealDescription()
        {
            ParsedDescription p = parseDescription();

            return(p.Description);
        }