Skip to content

Commit

Permalink
Refactored code. Extended UI actions to handle customized data types.
Browse files Browse the repository at this point in the history
  • Loading branch information
ning.zhang authored and dgao committed Mar 15, 2013
1 parent 76d4752 commit cb04b09
Show file tree
Hide file tree
Showing 9 changed files with 188 additions and 33 deletions.
@@ -0,0 +1,34 @@
/*******************************************************************************
* Copyright (c) 2004, 2012 Actuate Corporation.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Actuate Corporation - initial API and implementation
*******************************************************************************/

package org.eclipse.birt.report.designer.core.model;

import java.util.List;

import org.eclipse.birt.report.model.api.PropertyHandle;
import org.eclipse.birt.report.model.api.SlotHandle;
import org.eclipse.swt.graphics.Image;

/**
* A composition of SlotHandle and PropertyHandle
*/
public interface IMixedHandle
{
public SlotHandle getSlotHandle();

public PropertyHandle getPropertyHandle();

public List getChildren();

public String getDisplayName();

public Image getNodeIcon();
}
Expand Up @@ -20,6 +20,7 @@
import org.eclipse.birt.report.designer.core.commands.DeleteCommand;
import org.eclipse.birt.report.designer.core.commands.PasteCommand;
import org.eclipse.birt.report.designer.core.commands.PasteStructureCommand;
import org.eclipse.birt.report.designer.core.model.IMixedHandle;
import org.eclipse.birt.report.designer.core.model.SessionHandleAdapter;
import org.eclipse.birt.report.designer.core.model.schematic.CellHandleAdapter;
import org.eclipse.birt.report.designer.core.model.schematic.ColumnHandleAdapter;
Expand Down Expand Up @@ -1165,6 +1166,26 @@ else if ( transferData instanceof IElementCopy )
return status.canPaste( ) ? CONTAIN_THIS
: CONTAIN_NO;
}

if (targetObj instanceof IMixedHandle)
{
IMixedHandle mHandle = (IMixedHandle) targetObj;

SlotHandle sHandle = mHandle.getSlotHandle( );
IPasteStatus sStatus = CopyUtil.canPaste( (IElementCopy) transferData,
sHandle.getElementHandle( ),
sHandle.getSlotID( ) );
infoList.addAll( sStatus.getErrors( ) );

PropertyHandle pHandle = mHandle.getPropertyHandle( );
IPasteStatus pStatus = CopyUtil.canPaste( (IElementCopy) transferData,
pHandle.getElementHandle( ),
pHandle.getPropertyDefn( ).getName( ) );
infoList.addAll( pStatus.getErrors( ) );

return sStatus.canPaste( ) || pStatus.canPaste( ) ? CONTAIN_THIS
: CONTAIN_NO;
}

return handleValidateTargetCanContainByContainer( targetObj,
childHandle,
Expand Down Expand Up @@ -1484,6 +1505,10 @@ public static boolean handleValidateTargetCanContainMore( Object targetObj,
// && length <= 1;
return true;
}
if ( targetObj instanceof IMixedHandle)
{
return true;
}
return targetObj instanceof DesignElementHandle
|| targetObj instanceof EmbeddedImageNode;
}
Expand Down Expand Up @@ -1594,5 +1619,7 @@ protected static boolean importCssStyle( CssSharedStyleHandle css,
library.importCssStyles( cssStyleSheet, styleList, theme.getName( ) );
return true;
}



}
Expand Up @@ -11,7 +11,9 @@

package org.eclipse.birt.report.designer.internal.ui.command;

import org.eclipse.birt.report.designer.core.model.IMixedHandle;
import org.eclipse.birt.report.designer.internal.ui.util.Policy;
import org.eclipse.birt.report.designer.internal.ui.views.actions.PasteAction;
import org.eclipse.birt.report.designer.util.DNDUtil;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
Expand Down Expand Up @@ -40,7 +42,22 @@ public Object execute( ExecutionEvent event ) throws ExecutionException
{
System.out.println( "Paste action >> Paste " + getClipBoardContents( ) ); //$NON-NLS-1$
}
DNDUtil.copyHandles( getClipBoardContents( ), selection );
if(selection instanceof IMixedHandle)
{
if( PasteAction.validateCanPaste( ((IMixedHandle)selection).getSlotHandle( ),
getClipBoardContents( ), null ))
{
DNDUtil.copyHandles( getClipBoardContents( ), ((IMixedHandle)selection).getSlotHandle( ) );
}
else
{
DNDUtil.copyHandles( getClipBoardContents( ), ((IMixedHandle)selection).getPropertyHandle( ) );
}
}
else
{
DNDUtil.copyHandles( getClipBoardContents( ), selection );
}
return null;
}

