Files
loongoffice/odk/examples/DevelopersGuide/Spreadsheet/ExampleDataPilotSource.java
Stephan Bergmann d119e3a986 Adapt odk/examples to incompatibly changed (unpublished) API
...changed with f88f6bcfce233c336c9025d466c5c2fb0b671de3 "Resolves: tdf#35247
introduce a locale independent numeric field filter".

Makes the example at least compile again.  No idea whether any of the values
reported by getLocaleIndependentElementNames would actually need to be different
from those reported by getElementNames for this exampel.

Change-Id: I115096477b28a4ceea398cbbb473a707141d05aa
2017-01-26 16:26:57 +01:00

991 lines
33 KiB
Java

/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
import com.sun.star.sheet.DataPilotFieldFilter;
/*************************************************************************
*
* The Contents of this file are made available subject to the terms of
* the BSD license.
*
* Copyright 2000, 2010 Oracle and/or its affiliates.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of Sun Microsystems, Inc. nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*************************************************************************/
// Example DataPilot source component
// helper class to hold the settings
class ExampleSettings
{
public static final int nDimensionCount = 6;
public static final int nValueDimension = 4;
public static final int nDataDimension = 5;
public static final String [] aDimensionNames = {
"ones", "tens", "hundreds", "thousands", "value", "" };
public static final String getMemberName( int nMember )
{
return String.valueOf( nMember );
}
public int nMemberCount = 3;
public java.util.List<Integer> aColDimensions = new java.util.ArrayList<Integer>();
public java.util.List<Integer> aRowDimensions = new java.util.ArrayList<Integer>();
}
// XPropertySetInfo implementation for getPropertySetInfo
class ExamplePropertySetInfo implements com.sun.star.beans.XPropertySetInfo
{
private final com.sun.star.beans.Property[] aProperties;
public ExamplePropertySetInfo( com.sun.star.beans.Property[] aProps )
{
aProperties = aProps;
}
public com.sun.star.beans.Property[] getProperties()
{
return aProperties;
}
public com.sun.star.beans.Property getPropertyByName( String aName )
throws com.sun.star.beans.UnknownPropertyException
{
for ( int i=0; i<aProperties.length; i++ )
if ( aProperties[i].Name.equals( aName ) )
return aProperties[i];
throw new com.sun.star.beans.UnknownPropertyException();
}
public boolean hasPropertyByName( String aName )
{
for ( int i=0; i<aProperties.length; i++ )
if ( aProperties[i].Name.equals( aName ) )
return true;
return false;
}
}
// implementation of com.sun.star.sheet.DataPilotSourceMember
class ExampleMember implements com.sun.star.container.XNamed,
com.sun.star.beans.XPropertySet
{
private final int nMember;
public ExampleMember( int nMbr )
{
nMember = nMbr;
}
// XNamed
public String getName()
{
return ExampleSettings.getMemberName( nMember );
}
public void setName( String aName )
{
// ignored
}
// XPropertySet
public com.sun.star.beans.XPropertySetInfo getPropertySetInfo()
{
return new ExamplePropertySetInfo( new com.sun.star.beans.Property[] {
new com.sun.star.beans.Property( "IsVisible", -1,
new com.sun.star.uno.Type( Boolean.class ), (short) 0),
new com.sun.star.beans.Property( "ShowDetails", -1,
new com.sun.star.uno.Type( Boolean.class ), (short) 0) });
}
public void setPropertyValue( String aPropertyName, Object aValue )
throws com.sun.star.beans.UnknownPropertyException
{
if ( aPropertyName.equals( "IsVisible" ) ||
aPropertyName.equals( "ShowDetails" ) )
{
// ignored
}
else
throw new com.sun.star.beans.UnknownPropertyException();
}
public Object getPropertyValue( String aPropertyName )
throws com.sun.star.beans.UnknownPropertyException
{
if ( aPropertyName.equals( "IsVisible" ) ||
aPropertyName.equals( "ShowDetails" ) )
{
return Boolean.TRUE; // always true
}
else
throw new com.sun.star.beans.UnknownPropertyException();
}
public void addPropertyChangeListener(
String aPropertyName, com.sun.star.beans.XPropertyChangeListener xListener)
{
}
public void removePropertyChangeListener(
String aPropertyName, com.sun.star.beans.XPropertyChangeListener aListener)
{
}
public void addVetoableChangeListener(
String PropertyName, com.sun.star.beans.XVetoableChangeListener aListener)
{
}
public void removeVetoableChangeListener(
String PropertyName, com.sun.star.beans.XVetoableChangeListener aListener)
{
}
}
// implementation of com.sun.star.sheet.DataPilotSourceMembers
class ExampleMembers implements com.sun.star.sheet.XMembersAccess
{
private final ExampleSettings aSettings;
private ExampleMember[] aMembers;
public ExampleMembers( ExampleSettings aSet )
{
aSettings = aSet;
aMembers = new ExampleMember[ aSettings.nMemberCount ];
}
// XNameAccess
public com.sun.star.uno.Type getElementType()
{
return new com.sun.star.uno.Type( com.sun.star.container.XNamed.class );
}
public boolean hasElements()
{
return true; // always has elements
}
public Object getByName( String aName )
throws com.sun.star.container.NoSuchElementException
{
int nCount = aSettings.nMemberCount;
for ( int i=0; i<nCount; i++ )
if ( aName.equals( ExampleSettings.getMemberName( i ) ) )
{
if ( aMembers[i] == null )
aMembers[i] = new ExampleMember( i );
return aMembers[i];
}
throw new com.sun.star.container.NoSuchElementException();
}
public String[] getElementNames()
{
int nCount = aSettings.nMemberCount;
String [] aNames = new String[ nCount ];
for ( int i=0; i<nCount; i++ )
aNames[i] = ExampleSettings.getMemberName( i );
return aNames;
}
public boolean hasByName( String aName )
{
int nCount = aSettings.nMemberCount;
for ( int i=0; i<nCount; i++ )
if ( aName.equals( ExampleSettings.getMemberName( i ) ) )
return true;
return false;
}
// XMembersAccess
public String[] getLocaleIndependentElementNames()
{
return getElementNames();
}
}
// implementation of com.sun.star.sheet.DataPilotSourceLevel
class ExampleLevel implements
com.sun.star.container.XNamed,
com.sun.star.sheet.XMembersSupplier,
com.sun.star.sheet.XDataPilotMemberResults,
com.sun.star.beans.XPropertySet
{
private final ExampleSettings aSettings;
private final int nDimension;
private ExampleMembers aMembers;
public ExampleLevel( ExampleSettings aSet, int nDim )
{
aSettings = aSet;
nDimension = nDim;
}
// XNamed
public String getName()
{
return ExampleSettings.aDimensionNames[ nDimension ];
}
public void setName( String aName )
{
// ignored
}
// XMembersSupplier
public com.sun.star.sheet.XMembersAccess getMembers()
{
if ( aMembers == null )
aMembers = new ExampleMembers( aSettings );
return aMembers;
}
// XDataPilotMemberResults
public com.sun.star.sheet.MemberResult[] getResults()
{
int nDimensions = 0;
int nPosition = aSettings.aColDimensions.indexOf( Integer.valueOf(nDimension));
if ( nPosition >= 0 )
nDimensions = aSettings.aColDimensions.size();
else
{
nPosition = aSettings.aRowDimensions.indexOf( Integer.valueOf(nDimension));
if ( nPosition >= 0 )
nDimensions = aSettings.aRowDimensions.size();
}
if ( nPosition < 0 )
return new com.sun.star.sheet.MemberResult[0];
int nMembers = aSettings.nMemberCount;
int nRepeat = 1;
int nFill = 1;
for ( int i=0; i<nDimensions; i++ )
{
if ( i < nPosition )
nRepeat *= nMembers;
else if ( i > nPosition )
nFill *= nMembers;
}
int nSize = nRepeat * nMembers * nFill;
com.sun.star.sheet.MemberResult[] aResults =
new com.sun.star.sheet.MemberResult[nSize];
int nResultPos = 0;
for (int nOuter=0; nOuter<nRepeat; nOuter++)
{
for (int nMember=0; nMember<nMembers; nMember++)
{
aResults[nResultPos] = new com.sun.star.sheet.MemberResult();
aResults[nResultPos].Name = ExampleSettings.getMemberName(nMember);
aResults[nResultPos].Caption = aResults[nResultPos].Name;
aResults[nResultPos].Flags =
com.sun.star.sheet.MemberResultFlags.HASMEMBER;
++nResultPos;
for (int nInner=1; nInner<nFill; nInner++)
{
aResults[nResultPos] = new com.sun.star.sheet.MemberResult();
aResults[nResultPos].Flags =
com.sun.star.sheet.MemberResultFlags.CONTINUE;
++nResultPos;
}
}
}
return aResults;
}
// XPropertySet
public com.sun.star.beans.XPropertySetInfo getPropertySetInfo()
{
return new ExamplePropertySetInfo( new com.sun.star.beans.Property[] {
new com.sun.star.beans.Property( "SubTotals", -1,
new com.sun.star.uno.Type(
com.sun.star.sheet.GeneralFunction[].class ),
(short) 0 ),
new com.sun.star.beans.Property( "ShowEmpty", -1,
new com.sun.star.uno.Type( Boolean.class ),
(short) 0 ) } );
}
public void setPropertyValue( String aPropertyName, Object aValue )
throws com.sun.star.beans.UnknownPropertyException
{
if ( aPropertyName.equals( "SubTotals" ) ||
aPropertyName.equals( "ShowEmpty" ) )
{
// ignored
}
else
throw new com.sun.star.beans.UnknownPropertyException();
}
public Object getPropertyValue( String aPropertyName )
throws com.sun.star.beans.UnknownPropertyException
{
if ( aPropertyName.equals( "SubTotals" ) )
return new com.sun.star.sheet.GeneralFunction[0];
else if ( aPropertyName.equals( "ShowEmpty" ) )
return Boolean.TRUE;
else
throw new com.sun.star.beans.UnknownPropertyException();
}
public void addPropertyChangeListener(
String aPropertyName, com.sun.star.beans.XPropertyChangeListener xListener)
{
}
public void removePropertyChangeListener(
String aPropertyName, com.sun.star.beans.XPropertyChangeListener aListener)
{
}
public void addVetoableChangeListener(
String PropertyName, com.sun.star.beans.XVetoableChangeListener aListener)
{
}
public void removeVetoableChangeListener(
String PropertyName, com.sun.star.beans.XVetoableChangeListener aListener)
{
}
}
// implementation of com.sun.star.sheet.DataPilotSourceLevels
class ExampleLevels implements com.sun.star.container.XNameAccess
{
private final ExampleSettings aSettings;
private final int nDimension;
private ExampleLevel aLevel;
public ExampleLevels( ExampleSettings aSet, int nDim )
{
aSettings = aSet;
nDimension = nDim;
}
// XNameAccess
public com.sun.star.uno.Type getElementType()
{
return new com.sun.star.uno.Type( com.sun.star.container.XNamed.class );
}
public boolean hasElements()
{
return true; // always has elements
}
public Object getByName( String aName )
throws com.sun.star.container.NoSuchElementException
{
// there's only one level with the same name as the dimension / hierarchy
if ( aName.equals( ExampleSettings.aDimensionNames[nDimension] ) )
{
if ( aLevel == null )
aLevel = new ExampleLevel( aSettings, nDimension );
return aLevel;
}
throw new com.sun.star.container.NoSuchElementException();
}
public String[] getElementNames()
{
String [] aNames = new String[ 1 ];
aNames[0] = ExampleSettings.aDimensionNames[nDimension];
return aNames;
}
public boolean hasByName( String aName )
{
return aName.equals( ExampleSettings.aDimensionNames[nDimension] );
}
}
// implementation of com.sun.star.sheet.DataPilotSourceHierarchy
class ExampleHierarchy implements com.sun.star.container.XNamed,
com.sun.star.sheet.XLevelsSupplier
{
private final ExampleSettings aSettings;
private final int nDimension;
private ExampleLevels aLevels;
public ExampleHierarchy( ExampleSettings aSet, int nDim )
{
aSettings = aSet;
nDimension = nDim;
}
// XNamed
public String getName()
{
return ExampleSettings.aDimensionNames[ nDimension ];
}
public void setName( String aName )
{
// ignored
}
// XLevelsSupplier
public com.sun.star.container.XNameAccess getLevels()
{
if ( aLevels == null )
aLevels = new ExampleLevels( aSettings, nDimension );
return aLevels;
}
}
// implementation of com.sun.star.sheet.DataPilotSourceHierarchies
class ExampleHierarchies implements com.sun.star.container.XNameAccess
{
private final ExampleSettings aSettings;
private final int nDimension;
private ExampleHierarchy aHierarchy;
public ExampleHierarchies( ExampleSettings aSet, int nDim )
{
aSettings = aSet;
nDimension = nDim;
}
// XNameAccess
public com.sun.star.uno.Type getElementType()
{
return new com.sun.star.uno.Type( com.sun.star.container.XNamed.class );
}
public boolean hasElements()
{
return true; // always has elements
}
public Object getByName( String aName )
throws com.sun.star.container.NoSuchElementException
{
// there's only one hierarchy with the same name as the dimension
if ( aName.equals( ExampleSettings.aDimensionNames[nDimension] ) )
{
if ( aHierarchy == null )
aHierarchy = new ExampleHierarchy( aSettings, nDimension );
return aHierarchy;
}
throw new com.sun.star.container.NoSuchElementException();
}
public String[] getElementNames()
{
String [] aNames = new String[ 1 ];
aNames[0] = ExampleSettings.aDimensionNames[nDimension];
return aNames;
}
public boolean hasByName( String aName )
{
return aName.equals( ExampleSettings.aDimensionNames[nDimension] );
}
}
// implementation of com.sun.star.sheet.DataPilotSourceDimension
class ExampleDimension implements
com.sun.star.container.XNamed,
com.sun.star.sheet.XHierarchiesSupplier,
com.sun.star.util.XCloneable,
com.sun.star.beans.XPropertySet
{
private final ExampleSettings aSettings;
private final int nDimension;
private ExampleHierarchies aHierarchies;
private com.sun.star.sheet.DataPilotFieldOrientation eOrientation;
public ExampleDimension( ExampleSettings aSet, int nDim )
{
aSettings = aSet;
nDimension = nDim;
eOrientation = ( nDim == ExampleSettings.nValueDimension ) ?
com.sun.star.sheet.DataPilotFieldOrientation.DATA :
com.sun.star.sheet.DataPilotFieldOrientation.HIDDEN;
}
// XNamed
public String getName()
{
return ExampleSettings.aDimensionNames[ nDimension ];
}
public void setName( String aName )
{
// ignored
}
// XHierarchiesSupplier
public com.sun.star.container.XNameAccess getHierarchies()
{
if ( aHierarchies == null )
aHierarchies = new ExampleHierarchies( aSettings, nDimension );
return aHierarchies;
}
// XCloneable
public com.sun.star.util.XCloneable createClone()
{
return null; // not supported
}
// XPropertySet
public com.sun.star.beans.XPropertySetInfo getPropertySetInfo()
{
return new ExamplePropertySetInfo( new com.sun.star.beans.Property[] {
new com.sun.star.beans.Property( "Original", -1,
new com.sun.star.uno.Type( com.sun.star.container.XNamed.class),
com.sun.star.beans.PropertyAttribute.READONLY ),
new com.sun.star.beans.Property( "IsDataLayoutDimension", -1,
new com.sun.star.uno.Type( Boolean.class),
com.sun.star.beans.PropertyAttribute.READONLY ),
new com.sun.star.beans.Property( "Orientation", -1,
new com.sun.star.uno.Type(
com.sun.star.sheet.DataPilotFieldOrientation.class), (short) 0),
new com.sun.star.beans.Property( "Position", -1,
new com.sun.star.uno.Type( Integer.class ), (short) 0),
new com.sun.star.beans.Property( "Function", -1,
new com.sun.star.uno.Type(com.sun.star.sheet.GeneralFunction.class),
(short) 0 ),
new com.sun.star.beans.Property( "UsedHierarchy", -1,
new com.sun.star.uno.Type( Integer.class ), (short) 0 ),
new com.sun.star.beans.Property( "Filter", -1,
new com.sun.star.uno.Type(
com.sun.star.sheet.TableFilterField[].class), (short) 0) });
}
public void setPropertyValue( String aPropertyName, Object aValue )
throws com.sun.star.beans.UnknownPropertyException
{
if ( aPropertyName.equals( "Orientation" ) )
{
com.sun.star.sheet.DataPilotFieldOrientation eNewOrient =
(com.sun.star.sheet.DataPilotFieldOrientation) aValue;
if ( nDimension != ExampleSettings.nValueDimension &&
nDimension != ExampleSettings.nDataDimension &&
eNewOrient != com.sun.star.sheet.DataPilotFieldOrientation.DATA )
{
// remove from list for old orientation and add for new one
Integer aDimInt = Integer.valueOf(nDimension);
if ( eOrientation == com.sun.star.sheet.DataPilotFieldOrientation.COLUMN )
aSettings.aColDimensions.remove( aDimInt );
else if ( eOrientation == com.sun.star.sheet.DataPilotFieldOrientation.ROW )
aSettings.aRowDimensions.remove( aDimInt );
if ( eNewOrient == com.sun.star.sheet.DataPilotFieldOrientation.COLUMN )
aSettings.aColDimensions.add( aDimInt );
else if ( eNewOrient == com.sun.star.sheet.DataPilotFieldOrientation.ROW )
aSettings.aRowDimensions.add( aDimInt );
// change orientation
eOrientation = eNewOrient;
}
}
else if ( aPropertyName.equals( "Position" ) )
{
int nNewPos = ((Integer) aValue).intValue();
Integer aDimInt = Integer.valueOf(nDimension);
if ( eOrientation == com.sun.star.sheet.DataPilotFieldOrientation.COLUMN )
{
aSettings.aColDimensions.remove( aDimInt );
aSettings.aColDimensions.add( nNewPos, aDimInt );
}
else if ( eOrientation == com.sun.star.sheet.DataPilotFieldOrientation.ROW )
{
aSettings.aRowDimensions.remove( aDimInt );
aSettings.aRowDimensions.add( nNewPos, aDimInt );
}
}
else if ( aPropertyName.equals( "Function" ) || aPropertyName.equals( "UsedHierarchy" ) ||
aPropertyName.equals( "Filter" ) )
{
// ignored
}
else
throw new com.sun.star.beans.UnknownPropertyException();
}
public Object getPropertyValue( String aPropertyName )
throws com.sun.star.beans.UnknownPropertyException
{
if ( aPropertyName.equals( "Original" ) )
return null;
else if ( aPropertyName.equals( "IsDataLayoutDimension" ) )
return Boolean.valueOf( nDimension == ExampleSettings.nDataDimension );
else if ( aPropertyName.equals( "Orientation" ) )
return eOrientation;
else if ( aPropertyName.equals( "Position" ) )
{
int nPosition;
if ( eOrientation == com.sun.star.sheet.DataPilotFieldOrientation.COLUMN )
nPosition = aSettings.aColDimensions.indexOf( Integer.valueOf(nDimension) );
else if ( eOrientation == com.sun.star.sheet.DataPilotFieldOrientation.ROW )
nPosition = aSettings.aRowDimensions.indexOf( Integer.valueOf(nDimension) );
else
nPosition = nDimension;
return Integer.valueOf( nPosition );
}
else if ( aPropertyName.equals( "Function" ) )
return com.sun.star.sheet.GeneralFunction.SUM;
else if ( aPropertyName.equals( "UsedHierarchy" ) )
return Integer.valueOf(0);
else if ( aPropertyName.equals( "Filter" ) )
return new com.sun.star.sheet.TableFilterField[0];
else
throw new com.sun.star.beans.UnknownPropertyException();
}
public void addPropertyChangeListener(
String aPropertyName, com.sun.star.beans.XPropertyChangeListener xListener)
{
}
public void removePropertyChangeListener(
String aPropertyName, com.sun.star.beans.XPropertyChangeListener aListener)
{
}
public void addVetoableChangeListener(
String PropertyName, com.sun.star.beans.XVetoableChangeListener aListener)
{
}
public void removeVetoableChangeListener(
String PropertyName, com.sun.star.beans.XVetoableChangeListener aListener)
{
}
}
// implementation of com.sun.star.sheet.DataPilotSourceDimensions
class ExampleDimensions implements com.sun.star.container.XNameAccess
{
private final ExampleSettings aSettings;
private ExampleDimension[] aDimensions;
public ExampleDimensions( ExampleSettings aSet )
{
aSettings = aSet;
}
// XNameAccess
public com.sun.star.uno.Type getElementType()
{
return new com.sun.star.uno.Type( com.sun.star.container.XNamed.class );
}
public boolean hasElements()
{
return true; // always has elements
}
public Object getByName( String aName )
throws com.sun.star.container.NoSuchElementException
{
for (int i=0; i<ExampleSettings.nDimensionCount; i++)
if ( aName.equals( ExampleSettings.aDimensionNames[i] ) )
{
if ( aDimensions == null )
aDimensions = new ExampleDimension[ ExampleSettings.nDimensionCount ];
if ( aDimensions[i] == null )
aDimensions[i] = new ExampleDimension( aSettings, i );
return aDimensions[i];
}
throw new com.sun.star.container.NoSuchElementException();
}
public String[] getElementNames()
{
String [] aNames = new String[ ExampleSettings.nDimensionCount ];
for (int i=0; i<ExampleSettings.nDimensionCount; i++)
aNames[ i ] = ExampleSettings.aDimensionNames[i];
return aNames;
}
public boolean hasByName( String aName )
{
for (int i=0; i<ExampleSettings.nDimensionCount; i++)
if ( aName.equals( ExampleSettings.aDimensionNames[i] ) )
return true;
return false;
}
}
// outer class for service implementation
public class ExampleDataPilotSource
{
// implementation of com.sun.star.sheet.DataPilotSource
public static class _ExampleDataPilotSource implements
com.sun.star.sheet.XDimensionsSupplier,
com.sun.star.sheet.XDataPilotResults,
com.sun.star.util.XRefreshable,
com.sun.star.beans.XPropertySet,
com.sun.star.lang.XInitialization,
com.sun.star.lang.XServiceInfo
{
private static final String aServiceName = "com.sun.star.sheet.DataPilotSource";
private static final String aImplName = _ExampleDataPilotSource.class.getName();
private final ExampleSettings aSettings = new ExampleSettings();
private ExampleDimensions aDimensions;
public _ExampleDataPilotSource( com.sun.star.lang.XMultiServiceFactory xFactory )
{
}
// XInitialization
public void initialize( Object[] aArguments )
{
// If the first argument (Source) is a number between 2 and 10,
// use it as member count, otherwise keep the default value.
try
{
if ( aArguments.length >= 1 )
{
String aSource = com.sun.star.uno.AnyConverter.toString(aArguments[0]);
if ( aSource != null && aSource.length() > 0)
{
int nValue = Integer.parseInt( aSource );
if ( nValue >= 2 && nValue <= 10 )
aSettings.nMemberCount = nValue;
}
}
}
catch ( NumberFormatException e )
{
System.out.println( "Error: caught exception in " +
"ExampleDataPilotSource.initialize!\nException Message = "
+ e.getMessage());
e.printStackTrace();
}
catch ( com.sun.star.lang.IllegalArgumentException e )
{
System.out.println( "Error: caught exception in " +
"ExampleDataPilotSource.initialize!\nException Message = "
+ e.getMessage());
e.printStackTrace();
}
}
// XDataPilotResults
public com.sun.star.sheet.DataResult[][] getResults()
{
int[] nDigits = new int[ExampleSettings.nDimensionCount];
int nValue = 1;
for (int i=0; i<ExampleSettings.nDimensionCount; i++)
{
nDigits[i] = nValue;
nValue *= 10;
}
int nMemberCount = aSettings.nMemberCount;
int nRowDimCount = aSettings.aRowDimensions.size();
int nColDimCount = aSettings.aColDimensions.size();
int nRows = 1;
for (int i=0; i<nRowDimCount; i++)
nRows *= nMemberCount;
int nColumns = 1;
for (int i=0; i<nColDimCount; i++)
nColumns *= nMemberCount;
com.sun.star.sheet.DataResult[][] aResults = new com.sun.star.sheet.DataResult[nRows][];
for (int nRow=0; nRow<nRows; nRow++)
{
int nRowVal = nRow;
int nRowResult = 0;
for (int nRowDim=0; nRowDim<nRowDimCount; nRowDim++)
{
int nDim = aSettings.aRowDimensions.get(nRowDimCount-nRowDim-1).intValue();
nRowResult += ( nRowVal % nMemberCount ) * nDigits[nDim];
nRowVal /= nMemberCount;
}
aResults[nRow] = new com.sun.star.sheet.DataResult[nColumns];
for (int nCol=0; nCol<nColumns; nCol++)
{
int nColVal = nCol;
int nResult = nRowResult;
for (int nColDim=0; nColDim<nColDimCount; nColDim++)
{
int nDim = aSettings.aColDimensions.get(nColDimCount-nColDim-1).intValue();
nResult += ( nColVal % nMemberCount ) * nDigits[nDim];
nColVal /= nMemberCount;
}
aResults[nRow][nCol] = new com.sun.star.sheet.DataResult();
aResults[nRow][nCol].Flags = com.sun.star.sheet.DataResultFlags.HASDATA;
aResults[nRow][nCol].Value = nResult;
}
}
return aResults;
}
public double[] getFilteredResults(DataPilotFieldFilter[] aFilters) {
// FIXME
return new double[0];
}
// XDimensionsSupplier
public com.sun.star.container.XNameAccess getDimensions()
{
if ( aDimensions == null )
aDimensions = new ExampleDimensions( aSettings );
return aDimensions;
}
// XPropertySet
public com.sun.star.beans.XPropertySetInfo getPropertySetInfo()
{
return new ExamplePropertySetInfo( new com.sun.star.beans.Property[] {
new com.sun.star.beans.Property( "ColumnGrand", -1,
new com.sun.star.uno.Type( Boolean.class ), (short) 0),
new com.sun.star.beans.Property( "RowGrand", -1,
new com.sun.star.uno.Type( Boolean.class ), (short) 0) });
}
public void setPropertyValue( String aPropertyName, Object aValue )
throws com.sun.star.beans.UnknownPropertyException
{
if ( aPropertyName.equals( "ColumnGrand" ) ||
aPropertyName.equals( "RowGrand" ) )
{
// ignored
}
else
throw new com.sun.star.beans.UnknownPropertyException();
}
public Object getPropertyValue( String aPropertyName )
throws com.sun.star.beans.UnknownPropertyException
{
if ( aPropertyName.equals( "ColumnGrand" ) ||
aPropertyName.equals( "RowGrand" ) )
{
return Boolean.FALSE; // always false
}
else
throw new com.sun.star.beans.UnknownPropertyException();
}
public void addPropertyChangeListener(
String aPropertyName,
com.sun.star.beans.XPropertyChangeListener xListener )
{
}
public void removePropertyChangeListener(
String aPropertyName,
com.sun.star.beans.XPropertyChangeListener aListener )
{
}
public void addVetoableChangeListener(
String PropertyName,
com.sun.star.beans.XVetoableChangeListener aListener )
{
}
public void removeVetoableChangeListener(
String PropertyName,
com.sun.star.beans.XVetoableChangeListener aListener )
{
}
// XRefreshable
public void refresh()
{
}
public void addRefreshListener( com.sun.star.util.XRefreshListener l )
{
}
public void removeRefreshListener( com.sun.star.util.XRefreshListener l )
{
}
// XServiceInfo
public String getImplementationName()
{
return aImplName;
}
public String[] getSupportedServiceNames()
{
String [] aSupportedServices = new String[ 1 ];
aSupportedServices[ 0 ] = aServiceName;
return aSupportedServices;
}
public boolean supportsService( String aService )
{
return aService.equals( aServiceName );
}
}
public static com.sun.star.lang.XSingleServiceFactory __getServiceFactory(
String implName,
com.sun.star.lang.XMultiServiceFactory multiFactory,
com.sun.star.registry.XRegistryKey regKey)
{
com.sun.star.lang.XSingleServiceFactory xSingleServiceFactory = null;
if ( implName.equals(_ExampleDataPilotSource.aImplName) )
xSingleServiceFactory =
com.sun.star.comp.loader.FactoryHelper.getServiceFactory(
_ExampleDataPilotSource.class,
_ExampleDataPilotSource.aServiceName, multiFactory, regKey);
return xSingleServiceFactory;
}
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */