Bug 188837 Modify the datetime type dimension's level in cube will lead NPE when show and hide level in crosstab[1102]
Description: Modify the datetime type dimension's level in cube will lead NPE when show and hide level in crosstab[1102] Build number: 2.2.0.v20070524-0630 Steps to reproduce: 1, New a cube with a dimension d1: year->quarter->month->week-of-month 2, New a crosstab using the cube and levels 3, Show all the levels in crosstab 4, Modify the d1 to: quarter->month 5, Turn to crosstab and modify the show/hide levels Expected result: The level can be modified without exceptions Actual result: NPE occurs and crosstab can not be deleted Errors log: java.lang.NullPointerException at org.eclipse.birt.report.item.crosstab.internal.ui.editors.action.AddLevelHandleAction.run(AddLevelHandleAction.java:84) at org.eclipse.jface.action.Action.runWithEvent(Action.java:498) at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:545) at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:490) at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:402) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:938) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3673) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3284)
xtab/org.eclipse.birt.report.item.crosstab.ui/src/org/eclipse/birt/report/item/crosstab/internal/ui/editors/action/AddLevelHandleAction.java
{
		public int compare( Object o1, Object o2 )
		{
			LevelHandle handle1 = (LevelHandle)o1; 
			LevelHandle handle2 = (LevelHandle)o2;
			return handle1.getIndex( ) - handle2.getIndex( );
		}
		
	}
	
	private void insertLevelHandle(LevelHandle levelHandle, int pos ) throws SemanticException
	{
		CrosstabReportItemHandle reportHandle = viewHandle.getCrosstab( );
		
		
		ComputedColumn bindingColumn = CrosstabAdaptUtil.createComputedColumn( (ExtendedItemHandle) reportHandle.getModelHandle( ),
				levelHandle );
		ComputedColumnHandle bindingHandle = ((ExtendedItemHandle)reportHandle.getModelHandle( )).addColumnBinding( bindingColumn, false );
		
		LevelViewHandle levelViewHandle = viewHandle.insertLevel(levelHandle,pos );
		CrosstabCellHandle cellHandle = levelViewHandle.getCell( );
		
		DataItemHandle dataHandle = DesignElementFactory.getInstance( )
				.newDataItem( levelHandle.getName( ) );
		dataHandle.setResultSetColumn( bindingHandle.getName( ) );
		cellHandle.addContent( dataHandle );
	}
}