Expand Down
Expand Up @@ -353,7 +353,7 @@ public boolean canInsert( )
{
return getGroupContainer( container ) != null
&& getGroupHandle( container ).getKeyExpr( ) == null
&& ( getGroupContainer( container ).getDataSet( ) == getDataSetHandle( dataSetColumn ) || getGroupContainer( container ).getDataSet( ) == null );
&& ( getGroupContainer( container ).getDataSet( ) == getDataSet( dataSetColumn ) || getGroupContainer( container ).getDataSet( ) == null );
}

/*
Expand Down Expand Up @@ -392,28 +392,23 @@ public void insert( Object object ) throws SemanticException
{
if ( elementHandle instanceof ListingHandle
&& ( dataSetHandle = ( (ListingHandle) elementHandle ).getDataSet( ) ) != null
&& ( dataSetHandle == getDataSetHandle( dataSetColumn ) ) )
&& ( dataSetHandle == getDataSet( dataSetColumn ) ) )
{
break;
}
}
}

if ( dataSetHandle == null
|| dataSetHandle != getDataSetHandle( dataSetColumn ) )
|| dataSetHandle != getDataSet( dataSetColumn ) )
{
setDataSet(getGroupContainer( container ), getDataSetHandle( dataSetColumn ));
setDataSet(getGroupContainer( container ), getDataSet( dataSetColumn ));
}

getGroupHandle( container ).setKeyExpr( DEUtil.getColumnExpression( dataSetColumn.getColumnName( ) ) );

}

protected DataSetHandle getDataSetHandle( ResultSetColumnHandle model )
{
return (DataSetHandle) model.getElementHandle( );
}

protected GroupHandle getGroupHandle( Object target )
{
DesignElementHandle handle = null;
Expand Down Expand Up @@ -713,7 +708,7 @@ protected static DesignElementHandle performInsertDataSetColumn(
*/
DataItemHandle dataHandle = DesignElementFactory.getInstance( )
.newDataItem( null );
DataSetHandle dataSet = (DataSetHandle) model.getElementHandle( );
DataSetHandle dataSet = getDataSet( model );

