summaryrefslogtreecommitdiffstats
path: root/odk/examples/DevelopersGuide/Spreadsheet/ExampleDataPilotSource.java
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 16:51:28 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 16:51:28 +0000
commit940b4d1848e8c70ab7642901a68594e8016caffc (patch)
treeeb72f344ee6c3d9b80a7ecc079ea79e9fba8676d /odk/examples/DevelopersGuide/Spreadsheet/ExampleDataPilotSource.java
parentInitial commit. (diff)
downloadlibreoffice-940b4d1848e8c70ab7642901a68594e8016caffc.tar.xz
libreoffice-940b4d1848e8c70ab7642901a68594e8016caffc.zip
Adding upstream version 1:7.0.4.upstream/1%7.0.4upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'odk/examples/DevelopersGuide/Spreadsheet/ExampleDataPilotSource.java')
-rw-r--r--odk/examples/DevelopersGuide/Spreadsheet/ExampleDataPilotSource.java990
1 files changed, 990 insertions, 0 deletions
diff --git a/odk/examples/DevelopersGuide/Spreadsheet/ExampleDataPilotSource.java b/odk/examples/DevelopersGuide/Spreadsheet/ExampleDataPilotSource.java
new file mode 100644
index 000000000..6b10da93c
--- /dev/null
+++ b/odk/examples/DevelopersGuide/Spreadsheet/ExampleDataPilotSource.java
@@ -0,0 +1,990 @@
+/* -*- 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: */