Ignore:
Timestamp:
08/25/11 13:01:47 (14 years ago)
Author:
mcichenski
Message:

schedule viewer for experiment

Location:
gssim_ui/branches/vine/gssimstudio/src/web/ui/flex
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • gssim_ui/branches/vine/gssimstudio/src/web/ui/flex/app/gssim/gssimstudio/editor/GSSimStudio.mxml

    r15 r27  
    1212                                preloader="gssim.gssimstudio.editor.script.preloader.CustomPreloader" 
    1313                                paddingLeft="0" paddingRight="0" 
    14                                 paddingTop="0" paddingBottom="0"> 
     14                                paddingTop="0" paddingBottom="0" xmlns:charts="gssim.gssimstudio.editor.charts.*"> 
    1515         
    1616<fx:Metadata> 
     
    127127</s:SkinnableContainer> 
    128128         
     129        <!-- this is to prevent the style collission when loading this component dynamically --> 
     130        <charts:GanntChart visible="false" includeInLayout="false"/> 
     131         
    129132</vine:VineApplication> 
  • gssim_ui/branches/vine/gssimstudio/src/web/ui/flex/app/gssim/gssimstudio/editor/charts/GanntChart.mxml

    r22 r27  
    77        xmlns:fx="http://ns.adobe.com/mxml/2009"   
    88        width="100%" creationComplete="init()" 
    9         height="100%" xmlns:charts="com.iwobanas.charts.*" xmlns:data="gssim.gssimstudio.editor.charting.data.*" xmlns:charts1="gssim.gssimstudio.editor.charts.*"  
     9        height="100%" xmlns:charts="com.iwobanas.charts.*" xmlns:data="gssim.gssimstudio.editor.charting.data.*" xmlns:charts1="gssim.gssimstudio.editor.charts.*" xmlns:code="http://code.google.com/p/flexlib/"  
    1010> 
    1111         
     
    1717        <fx:Script> 
    1818            <![CDATA[ 
     19                        import flexlib.scheduling.samples.ScheduleData; 
     20                        import flexlib.scheduling.scheduleClasses.ColoredScheduleEntry; 
     21                        import flexlib.scheduling.scheduleClasses.LayoutScrollEvent; 
     22                        import flexlib.scheduling.scheduleClasses.SimpleScheduleEntry; 
     23                        import flexlib.scheduling.util.DateUtil; 
     24                         
    1925                        import gssim.gssimstudio.editor.script.command.SaveToPNGCommand; 
    2026                        import gssim.gssimstudio.editor.script.views.ViewsHelper; 
     
    2430                        import mx.charts.chartClasses.AxisLabelSet; 
    2531                        import mx.collections.ArrayCollection; 
     32                        import mx.collections.IList; 
    2633                        import mx.controls.Alert; 
    2734                        import mx.controls.HScrollBar; 
     
    2936                        import mx.controls.scrollClasses.ScrollBar; 
    3037                        import mx.events.FlexEvent; 
     38                        import mx.events.ListEvent; 
    3139                        import mx.events.ResizeEvent; 
    3240                        import mx.events.ScrollEvent; 
     41                        import mx.events.ScrollEventDirection; 
    3342                        import mx.events.SliderEvent; 
    3443                        import mx.messaging.management.ObjectInstance; 
     
    3847         
    3948                        [Bindable] 
    40                         public var expId : int; 
     49                        private var startDate : Date; 
     50                        [Bindable] 
     51                        private var endDate : Date; 
     52                        [Bindable] 
     53                        private var zoom : Number; 
     54                        [Bindable] 
     55                        private var scheduleViewerWidth : Number = 635; 
     56                        [Bindable] 
     57                        private var scheduleViewerHeight : Number = 4*50; 
     58                        [Bindable] 
     59                        private var dataProvider : IList; 
     60                        [Bindable] 
     61                        private var rowDataProvider : IList= new ArrayCollection(); 
     62                        private var listIndex:Number = 1; 
     63                        private var isVZoomed:Boolean = false; 
     64                        [Bindable] 
     65                        private var vZoom:Number; 
     66                        private var historyLength : int = 2; 
     67                        private var lastPosRowList:Number = 0; 
     68                        private var tempRowDataProvider:IList; 
     69                        private var tempDataProvider:IList; 
     70                        private var reservations:Object = new Object(); 
     71                        private var tasks:Object = new Object(); 
     72                         
     73                         
     74                        [Bindable] 
     75                        public var expId : int = -1; 
    4176                        [Bindable] 
    4277                        public var expName : String; 
     
    4479                        [Bindable] 
    4580                        protected var date : Date = new Date(); 
    46  
    47                         private function formatDate(value:Date, previousValue:Date, axis:DateTimeAxis) : String  
    48                         {       
    49                                 var percent : Number = 1;//_hZoom / 100; 
    50                                 var limit : Number = (hAxis.maximum.getTime() - hAxis.minimum.getTime()) * 0.07; 
    51                                  
    52                                 if (hAxis.maximum.getTime() - value.getTime() > limit) 
    53                                 { 
    54                                         var dateLabel : String = df.format(value); 
    55                                         var dateLabelLongSec : String = dateLabel; 
    56                                         if (value.seconds < 10) 
    57                                         { 
    58                                                 dateLabelLongSec = dateLabel.substring(0, dateLabel.length - 1); 
    59                                                 dateLabelLongSec += "0" + value.seconds; 
    60                                         } 
    61                                         return dateLabelLongSec; 
    62                                 } 
    63                                 else 
    64                                 { 
    65                                         return ""; 
    66                                 } 
    67                         } 
    6881                         
    6982                        private function saveAsPNG() : void 
     
    7689                        protected function initChart() : void 
    7790                        { 
    78                                  
    79                         } 
     91                                initDataProvider(); 
     92                                vZoom = 50; 
     93                                rowsList.selectedIndex = 0; 
     94                                setVerticalScrollPosition(0); 
     95                        } 
     96                         
     97                        /* start of copy */ 
     98                         
     99                        protected function initFake() : void 
     100                        { 
     101                                 
     102                        } 
     103                         
     104                        /* 
     105                        private function setTimeframe():void { 
     106                                startDate = DateUtil.clearTime(new Date((new Date()).getTime() - DateUtil.DAY_IN_MILLISECONDS * historyLength)); 
     107                                endDate = getEndDate(startDate); 
     108                        } 
     109                         
     110                        private function getEndDate(startDate:Date):Date { 
     111                                var duration:Number = DateUtil.DAY_IN_MILLISECONDS * (historyLength + 1); 
     112                                var endDate:Date = new Date(startDate.getTime() + duration); 
     113                                return endDate; 
     114                        } 
     115                        */ 
     116                         
     117                        private function initDataProvider():void { 
     118                                 
     119                                dataProvider = new ArrayCollection(); 
     120                                getRowsData(); 
     121                                scheduleViewer.invalidateDisplayList(); 
     122                                this.validateNow(); 
     123                                rowsList.verticalScrollPosition = lastPosRowList; 
     124                                rowsList.selectedIndex = listIndex; 
     125                                 
     126                        } 
     127                         
     128                        private function randomInt(max:Number):Number { 
     129                                return Math.floor(Math.random() * max); 
     130                        } 
     131                         
     132                        private function getRowsData():void { 
     133                                 
     134                                var data : ArrayCollection = parentApplication.gsSimStudioModel.ganntChartComponents['' + expId].allocationList; 
     135                                 
     136                                startDate = new Date(3000); 
     137                                endDate = new Date(0); 
     138                                 
     139                                tempDataProvider = new ArrayCollection(); 
     140                                tempRowDataProvider = new ArrayCollection(); 
     141                                var resMap : Object = new Object(); 
     142                                 
     143                                for( var i : Number = 0; i < data.length; i++ ) 
     144                                { 
     145                                        if (!resMap.hasOwnProperty(data[i].unitId)) 
     146                                        { 
     147                                                resMap[data[i].unitId] = new ArrayCollection(); 
     148                                                tempRowDataProvider.addItem("Unit " + data[i].unitId); 
     149                                        } 
     150                                         
     151                                        var dummycolor : uint = 0x999999 + randomInt( 0x777777 ); 
     152                                         
     153                                        resMap[data[i].unitId].addItem(createColoredEntry(data[i].taskId, data[i].begin, data[i].end, dummycolor, 1,0,1)); 
     154                                         
     155                                        if (data[i].begin < startDate) startDate = new data[i].begin; 
     156                                        if (data[i].end > endDate) endDate = new data[i].end; 
     157                                } 
     158                                 
     159                                for each (var key : String in resMap) 
     160                                { 
     161                                        tempDataProvider.addItem(resMap[key]); 
     162                                } 
     163                                 
     164                                dataProvider = tempDataProvider; 
     165                                rowDataProvider = tempRowDataProvider; 
     166                                 
     167                                Alert.show("finished! " + startDate + " " + endDate); 
     168                        } 
     169                         
     170                        private function createColoredEntry(i:Number, startTime:Number, endTime:Number, color:uint, levelStart:int, levelCount:int, levelTotal:int):SimpleScheduleEntry { 
     171                                var entry:ColoredScheduleEntry = new ColoredScheduleEntry(); 
     172                                entry.startDate = new Date(startTime);//DateUtil.setTime( new Date(), startTime ); 
     173                                entry.endDate = new Date(endTime);//DateUtil.addTime( DateUtil.copyDate( entry.startDate ), duration ); 
     174                                entry.label = "Reservation " + i; 
     175                                entry.backgroundColor = color; 
     176                                /* 
     177                                entry.levelStart = levelStart; 
     178                                entry.levelCount = levelCount; 
     179                                entry.levelTotal = levelTotal; 
     180                                */ 
     181                                return entry; 
     182                        } 
     183                        /* end of copy */ 
    80184                         
    81185                        protected function init():void 
    82186                        { 
    83                                 parentApplication.addModelUpdatedSingleCallbacks(service.getTasksAllocationsFromDb(expId), initChart); 
     187                                if (expId != -1) 
     188                                        parentApplication.addModelUpdatedSingleCallbacks(service.getTasksAllocationsFromDb(expId), initChart); 
     189                                else 
     190                                        initFake(); 
     191                        } 
     192                         
     193                        private function onScrollTimeline( position : Number ) : void 
     194                        { 
     195                                scheduleViewer.xPosition = position; 
     196                        } 
     197                         
     198                        private function onScrollScheduleViewer( event : ScrollEvent ) : void 
     199                        { 
     200                                if( event.direction == ScrollEventDirection.HORIZONTAL ) 
     201                                { 
     202                                        timeline.xPosition = event.position; 
     203                                } 
     204                        } 
     205                         
     206                        private function scrollList( event : LayoutScrollEvent ) : void 
     207                        { 
     208                                if( event.direction == ScrollEventDirection.VERTICAL ) 
     209                                { 
     210                                        rowsList.verticalScrollPosition = event.position;       
     211                                } 
     212                        } 
     213                         
     214                        protected function rowsList_itemClickHandler(event:ListEvent):void { 
     215                                listIndex = event.rowIndex; 
     216                        } 
     217                         
     218                        private function onZoom(value:Number):void { 
     219                                zoom = value; 
     220                        } 
     221                         
     222                        private function onZoomVertical(value:Number):void { 
     223                                //if(value >= 10){ 
     224                                var verScrollPos:Number = scheduleViewer.verticalScrollPosition; 
     225                                //scheduleViewer.zoomRow(value); 
     226                                var posPix:Number = verScrollPos / scheduleViewer.rowHeight; 
     227                                var posItem:Number = Math.ceil(posPix) * scheduleViewer.rowHeight; 
     228                                 
     229                                 
     230                                //scheduleViewer.navigator.entryLayoutImpl.contentHeight = rowDataProvider.length * value; 
     231                                //scheduleViewer.yPosition =posItem * value; 
     232                                //rowsList.verticalScrollPosition 
     233                                //setVerticalScrollPosition(posItem * value); 
     234                                 
     235                                //if(rowsList.selectedIndex == -1) 
     236                                //      rowsList.selectedIndex = 0; 
     237                                var beforeValue:Number = scheduleViewer.rowHeight; 
     238                                scheduleViewer.rowHeight = value; 
     239                                if (rowsList.selectedIndex == -1) { 
     240                                        rowsList.selectedIndex = 0; 
     241                                        setVerticalScrollPosition(0); 
     242                                } else { 
     243                                        /*if((IList(rowsList.dataProvider).length - (rowsList.selectedIndex+1))*value < rowsList.height){ 
     244                                        //scheduleViewer.yPosition = (rowsList.selectedIndex + (IList(rowsList.dataProvider).length - (rowsList.selectedIndex+1)))* value; 
     245                                        var pos : Number = scheduleViewer.yPosition / value; 
     246                                        scheduleViewer.yPosition = rowsList.selectedIndex * value; 
     247                                        rowsList.verticalScrollPosition = scheduleViewer.yPosition; 
     248                                        }else{*/ 
     249                                        //rowsList.of 
     250                                        isVZoomed = true; 
     251                                        if (beforeValue > value) { 
     252                                                scheduleViewer.yPosition = rowsList.selectedIndex * (value - 1); 
     253                                                 
     254                                                rowsList.validateDisplayList(); 
     255                                        } 
     256                                        scheduleViewer.yPosition = rowsList.selectedIndex * value; 
     257                                        listIndex = rowsList.selectedIndex; 
     258                                        rowsList.verticalScrollPosition = rowsList.selectedIndex; 
     259                                        rowsList.validateDisplayList(); 
     260                                        this.validateNow(); 
     261                                         
     262                                         
     263                                        //} 
     264                                } 
     265                                 
     266                                //scheduleViewer.yOffset = value; 
     267                                //rowsList.rowHeight = value; 
     268                                //var item : EntryLayoutItem = scheduleViewer.navigator.entryLayoutImpl.findLayoutItem( scheduleViewer.selectedItem ); 
     269                                //rowsList.verticalScrollPosition = scheduleViewer.navigator.convertPixelToItemPosition(item.y); 
     270                                //} 
     271                                //else{ 
     272                                //scheduleViewer.zoomRow( 10); 
     273                                //scheduleViewer.yOffset = 10; 
     274                                //rowsList.rowHeight = 10; 
     275                                //rowsList.verticalScrollPosition = lastPosRowList; 
     276                                 
     277                                //} 
     278                        } 
     279                         
     280                        private function setVerticalScrollPosition(value:Number):void { 
     281                                /*var event : ScrollEvent = new ScrollEvent( ScrollEvent.SCROLL ); 
     282                                event.direction = ScrollEventDirection.VERTICAL; 
     283                                event.position = value; 
     284                                event.delta = 0;//scheduleViewer.verticalScrollPosition - value; 
     285                                event.detail = "custom"; 
     286                                //scheduleViewer.verticalScrollPosition = value; 
     287                                scheduleViewer.dispatchEvent( event );*/ 
     288                                 
     289                                var itemScrollEvent:LayoutScrollEvent = new LayoutScrollEvent(LayoutScrollEvent.PIXEL_SCROLL); 
     290                                itemScrollEvent.direction = ScrollEventDirection.VERTICAL; 
     291                                itemScrollEvent.position = value; 
     292                                itemScrollEvent.delta = 0;//scheduleViewer.verticalScrollPosition - value; 
     293                                itemScrollEvent.detail = "custom"; 
     294                                scheduleViewer.dispatchEvent(itemScrollEvent); 
    84295                        } 
    85296                         
     
    116327                        <mx:Label text="{resourceManager.getString('Charts', 'CreatedFor')} {expName} {resourceManager.getString('Charts', 'Day')} {date}" width="100%" styleName="subtitle"/> 
    117328                        <mx:HBox width="100%" height="100%"> 
    118                                 <mx:VBox width="100%" height="100%"> 
    119                                  
    120                                         <!--~~~~~~~~~~ RESOURCE VIEWER ~~~~~~~~~~--> 
    121                                         <mx:AreaChart  
    122                                                 id="resourceViewer" height="100%" width="100%" 
    123                                         paddingRight="5" paddingLeft="5" 
    124                                                 dataProvider="{parentApplication.gsSimStudioModel.resourceChartComponents['' + expId].resourceTimelineList}" 
    125                                     > 
    126                                         <mx:horizontalAxis> 
    127                                             <mx:DateTimeAxis  
    128                                                 id="hAxis"  
    129                                                 dataUnits="seconds"  
    130                                                 alignLabelsToUnits="false"  
    131                                                 labelFunction="formatDate"  
    132                                                 title="{resourceManager.getString('Charts', 'SimulationTime')}" 
    133                                              /> 
    134                                         </mx:horizontalAxis> 
    135                                  
    136                                         <mx:verticalAxis> 
    137                                             <mx:LinearAxis  
    138                                                 id="vAxis"  
    139                                                 baseAtZero="false"  
    140                                                 maximumLabelPrecision="1"  
    141                                                 autoAdjust="false"  
    142                                                 title="{resourceManager.getString('Charts', 'CPU')}" 
    143                                             /> 
    144                                         </mx:verticalAxis> 
    145                                  
    146                                                 <mx:series> 
    147                                             <mx:AreaSeries  
    148                                                                 filterData="false" 
    149                                                 yField="usage"  
    150                                                 xField="timestamp"  
    151                                                 form="step"  
    152                                                 areaFill="{sc3}"  
    153                                             /> 
    154                                         </mx:series> 
    155                                               
    156                                     </mx:AreaChart> 
    157                                     <!--~~~~~~~~~~ END OF RESOURCE VIEWER ~~~~~~~~~~--> 
    158                                      
    159                                 </mx:VBox> 
     329                                <s:VGroup> 
     330                                        <s:VGroup height="{ timeline.height }"> 
     331                                                <mx:Label text="Machines"/> 
     332                                        </s:VGroup> 
     333                                        <mx:List id="rowsList" width="135" height="{ scheduleViewerHeight }" 
     334                                                         dataProvider="{ rowDataProvider }" rowHeight="{ scheduleViewer.rowHeight }" 
     335                                                         verticalAlign="middle" verticalScrollPolicy="off" 
     336                                                         itemClick="rowsList_itemClickHandler(event)" selectable="true"> 
     337                                                 
     338                                                 
     339                                        </mx:List> 
     340                                         
     341                                </s:VGroup> 
     342                                 
     343                                <s:VGroup> 
     344                                        <code:Timeline id="timeline" width="{ scheduleViewerWidth }" borderStyle="none" 
     345                                                                          endDate="{ endDate }" scroll="onScrollTimeline( event.position );" 
     346                                                                          startDate="{ startDate }" zoom="{ zoom }"/> 
     347                                         
     348                                        <code:ScheduleViewer id="scheduleViewer" width="{ scheduleViewerWidth }" 
     349                                                                                        height="{ scheduleViewerHeight }" borderStyle="none" 
     350                                                                                        dataProvider="{ dataProvider }" endDate="{ endDate }" 
     351                                                                                        entryLayout="flexlib.scheduling.scheduleClasses.layout.SimpleLayout" 
     352                                                                                        entryRenderer="flexlib.scheduling.scheduleClasses.renderers.ColoredSolidScheduleEntryRenderer" 
     353                                                                                        horizontalLinesViewer="flexlib.scheduling.samples.AlternatingHorizontalLinesViewer" 
     354                                                                                        horizontalScrollPolicy="off" itemScroll="scrollList( event )" 
     355                                                                                        pixelScroll="onScrollScheduleViewer( event )" 
     356                                                                                        pixelScrollEnabled="false" startDate="{ startDate }" 
     357                                                                                        verticalLinesViewer="flexlib.scheduling.samples.SolidVerticalLinesViewer" 
     358                                                                                        zoom="{ zoom }" /> <!--currentStateChange="viewerComplete(event)" click="onClickEntry(event)"/>--> 
     359                                        <s:HGroup width="{ scheduleViewerWidth }"> 
     360                                                <s:Group> 
     361                                                        <s:Rect width="100%" height="100%"> 
     362                                                                <s:stroke> 
     363                                                                        <s:SolidColorStroke color="0x999999" weight="1"/> 
     364                                                                </s:stroke> 
     365                                                        </s:Rect> 
     366                                                        <!-- 
     367                                                        <s:HGroup left="10" top="10" right="10" bottom="10"> 
     368                                                                 
     369                                                                <s:Label text="set number of hosts for page:" top="5"/> 
     370                                                                <s:NumericStepper id="hostsOnPage" minimum="1" maximum="50" value="{ hostsOnPageVal }"/> 
     371                                                                <s:Button id="setHostsOnPage" click="setHostsOnPage_clickHandler(event)" label="Set"/> 
     372                                                                <s:Rect width="50" height="1"/> 
     373                                                                <s:Label text="page number:" top="5"/> 
     374                                                                <s:NumericStepper id="pageStepper" value="{ pageNumber }" minimum="1" 
     375                                                                                                  change="changePage(event)"/> 
     376                                                        </s:HGroup> 
     377                                                        --> 
     378                                                         
     379                                                </s:Group> 
     380                                                <s:HGroup width="100%"> 
     381                                                        <s:Label text="Zoom:" top="5"/> 
     382                                                        <s:HSlider width="100%" id="zoomSlider" change="onZoom( zoomSlider.value );" liveDragging="true" 
     383                                                                           maximum="1000" minimum="1" snapInterval="1" value="{ zoom }"/> 
     384                                                </s:HGroup> 
     385                                        </s:HGroup> 
     386                                        <s:Group> 
     387                                                <s:Rect width="100%" height="100%"> 
     388                                                        <s:stroke> 
     389                                                                <s:SolidColorStroke color="0x999999" weight="1"/> 
     390                                                        </s:stroke> 
     391                                                </s:Rect> 
     392                                                <!-- 
     393                                                <s:HGroup width="{ scheduleViewerWidth }" left="10" top="10" right="10" bottom="10"> 
     394                                                         
     395                                                        <s:Label text="Goto:" top="5"/> 
     396                                                        <s:Button label="Now" click="gotoNow();"/> 
     397                                                        <s:Button label="Selected" click="gotoSelectedEntry();"/> 
     398                                                        <s:Rect width="100%"/> 
     399                                                        <s:Button label="Matrix" click="openMatrix()"/> 
     400                                                        <s:Label text="History (days):" top="5"/> 
     401                                                        <s:TextInput id="srcHistory" width="25" text="2"/> 
     402                                                        <s:Button label="Apply" 
     403                                                                          click="historyLength = int(srcHistory.text); onReservationsReady();"/> 
     404                                                </s:HGroup> 
     405                                                --> 
     406                                        </s:Group> 
     407                                        <s:Group> 
     408                                                <s:Rect width="100%" height="100%"> 
     409                                                        <s:stroke> 
     410                                                                <s:SolidColorStroke color="0x999999" weight="1"/> 
     411                                                        </s:stroke> 
     412                                                </s:Rect> 
     413                                                <!-- 
     414                                                <s:HGroup width="{ scheduleViewerWidth }" left="10" top="10" right="10" bottom="10"> 
     415                                                        <s:Label text="Show:" top="15"/> 
     416                                                         
     417                                                        <s:RadioButton id="onlyJob" label="Only Reservations" groupName="groupByType" selected="true" 
     418                                                                                   value="onlyJob"/> 
     419                                                        <s:RadioButton id="onlyTask" label="Only Tasks" groupName="groupByType" value="onlyTask"/> 
     420                                                        <s:RadioButton id="both" label="Reservations and Tasks" groupName="groupByType" 
     421                                                                                   value="both"/> 
     422                                                        <s:Rect width="33%" height="1"/> 
     423                                                        <s:Label text="Group by:" top="5"/> 
     424                                                         
     425                                                        <s:RadioButton id="Job" label="Job" groupName="groupByRBG" selected="true" value="Job"/> 
     426                                                        <s:RadioButton id="Task" label="Task" groupName="groupByRBG" value="Task"/> 
     427                                                        <s:RadioButton id="ProcessGroup" label="Process Group" groupName="groupByRBG" 
     428                                                                                   value="ProcessGroup"/> 
     429                                                </s:HGroup> 
     430                                                --> 
     431                                        </s:Group> 
     432                                         
     433                                </s:VGroup> 
     434                                <s:VGroup width="60" height="100%"> 
     435                                        <mx:Spacer height="{ timeline.height + (scheduleViewer.height - vZoomSlider.height) / 4 }"/> 
     436                                        <mx:Label text="V Zoom"/> 
     437                                        <mx:VSlider id="vZoomSlider" change="onZoomVertical(vZoomSlider.value);" 
     438                                                                liveDragging="true" maximum="{scheduleViewerHeight}" minimum="10" snapInterval="2" 
     439                                                                value="{ vZoom }"/> 
     440                                         
     441                                         
     442                                </s:VGroup> 
    160443                        </mx:HBox> 
    161444                </mx:VBox> 
  • gssim_ui/branches/vine/gssimstudio/src/web/ui/flex/app/gssim/gssimstudio/editor/gssim/editors/archive/ExperimentStatisticsWindow.mxml

    r22 r27  
    4242                        //viewer.addEventListener("configurationLoaded", configurationLoadedEventHandler); 
    4343                        viewer.expId = i; 
    44                         viewer.expName = experiment.name; 
     44                        viewer.expName = (experiment != null ? experiment.name : ""); 
    4545                        viewer.service = new VineRemoteObjectProxy(parentApplication.service, i); 
    4646                        resourceChart.addChild(viewer); 
     
    4949                        var gannt : GanntChart = new GanntChart(); 
    5050                        gannt.expId = i; 
    51                         gannt.expName = experiment.name; 
     51                        gannt.expName = (experiment != null ? experiment.name : ""); 
    5252                        gannt.service = new VineRemoteObjectProxy(parentApplication.service, i); 
    5353                        ganntChart.addChild(gannt); 
     
    5757                { 
    5858                        //resourceChart.getChildAt(0).removeEventListener("configurationLoaded", configurationLoadedEventHandler); 
    59                          
    60                         properties.loadFromHashmap(parentApplication.gsSimStudioModel.resourceChartComponents['' + experiment.PK].experimentConfiguration); 
     59                        if (experiment != null) 
     60                                if (parentApplication.gsSimStudioModel.resourceChartComponents['' + experiment.PK] != null) 
     61                                        properties.loadFromHashmap(parentApplication.gsSimStudioModel.resourceChartComponents['' + experiment.PK].experimentConfiguration); 
    6162                         
    6263                } 
Note: See TracChangeset for help on using the changeset viewer.