Skip to content

Commit

Permalink
Refactored code.
Browse files Browse the repository at this point in the history
  • Loading branch information
ning.zhang authored and dgao committed Feb 28, 2013
1 parent fe0b64a commit 66a7e65
Show file tree
Hide file tree
Showing 4 changed files with 142 additions and 19 deletions.
Expand Up @@ -2145,8 +2145,10 @@ protected static boolean isHandleValid( DesignElementHandle handle )
if ( handle instanceof DataSetHandle )
{
IExtendedDataXtabAdapter adapter = ExtendedDataXtabAdapterHelper.getInstance( ).getAdapter( );
boolean needsDataSource = adapter == null ? true : adapter.needsDataSource( (DataSetHandle) handle );

if ( ( !( handle instanceof JointDataSetHandle || handle instanceof DerivedDataSetHandle || (adapter != null ? !adapter.hasDataSource( handle ) : false) ) && ( (DataSetHandle) handle ).getDataSource( ) == null )
if ( ( !( handle instanceof JointDataSetHandle || handle instanceof DerivedDataSetHandle || !needsDataSource )
&& ( (DataSetHandle) handle ).getDataSource( ) == null )
|| !DataSetUIUtil.hasMetaData( (DataSetHandle) handle ) )
{
return false;
Expand Down
Expand Up @@ -11,21 +11,71 @@

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

import org.eclipse.birt.report.model.api.ReportElementHandle;
import org.eclipse.birt.report.model.api.ReportItemHandle;


/**
* The extended data adapter for extended report item
*/
public interface IExtendedDataXtabAdapter
{
public boolean isExtendedDataColumn(Object element);
/**
* Checks whether the data item is a child of the extended data.
* @param parent the extended data
* @param child the extended data item
* @return true if contains, false if not
*/
public boolean contains(ReportElementHandle parent, ReportElementHandle child);

public boolean setExtendedData(ReportItemHandle element, Object object);
/**
* Gets the extended data from the report item.
* @param element the report item
* @return the extended data
*/
public ReportElementHandle getExtendedData(ReportItemHandle element);

/**
* Gets the name of the extended data from the report item.
* @param element the report item
* @return the name of the extended data
*/
public String getExtendedDataName(ReportItemHandle element);

public boolean contains(Object parent, Object child);
/**
* Gets instances of supported data types of the extended data.
* @param element the data item
* @param parent the instance of the given parent type
* @return instances of the supported data types
*/
public ReportElementHandle[] getSupportedTypes(ReportElementHandle element, ReportElementHandle parent);

/**
* Checks whether this element needs a data source or not.
* @param element the element to be checked
* @return true if needs, or false if not
*/
public boolean needsDataSource(ReportElementHandle element);

/**
* Checks whether this is an extended data item.
* @param element the element to be checked
* @return true if it is, or false if not
*/
public boolean isExtendedDataItem(ReportElementHandle element);

public Object[] getSupportedTypes(Object element, Object parent);
/**
* Resolves and returns the extended data by the given element if possible.
* @param element the element to be resolved
* @return the extended data
*/
public ReportElementHandle resolveExtendedData(ReportElementHandle element);

public boolean hasDataSource(Object element);
/**
* Sets the extended data to the report item.
* @param target the report item
* @param element the extended data
* @return true if succeeded, of false if not
*/
public boolean setExtendedData(ReportItemHandle target, ReportElementHandle element);

}
Expand Up @@ -11,22 +11,31 @@

package org.eclipse.birt.report.item.crosstab.internal.ui.dnd;

import org.eclipse.birt.report.designer.core.DesignerConstants;
import org.eclipse.birt.report.designer.internal.ui.dnd.DNDLocation;
import org.eclipse.birt.report.designer.internal.ui.dnd.DNDService;
import org.eclipse.birt.report.designer.internal.ui.dnd.IDropAdapter;
import org.eclipse.birt.report.designer.internal.ui.extension.ExtendedDataXtabAdapterHelper;
import org.eclipse.birt.report.designer.internal.ui.extension.IExtendedDataXtabAdapter;
import org.eclipse.birt.report.designer.util.IVirtualValidator;
import org.eclipse.birt.report.item.crosstab.core.ICrosstabConstants;
import org.eclipse.birt.report.item.crosstab.core.de.CrosstabCellHandle;
import org.eclipse.birt.report.item.crosstab.core.de.CrosstabReportItemHandle;
import org.eclipse.birt.report.item.crosstab.core.de.DimensionViewHandle;
import org.eclipse.birt.report.item.crosstab.core.util.CrosstabUtil;
import org.eclipse.birt.report.item.crosstab.internal.ui.AggregationCellProviderWrapper;
import org.eclipse.birt.report.item.crosstab.internal.ui.editors.model.CrosstabCellAdapter;
import org.eclipse.birt.report.item.crosstab.internal.ui.editors.model.VirtualCrosstabCellAdapter;
import org.eclipse.birt.report.item.crosstab.ui.extension.AggregationCellViewAdapter;
import org.eclipse.birt.report.item.crosstab.ui.i18n.Messages;
import org.eclipse.birt.report.model.api.CommandStack;
import org.eclipse.birt.report.model.api.ReportElementHandle;
import org.eclipse.birt.report.model.api.ReportItemHandle;
import org.eclipse.birt.report.model.api.olap.CubeHandle;
import org.eclipse.birt.report.model.api.olap.DimensionHandle;
import org.eclipse.birt.report.model.api.olap.MeasureHandle;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.requests.CreateRequest;

public class ExtendedDataColumnXtabDropAdapter implements IDropAdapter
{
Expand All @@ -35,7 +44,8 @@ public class ExtendedDataColumnXtabDropAdapter implements IDropAdapter
public int canDrop( Object transfer, Object target, int operation,
DNDLocation location )
{
if (adapter == null || !adapter.isExtendedDataColumn( transfer ))
if ( !(transfer instanceof ReportElementHandle)
|| adapter == null || !adapter.isExtendedDataItem( (ReportElementHandle) transfer ))
{
return DNDService.LOGIC_UNKNOW;
}
Expand All @@ -61,28 +71,82 @@ public boolean performDrop( Object transfer, Object target, int operation,
EditPart targetPart = (EditPart) target;

CrosstabReportItemHandle crosstab = getCrosstab( targetPart );
if ( crosstab != null )

if (crosstab == null)
{
if(!adapter.getExtendedDataName( (ReportItemHandle) crosstab.getModelHandle( ) )
.equals( ((ReportElementHandle) transfer).getContainer( ).getContainer( ).getName( ) ))
return false;
}

CommandStack cmdStack = crosstab.getModuleHandle( ).getCommandStack( );
cmdStack.startTrans( Messages.getFormattedString( "ExtendedDataColumnXtabDropAdapter.trans.add", //$NON-NLS-1$
new String[]{ ((ReportElementHandle) transfer).getName( )} ) );

ReportElementHandle extendedData = adapter.getExtendedData( (ReportItemHandle) crosstab.getModelHandle( ) );

if(extendedData == null || !extendedData.equals( adapter.resolveExtendedData( (ReportElementHandle) transfer)))
{
if(! adapter.setExtendedData( (ReportItemHandle)crosstab.getModelHandle( ),
adapter.resolveExtendedData( (ReportElementHandle) transfer)))
{
adapter.setExtendedData( (ReportItemHandle)crosstab.getModelHandle( ),
((ReportElementHandle) transfer).getContainer( ).getContainer( ));
cmdStack.rollback( );
return false;
}
}

Object element = handleValidate(targetPart, transfer);

if (element instanceof MeasureHandle)
{
return new MeasureHandleDropAdapter().performDrop( element, targetPart, operation, location );
CreateRequest request = new CreateRequest( );
request.getExtendedData( ).put( DesignerConstants.KEY_NEWOBJECT, element );
request.setLocation( location.getPoint( ) );

Command command = targetPart.getCommand( request );
if ( command != null && command.canExecute( ) )
{
targetPart.getViewer( )
.getEditDomain( )
.getCommandStack( )
.execute( command );

AggregationCellProviderWrapper providerWrapper = new AggregationCellProviderWrapper( crosstab );
providerWrapper.updateAllAggregationCells( AggregationCellViewAdapter.SWITCH_VIEW_TYPE );

if (crosstab.getDimensionCount( ICrosstabConstants.COLUMN_AXIS_TYPE ) != 0)
{
DimensionViewHandle viewHnadle = crosstab.getDimension( ICrosstabConstants.COLUMN_AXIS_TYPE,
crosstab.getDimensionCount( ICrosstabConstants.COLUMN_AXIS_TYPE ) - 1 );
CrosstabUtil.addLabelToHeader( viewHnadle.getLevel( viewHnadle.getLevelCount( ) - 1 ) );
}

cmdStack.commit( );

return true;
}
}
else if (element instanceof DimensionHandle)
{
return new DimensionHandleDropAdapter().performDrop( element, targetPart, operation, location );
CreateRequest request = new CreateRequest( );
request.getExtendedData( ).put( DesignerConstants.KEY_NEWOBJECT, element );
request.setLocation( location.getPoint( ) );

Command command = targetPart.getCommand( request );
if ( command != null && command.canExecute( ) )
{
targetPart.getViewer( )
.getEditDomain( )
.getCommandStack( )
.execute( command );

AggregationCellProviderWrapper providerWrapper = new AggregationCellProviderWrapper( crosstab );
providerWrapper.updateAllAggregationCells( AggregationCellViewAdapter.SWITCH_VIEW_TYPE );

cmdStack.commit( );

return true;
}
}
}

return false;
}

Expand Down Expand Up @@ -111,9 +175,14 @@ private CrosstabReportItemHandle getCrosstab( EditPart editPart )

private Object handleValidate(EditPart editPart, Object transfer)
{
Object[] supportedTypes = adapter.getSupportedTypes( transfer, getCrosstab( editPart ).getCube( ) );
if (!( transfer instanceof ReportElementHandle ))
{
return null;
}

ReportElementHandle[] supportedTypes = adapter.getSupportedTypes( (ReportElementHandle) transfer, getCrosstab( editPart ).getCube( ) );

for (Object type : supportedTypes)
for (ReportElementHandle type : supportedTypes)
{
if (( (IVirtualValidator) editPart.getModel( ) ).handleValidate( type ))
{
Expand Down
Expand Up @@ -44,6 +44,8 @@ CreateMeasureViewCommand.TransName=Create Measure
MergeCrosstabHeaderCellAction_name=&Merge Header Cells
SplitCrosstabHeadCellAction_name=&Split Header Cell

ExtendedDataColumnXtabDropAdapter.trans.add=Add {0}

###########################################################
# Crosstab EditPart
###########################################################
Expand Down

0 comments on commit 66a7e65

Please sign in to comment.