if ( targetParent instanceof TableHandle )
{
Expand Down Expand Up @@ -770,7 +765,7 @@ protected static DesignElementHandle performInsertDataSetColumn(
}
else if ( DesignChoiceConstants.ANALYSIS_TYPE_ATTRIBUTE.equals( UIUtil.getColumnAnalysis( model ) ) )
{
DataSetHandle dataset = (DataSetHandle) model.getElementHandle( );
DataSetHandle dataset = getDataSet( model );
String str = UIUtil.getAnalysisColumn( model );
String type = ""; //$NON-NLS-1$

Expand Down Expand Up @@ -1545,7 +1540,7 @@ protected static boolean checkSameDataSetInMultiColumns( Object[] array )
{
if ( array[i] instanceof ResultSetColumnHandle )
{
Object currDataSet = ( (ResultSetColumnHandle) array[i] ).getElementHandle( );
Object currDataSet = getDataSet( ( (ResultSetColumnHandle) array[i] ) );
if ( currDataSet == null )
{
return false;
Expand Down Expand Up @@ -1719,7 +1714,7 @@ protected static boolean handleValidateDataSetColumn(
else if ( DesignChoiceConstants.ANALYSIS_TYPE_ATTRIBUTE.equals( UIUtil.getColumnAnalysis( insertObj ) ) )
{
String str = UIUtil.getAnalysisColumn( insertObj );
DataSetHandle dataset = (DataSetHandle) insertObj.getElementHandle( );
DataSetHandle dataset = getDataSet( insertObj );
String type = "";
if ( str != null )
{
Expand Down Expand Up @@ -1817,7 +1812,7 @@ else if ( type != null && !type.equals( "" ) ) //$NON-NLS-1$
&& ( bindingHolder == null || !bindingHolder.getColumnBindings( )
.iterator( )
.hasNext( ) )
|| insertObj.getElementHandle( ).equals( dataSet ))
|| getDataSet( insertObj ).equals( dataSet ))
{
return true;
}
Expand All @@ -1826,7 +1821,7 @@ else if ( type != null && !type.equals( "" ) ) //$NON-NLS-1$
if(ExtendedDataModelUIAdapterHelper.isBoundToExtendedData( bindingRoot ))
{
return getAdapter() != null && getAdapter().getBoundExtendedData( bindingRoot ).equals(
getAdapter().resolveExtendedData( insertObj.getElementHandle( ) ));
getAdapter().resolveExtendedData( getDataSet( insertObj ) ));
}
}
}
Expand Down Expand Up @@ -2042,7 +2037,7 @@ private static void formatDataHandle( DataItemHandle dataHandle,
private static ColumnHintHandle findColumnHintHandle(
ResultSetColumnHandle column )
{
DataSetHandle dataset = (DataSetHandle) column.getElementHandle( );
DataSetHandle dataset = getDataSet( column );
for ( Iterator iter = dataset.columnHintsIterator( ); iter.hasNext( ); )
{
ColumnHintHandle element = (ColumnHintHandle) iter.next( );
Expand Down Expand Up @@ -2215,6 +2210,22 @@ public static IStructuredSelection editPart2Model( List selection )
return new StructuredSelection( resultList );
}

private static DataSetHandle getDataSet(ResultSetColumnHandle column)
{
DataSetHandle dataSet;

if(getAdapter() != null && getAdapter().getDataSet( column ) != null)
{
dataSet = getAdapter().getDataSet( column );
}
else
{
dataSet = (DataSetHandle) column.getElementHandle( );
}

return dataSet;
}

private static void setDataSet(ReportItemHandle target, DataSetHandle dataSet) throws SemanticException
{
if (getAdapter() != null && getAdapter().resolveExtendedData( dataSet ) != null)
Expand Down
Expand Up @@ -88,6 +88,13 @@ public interface IExtendedDataModelUIAdapter
*/
public ReportElementHandle findExtendedDataByName(String name);

/**
* Gets the data set element of the column.
* @param column the result set column
* @return the data set handle resolved by the result set column, or null if cannot
*/
public DataSetHandle getDataSet( ResultSetColumnHandle column );

/**
* Gets the data set instance of the extended data.
* @param element the extended data
Expand Down
Expand Up @@ -62,8 +62,10 @@
import org.eclipse.birt.report.designer.internal.ui.editors.schematic.editparts.ReportElementEditPart;
import org.eclipse.birt.report.designer.internal.ui.editors.schematic.editparts.TableCellEditPart;
import org.eclipse.birt.report.designer.internal.ui.editors.schematic.editparts.TableEditPart;
import org.eclipse.birt.report.designer.internal.ui.extension.ExtendedDataModelUIAdapterHelper;
import org.eclipse.birt.report.designer.internal.ui.extension.ExtendedElementUIPoint;
import org.eclipse.birt.report.designer.internal.ui.extension.ExtensionPointManager;
import org.eclipse.birt.report.designer.internal.ui.extension.IExtendedDataModelUIAdapter;
import org.eclipse.birt.report.designer.internal.ui.extension.experimental.EditpartExtensionManager;
import org.eclipse.birt.report.designer.internal.ui.extension.experimental.PaletteEntryExtension;
import org.eclipse.birt.report.designer.internal.ui.util.bidi.BidiUIUtils;
Expand Down Expand Up @@ -1755,7 +1757,7 @@ public static String getProjectFolder( )
*/
public static String getColumnDisplayName( ResultSetColumnHandle column )
{
DataSetHandle dataset = (DataSetHandle) column.getElementHandle( );
DataSetHandle dataset = getDataSet(column);
for ( Iterator iter = dataset.getPropertyHandle( DataSetHandle.COLUMN_HINTS_PROP )
.iterator( ); iter.hasNext( ); )
{
Expand Down Expand Up @@ -1785,7 +1787,7 @@ public static String getColumnDisplayName( ResultSetColumnHandle column )
*/
public static String getColumnDisplayNameKey( ResultSetColumnHandle column )
{
DataSetHandle dataset = (DataSetHandle) column.getElementHandle( );
DataSetHandle dataset = getDataSet( column );
for ( Iterator iter = dataset.getPropertyHandle( DataSetHandle.COLUMN_HINTS_PROP )
.iterator( ); iter.hasNext( ); )
{
Expand All @@ -1801,7 +1803,7 @@ public static String getColumnDisplayNameKey( ResultSetColumnHandle column )

public static boolean isWordWrap( ResultSetColumnHandle column )
{
DataSetHandle dataset = (DataSetHandle) column.getElementHandle( );
DataSetHandle dataset = getDataSet( column );
for ( Iterator iter = dataset.getPropertyHandle( DataSetHandle.COLUMN_HINTS_PROP )
.iterator( ); iter.hasNext( ); )
{
Expand All @@ -1817,7 +1819,7 @@ public static boolean isWordWrap( ResultSetColumnHandle column )

public static String getClolumnHandleAlignment( ResultSetColumnHandle column )
{
DataSetHandle dataset = (DataSetHandle) column.getElementHandle( );
DataSetHandle dataset = getDataSet( column );
for ( Iterator iter = dataset.getPropertyHandle( DataSetHandle.COLUMN_HINTS_PROP )
.iterator( ); iter.hasNext( ); )
{
Expand All @@ -1833,7 +1835,7 @@ public static String getClolumnHandleAlignment( ResultSetColumnHandle column )

public static String getClolumnHandleHelpText( ResultSetColumnHandle column )
{
DataSetHandle dataset = (DataSetHandle) column.getElementHandle( );
DataSetHandle dataset = getDataSet(column );
for ( Iterator iter = dataset.getPropertyHandle( DataSetHandle.COLUMN_HINTS_PROP )
.iterator( ); iter.hasNext( ); )
{
Expand All @@ -1855,7 +1857,7 @@ public static String getClolumnHandleHelpText( ResultSetColumnHandle column )
*/
public static String getColumnAnalysis( ResultSetColumnHandle column )
{
DataSetHandle dataset = (DataSetHandle) column.getElementHandle( );
DataSetHandle dataset = getDataSet( column );
for ( Iterator iter = dataset.columnHintsIterator( ); iter.hasNext( ); )
{
ColumnHintHandle element = (ColumnHintHandle) iter.next( );
Expand All @@ -1876,7 +1878,7 @@ public static String getColumnAnalysis( ResultSetColumnHandle column )
*/
public static String getAnalysisColumn( ResultSetColumnHandle column )
{
DataSetHandle dataset = (DataSetHandle) column.getElementHandle( );
DataSetHandle dataset = getDataSet( column );
for ( Iterator iter = dataset.getPropertyHandle( DataSetHandle.COLUMN_HINTS_PROP )
.iterator( ); iter.hasNext( ); )
{
Expand All @@ -1898,7 +1900,7 @@ public static String getAnalysisColumn( ResultSetColumnHandle column )
*/
public static ActionHandle getColumnAction( ResultSetColumnHandle column )
{
DataSetHandle dataset = (DataSetHandle) column.getElementHandle( );
DataSetHandle dataset = getDataSet( column);
for ( Iterator iter = dataset.getPropertyHandle( DataSetHandle.COLUMN_HINTS_PROP )
.iterator( ); iter.hasNext( ); )
{
Expand Down Expand Up @@ -3154,4 +3156,22 @@ public static String stripMnemonic( String string )
} while ( index < length );
return string;
}

private static DataSetHandle getDataSet(ResultSetColumnHandle column)
{
IExtendedDataModelUIAdapter adapter = ExtendedDataModelUIAdapterHelper.getInstance( ).getAdapter( );

DataSetHandle dataSet;

if(adapter != null && adapter.getDataSet( column ) != null)
{
dataSet = adapter.getDataSet( column );
}
else
{
dataSet = (DataSetHandle) column.getElementHandle( );
}

return dataSet;
}
}

0 comments on commit cb04b09

Please sign in to comment.