1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // Example DataPilot source component 25 26 // helper class to hold the settings 27 28 class ExampleSettings 29 { 30 static public final int nDimensionCount = 6; 31 static public final int nValueDimension = 4; 32 static public final int nDataDimension = 5; 33 static public final String [] aDimensionNames = { 34 "ones", "tens", "hundreds", "thousands", "value", "" }; 35 36 static public final String getMemberName( int nMember ) 37 { 38 return String.valueOf( nMember ); 39 } 40 41 public int nMemberCount = 3; 42 public java.util.List aColDimensions = new java.util.ArrayList(); 43 public java.util.List aRowDimensions = new java.util.ArrayList(); 44 } 45 46 // XPropertySetInfo implementation for getPropertySetInfo 47 48 class ExamplePropertySetInfo implements com.sun.star.beans.XPropertySetInfo 49 { 50 private com.sun.star.beans.Property[] aProperties; 51 52 public ExamplePropertySetInfo( com.sun.star.beans.Property[] aProps ) 53 { 54 aProperties = aProps; 55 } 56 57 public com.sun.star.beans.Property[] getProperties() 58 { 59 return aProperties; 60 } 61 62 public com.sun.star.beans.Property getPropertyByName( String aName ) 63 throws com.sun.star.beans.UnknownPropertyException 64 { 65 for ( int i=0; i<aProperties.length; i++ ) 66 if ( aProperties[i].Name.equals( aName ) ) 67 return aProperties[i]; 68 throw new com.sun.star.beans.UnknownPropertyException(); 69 } 70 71 public boolean hasPropertyByName( String aName ) 72 { 73 for ( int i=0; i<aProperties.length; i++ ) 74 if ( aProperties[i].Name.equals( aName ) ) 75 return true; 76 return false; 77 } 78 } 79 80 // implementation of com.sun.star.sheet.DataPilotSourceMember 81 82 class ExampleMember implements com.sun.star.container.XNamed, 83 com.sun.star.beans.XPropertySet 84 { 85 private ExampleSettings aSettings; 86 private int nDimension; 87 private int nMember; 88 89 public ExampleMember( ExampleSettings aSet, int nDim, int nMbr ) 90 { 91 aSettings = aSet; 92 nDimension = nDim; 93 nMember = nMbr; 94 } 95 96 // XNamed 97 98 public String getName() 99 { 100 return ExampleSettings.getMemberName( nMember ); 101 } 102 103 public void setName( String aName ) 104 { 105 // ignored 106 } 107 108 // XPropertySet 109 110 public com.sun.star.beans.XPropertySetInfo getPropertySetInfo() 111 { 112 return new ExamplePropertySetInfo( new com.sun.star.beans.Property[] { 113 new com.sun.star.beans.Property( "IsVisible", -1, 114 new com.sun.star.uno.Type( Boolean.class ), (short) 0), 115 new com.sun.star.beans.Property( "ShowDetails", -1, 116 new com.sun.star.uno.Type( Boolean.class ), (short) 0) }); 117 } 118 119 public void setPropertyValue( String aPropertyName, Object aValue ) 120 throws com.sun.star.beans.UnknownPropertyException 121 { 122 if ( aPropertyName.equals( "IsVisible" ) || 123 aPropertyName.equals( "ShowDetails" ) ) 124 { 125 // ignored 126 } 127 else 128 throw new com.sun.star.beans.UnknownPropertyException(); 129 } 130 131 public Object getPropertyValue( String aPropertyName ) 132 throws com.sun.star.beans.UnknownPropertyException 133 { 134 if ( aPropertyName.equals( "IsVisible" ) || 135 aPropertyName.equals( "ShowDetails" ) ) 136 { 137 return new Boolean( true ); // always true 138 } 139 else 140 throw new com.sun.star.beans.UnknownPropertyException(); 141 } 142 143 public void addPropertyChangeListener( 144 String aPropertyName, com.sun.star.beans.XPropertyChangeListener xListener) 145 { 146 } 147 public void removePropertyChangeListener( 148 String aPropertyName, com.sun.star.beans.XPropertyChangeListener aListener) 149 { 150 } 151 public void addVetoableChangeListener( 152 String PropertyName, com.sun.star.beans.XVetoableChangeListener aListener) 153 { 154 } 155 public void removeVetoableChangeListener( 156 String PropertyName, com.sun.star.beans.XVetoableChangeListener aListener) 157 { 158 } 159 } 160 161 // implementation of com.sun.star.sheet.DataPilotSourceMembers 162 163 class ExampleMembers implements com.sun.star.container.XNameAccess 164 { 165 private ExampleSettings aSettings; 166 private int nDimension; 167 private ExampleMember[] aMembers; 168 169 public ExampleMembers( ExampleSettings aSet, int nDim ) 170 { 171 aSettings = aSet; 172 nDimension = nDim; 173 aMembers = new ExampleMember[ aSettings.nMemberCount ]; 174 } 175 176 // XNameAccess 177 178 public com.sun.star.uno.Type getElementType() 179 { 180 return new com.sun.star.uno.Type( com.sun.star.container.XNamed.class ); 181 } 182 183 public boolean hasElements() 184 { 185 return true; // always has elements 186 } 187 188 public Object getByName( String aName ) 189 throws com.sun.star.container.NoSuchElementException 190 { 191 int nCount = aSettings.nMemberCount; 192 for ( int i=0; i<nCount; i++ ) 193 if ( aName.equals( ExampleSettings.getMemberName( i ) ) ) 194 { 195 if ( aMembers[i] == null ) 196 aMembers[i] = new ExampleMember( aSettings, nDimension, i ); 197 return aMembers[i]; 198 } 199 throw new com.sun.star.container.NoSuchElementException(); 200 } 201 202 public String[] getElementNames() 203 { 204 int nCount = aSettings.nMemberCount; 205 String [] aNames = new String[ nCount ]; 206 for ( int i=0; i<nCount; i++ ) 207 aNames[i] = ExampleSettings.getMemberName( i ); 208 return aNames; 209 } 210 211 public boolean hasByName( String aName ) 212 { 213 int nCount = aSettings.nMemberCount; 214 for ( int i=0; i<nCount; i++ ) 215 if ( aName.equals( ExampleSettings.getMemberName( i ) ) ) 216 return true; 217 return false; 218 } 219 } 220 221 // implementation of com.sun.star.sheet.DataPilotSourceLevel 222 223 class ExampleLevel implements 224 com.sun.star.container.XNamed, 225 com.sun.star.sheet.XMembersSupplier, 226 com.sun.star.sheet.XDataPilotMemberResults, 227 com.sun.star.beans.XPropertySet 228 { 229 private ExampleSettings aSettings; 230 private int nDimension; 231 private ExampleMembers aMembers; 232 233 public ExampleLevel( ExampleSettings aSet, int nDim ) 234 { 235 aSettings = aSet; 236 nDimension = nDim; 237 } 238 239 // XNamed 240 241 public String getName() 242 { 243 return ExampleSettings.aDimensionNames[ nDimension ]; 244 } 245 246 public void setName( String aName ) 247 { 248 // ignored 249 } 250 251 // XMembersSupplier 252 253 public com.sun.star.container.XNameAccess getMembers() 254 { 255 if ( aMembers == null ) 256 aMembers = new ExampleMembers( aSettings, nDimension ); 257 return aMembers; 258 } 259 260 // XDataPilotMemberResults 261 262 public com.sun.star.sheet.MemberResult[] getResults() 263 { 264 int nDimensions = 0; 265 int nPosition = aSettings.aColDimensions.indexOf( new Integer(nDimension)); 266 if ( nPosition >= 0 ) 267 nDimensions = aSettings.aColDimensions.size(); 268 else 269 { 270 nPosition = aSettings.aRowDimensions.indexOf( new Integer(nDimension)); 271 if ( nPosition >= 0 ) 272 nDimensions = aSettings.aRowDimensions.size(); 273 } 274 275 if ( nPosition < 0 ) 276 return new com.sun.star.sheet.MemberResult[0]; 277 278 int nMembers = aSettings.nMemberCount; 279 int nRepeat = 1; 280 int nFill = 1; 281 for ( int i=0; i<nDimensions; i++ ) 282 { 283 if ( i < nPosition ) 284 nRepeat *= nMembers; 285 else if ( i > nPosition ) 286 nFill *= nMembers; 287 } 288 int nSize = nRepeat * nMembers * nFill; 289 290 com.sun.star.sheet.MemberResult[] aResults = 291 new com.sun.star.sheet.MemberResult[nSize]; 292 int nResultPos = 0; 293 for (int nOuter=0; nOuter<nRepeat; nOuter++) 294 { 295 for (int nMember=0; nMember<nMembers; nMember++) 296 { 297 aResults[nResultPos] = new com.sun.star.sheet.MemberResult(); 298 aResults[nResultPos].Name = ExampleSettings.getMemberName(nMember); 299 aResults[nResultPos].Caption = aResults[nResultPos].Name; 300 aResults[nResultPos].Flags = 301 com.sun.star.sheet.MemberResultFlags.HASMEMBER; 302 ++nResultPos; 303 304 for (int nInner=1; nInner<nFill; nInner++) 305 { 306 aResults[nResultPos] = new com.sun.star.sheet.MemberResult(); 307 aResults[nResultPos].Flags = 308 com.sun.star.sheet.MemberResultFlags.CONTINUE; 309 ++nResultPos; 310 } 311 } 312 } 313 return aResults; 314 } 315 316 // XPropertySet 317 318 public com.sun.star.beans.XPropertySetInfo getPropertySetInfo() 319 { 320 return new ExamplePropertySetInfo( new com.sun.star.beans.Property[] { 321 new com.sun.star.beans.Property( "SubTotals", -1, 322 new com.sun.star.uno.Type( 323 com.sun.star.sheet.GeneralFunction[].class ), 324 (short) 0 ), 325 new com.sun.star.beans.Property( "ShowEmpty", -1, 326 new com.sun.star.uno.Type( Boolean.class ), 327 (short) 0 ) } ); 328 } 329 330 public void setPropertyValue( String aPropertyName, Object aValue ) 331 throws com.sun.star.beans.UnknownPropertyException 332 { 333 if ( aPropertyName.equals( "SubTotals" ) || 334 aPropertyName.equals( "ShowEmpty" ) ) 335 { 336 // ignored 337 } 338 else 339 throw new com.sun.star.beans.UnknownPropertyException(); 340 } 341 342 public Object getPropertyValue( String aPropertyName ) 343 throws com.sun.star.beans.UnknownPropertyException 344 { 345 if ( aPropertyName.equals( "SubTotals" ) ) 346 return new com.sun.star.sheet.GeneralFunction[0]; 347 else if ( aPropertyName.equals( "ShowEmpty" ) ) 348 return new Boolean( true ); 349 else 350 throw new com.sun.star.beans.UnknownPropertyException(); 351 } 352 353 public void addPropertyChangeListener( 354 String aPropertyName, com.sun.star.beans.XPropertyChangeListener xListener) 355 { 356 } 357 public void removePropertyChangeListener( 358 String aPropertyName, com.sun.star.beans.XPropertyChangeListener aListener) 359 { 360 } 361 public void addVetoableChangeListener( 362 String PropertyName, com.sun.star.beans.XVetoableChangeListener aListener) 363 { 364 } 365 public void removeVetoableChangeListener( 366 String PropertyName, com.sun.star.beans.XVetoableChangeListener aListener) 367 { 368 } 369 } 370 371 // implementation of com.sun.star.sheet.DataPilotSourceLevels 372 373 class ExampleLevels implements com.sun.star.container.XNameAccess 374 { 375 private ExampleSettings aSettings; 376 private int nDimension; 377 private ExampleLevel aLevel; 378 379 public ExampleLevels( ExampleSettings aSet, int nDim ) 380 { 381 aSettings = aSet; 382 nDimension = nDim; 383 } 384 385 // XNameAccess 386 387 public com.sun.star.uno.Type getElementType() 388 { 389 return new com.sun.star.uno.Type( com.sun.star.container.XNamed.class ); 390 } 391 392 public boolean hasElements() 393 { 394 return true; // always has elements 395 } 396 397 public Object getByName( String aName ) 398 throws com.sun.star.container.NoSuchElementException 399 { 400 // there's only one level with the same name as the dimension / hierarchy 401 if ( aName.equals( ExampleSettings.aDimensionNames[nDimension] ) ) 402 { 403 if ( aLevel == null ) 404 aLevel = new ExampleLevel( aSettings, nDimension ); 405 return aLevel; 406 } 407 throw new com.sun.star.container.NoSuchElementException(); 408 } 409 410 public String[] getElementNames() 411 { 412 String [] aNames = new String[ 1 ]; 413 aNames[0] = ExampleSettings.aDimensionNames[nDimension]; 414 return aNames; 415 } 416 417 public boolean hasByName( String aName ) 418 { 419 return aName.equals( ExampleSettings.aDimensionNames[nDimension] ); 420 } 421 } 422 423 // implementation of com.sun.star.sheet.DataPilotSourceHierarchy 424 425 class ExampleHierarchy implements com.sun.star.container.XNamed, 426 com.sun.star.sheet.XLevelsSupplier 427 { 428 private ExampleSettings aSettings; 429 private int nDimension; 430 private ExampleLevels aLevels; 431 432 public ExampleHierarchy( ExampleSettings aSet, int nDim ) 433 { 434 aSettings = aSet; 435 nDimension = nDim; 436 } 437 438 // XNamed 439 440 public String getName() 441 { 442 return ExampleSettings.aDimensionNames[ nDimension ]; 443 } 444 445 public void setName( String aName ) 446 { 447 // ignored 448 } 449 450 // XLevelsSupplier 451 452 public com.sun.star.container.XNameAccess getLevels() 453 { 454 if ( aLevels == null ) 455 aLevels = new ExampleLevels( aSettings, nDimension ); 456 return aLevels; 457 } 458 } 459 460 // implementation of com.sun.star.sheet.DataPilotSourceHierarchies 461 462 class ExampleHierarchies implements com.sun.star.container.XNameAccess 463 { 464 private ExampleSettings aSettings; 465 private int nDimension; 466 private ExampleHierarchy aHierarchy; 467 468 public ExampleHierarchies( ExampleSettings aSet, int nDim ) 469 { 470 aSettings = aSet; 471 nDimension = nDim; 472 } 473 474 // XNameAccess 475 476 public com.sun.star.uno.Type getElementType() 477 { 478 return new com.sun.star.uno.Type( com.sun.star.container.XNamed.class ); 479 } 480 481 public boolean hasElements() 482 { 483 return true; // always has elements 484 } 485 486 public Object getByName( String aName ) 487 throws com.sun.star.container.NoSuchElementException 488 { 489 // there's only one hierarchy with the same name as the dimension 490 if ( aName.equals( ExampleSettings.aDimensionNames[nDimension] ) ) 491 { 492 if ( aHierarchy == null ) 493 aHierarchy = new ExampleHierarchy( aSettings, nDimension ); 494 return aHierarchy; 495 } 496 throw new com.sun.star.container.NoSuchElementException(); 497 } 498 499 public String[] getElementNames() 500 { 501 String [] aNames = new String[ 1 ]; 502 aNames[0] = ExampleSettings.aDimensionNames[nDimension]; 503 return aNames; 504 } 505 506 public boolean hasByName( String aName ) 507 { 508 return aName.equals( ExampleSettings.aDimensionNames[nDimension] ); 509 } 510 } 511 512 // implementation of com.sun.star.sheet.DataPilotSourceDimension 513 514 class ExampleDimension implements 515 com.sun.star.container.XNamed, 516 com.sun.star.sheet.XHierarchiesSupplier, 517 com.sun.star.util.XCloneable, 518 com.sun.star.beans.XPropertySet 519 { 520 private ExampleSettings aSettings; 521 private int nDimension; 522 private ExampleHierarchies aHierarchies; 523 private com.sun.star.sheet.DataPilotFieldOrientation eOrientation; 524 525 public ExampleDimension( ExampleSettings aSet, int nDim ) 526 { 527 aSettings = aSet; 528 nDimension = nDim; 529 eOrientation = ( nDim == ExampleSettings.nValueDimension ) ? 530 com.sun.star.sheet.DataPilotFieldOrientation.DATA : 531 com.sun.star.sheet.DataPilotFieldOrientation.HIDDEN; 532 } 533 534 // XNamed 535 536 public String getName() 537 { 538 return ExampleSettings.aDimensionNames[ nDimension ]; 539 } 540 541 public void setName( String aName ) 542 { 543 // ignored 544 } 545 546 // XHierarchiesSupplier 547 548 public com.sun.star.container.XNameAccess getHierarchies() 549 { 550 if ( aHierarchies == null ) 551 aHierarchies = new ExampleHierarchies( aSettings, nDimension ); 552 return aHierarchies; 553 } 554 555 // XCloneable 556 557 public com.sun.star.util.XCloneable createClone() 558 { 559 return null; // not supported 560 } 561 562 // XPropertySet 563 564 public com.sun.star.beans.XPropertySetInfo getPropertySetInfo() 565 { 566 return new ExamplePropertySetInfo( new com.sun.star.beans.Property[] { 567 new com.sun.star.beans.Property( "Original", -1, 568 new com.sun.star.uno.Type( com.sun.star.container.XNamed.class), 569 (short) com.sun.star.beans.PropertyAttribute.READONLY ), 570 new com.sun.star.beans.Property( "IsDataLayoutDimension", -1, 571 new com.sun.star.uno.Type( Boolean.class), 572 (short) com.sun.star.beans.PropertyAttribute.READONLY ), 573 new com.sun.star.beans.Property( "Orientation", -1, 574 new com.sun.star.uno.Type( 575 com.sun.star.sheet.DataPilotFieldOrientation.class), (short) 0), 576 new com.sun.star.beans.Property( "Position", -1, 577 new com.sun.star.uno.Type( Integer.class ), (short) 0), 578 new com.sun.star.beans.Property( "Function", -1, 579 new com.sun.star.uno.Type(com.sun.star.sheet.GeneralFunction.class), 580 (short) 0 ), 581 new com.sun.star.beans.Property( "UsedHierarchy", -1, 582 new com.sun.star.uno.Type( Integer.class ), (short) 0 ), 583 new com.sun.star.beans.Property( "Filter", -1, 584 new com.sun.star.uno.Type( 585 com.sun.star.sheet.TableFilterField[].class), (short) 0) }); 586 } 587 588 public void setPropertyValue( String aPropertyName, Object aValue ) 589 throws com.sun.star.beans.UnknownPropertyException 590 { 591 if ( aPropertyName.equals( "Orientation" ) ) 592 { 593 com.sun.star.sheet.DataPilotFieldOrientation eNewOrient = 594 (com.sun.star.sheet.DataPilotFieldOrientation) aValue; 595 if ( nDimension != ExampleSettings.nValueDimension && 596 nDimension != ExampleSettings.nDataDimension && 597 eNewOrient != com.sun.star.sheet.DataPilotFieldOrientation.DATA ) 598 { 599 // remove from list for old orientation and add for new one 600 Integer aDimInt = new Integer(nDimension); 601 if ( eOrientation == com.sun.star.sheet.DataPilotFieldOrientation.COLUMN ) 602 aSettings.aColDimensions.remove( aDimInt ); 603 else if ( eOrientation == com.sun.star.sheet.DataPilotFieldOrientation.ROW ) 604 aSettings.aRowDimensions.remove( aDimInt ); 605 if ( eNewOrient == com.sun.star.sheet.DataPilotFieldOrientation.COLUMN ) 606 aSettings.aColDimensions.add( aDimInt ); 607 else if ( eNewOrient == com.sun.star.sheet.DataPilotFieldOrientation.ROW ) 608 aSettings.aRowDimensions.add( aDimInt ); 609 610 // change orientation 611 eOrientation = eNewOrient; 612 } 613 } 614 else if ( aPropertyName.equals( "Position" ) ) 615 { 616 int nNewPos = ((Integer) aValue).intValue(); 617 Integer aDimInt = new Integer(nDimension); 618 if ( eOrientation == com.sun.star.sheet.DataPilotFieldOrientation.COLUMN ) 619 { 620 aSettings.aColDimensions.remove( aDimInt ); 621 aSettings.aColDimensions.add( nNewPos, aDimInt ); 622 } 623 else if ( eOrientation == com.sun.star.sheet.DataPilotFieldOrientation.ROW ) 624 { 625 aSettings.aRowDimensions.remove( aDimInt ); 626 aSettings.aRowDimensions.add( nNewPos, aDimInt ); 627 } 628 } 629 else if ( aPropertyName.equals( "Function" ) || aPropertyName.equals( "UsedHierarchy" ) || 630 aPropertyName.equals( "Filter" ) ) 631 { 632 // ignored 633 } 634 else 635 throw new com.sun.star.beans.UnknownPropertyException(); 636 } 637 638 public Object getPropertyValue( String aPropertyName ) 639 throws com.sun.star.beans.UnknownPropertyException 640 { 641 if ( aPropertyName.equals( "Original" ) ) 642 return null; 643 else if ( aPropertyName.equals( "IsDataLayoutDimension" ) ) 644 return new Boolean( nDimension == ExampleSettings.nDataDimension ); 645 else if ( aPropertyName.equals( "Orientation" ) ) 646 return eOrientation; 647 else if ( aPropertyName.equals( "Position" ) ) 648 { 649 int nPosition; 650 if ( eOrientation == com.sun.star.sheet.DataPilotFieldOrientation.COLUMN ) 651 nPosition = aSettings.aColDimensions.indexOf( new Integer(nDimension) ); 652 else if ( eOrientation == com.sun.star.sheet.DataPilotFieldOrientation.ROW ) 653 nPosition = aSettings.aRowDimensions.indexOf( new Integer(nDimension) ); 654 else 655 nPosition = nDimension; 656 return new Integer( nPosition ); 657 } 658 else if ( aPropertyName.equals( "Function" ) ) 659 return com.sun.star.sheet.GeneralFunction.SUM; 660 else if ( aPropertyName.equals( "UsedHierarchy" ) ) 661 return new Integer(0); 662 else if ( aPropertyName.equals( "Filter" ) ) 663 return new com.sun.star.sheet.TableFilterField[0]; 664 else 665 throw new com.sun.star.beans.UnknownPropertyException(); 666 } 667 668 public void addPropertyChangeListener( 669 String aPropertyName, com.sun.star.beans.XPropertyChangeListener xListener) 670 { 671 } 672 public void removePropertyChangeListener( 673 String aPropertyName, com.sun.star.beans.XPropertyChangeListener aListener) 674 { 675 } 676 public void addVetoableChangeListener( 677 String PropertyName, com.sun.star.beans.XVetoableChangeListener aListener) 678 { 679 } 680 public void removeVetoableChangeListener( 681 String PropertyName, com.sun.star.beans.XVetoableChangeListener aListener) 682 { 683 } 684 } 685 686 // implementation of com.sun.star.sheet.DataPilotSourceDimensions 687 688 class ExampleDimensions implements com.sun.star.container.XNameAccess 689 { 690 private ExampleSettings aSettings; 691 private ExampleDimension[] aDimensions; 692 693 public ExampleDimensions( ExampleSettings aSet ) 694 { 695 aSettings = aSet; 696 } 697 698 // XNameAccess 699 700 public com.sun.star.uno.Type getElementType() 701 { 702 return new com.sun.star.uno.Type( com.sun.star.container.XNamed.class ); 703 } 704 705 public boolean hasElements() 706 { 707 return true; // always has elements 708 } 709 710 public Object getByName( String aName ) 711 throws com.sun.star.container.NoSuchElementException 712 { 713 for (int i=0; i<ExampleSettings.nDimensionCount; i++) 714 if ( aName.equals( ExampleSettings.aDimensionNames[i] ) ) 715 { 716 if ( aDimensions == null ) 717 aDimensions = new ExampleDimension[ ExampleSettings.nDimensionCount ]; 718 if ( aDimensions[i] == null ) 719 aDimensions[i] = new ExampleDimension( aSettings, i ); 720 return aDimensions[i]; 721 } 722 throw new com.sun.star.container.NoSuchElementException(); 723 } 724 725 public String[] getElementNames() 726 { 727 String [] aNames = new String[ ExampleSettings.nDimensionCount ]; 728 for (int i=0; i<ExampleSettings.nDimensionCount; i++) 729 aNames[ i ] = ExampleSettings.aDimensionNames[i]; 730 return aNames; 731 } 732 733 public boolean hasByName( String aName ) 734 { 735 for (int i=0; i<ExampleSettings.nDimensionCount; i++) 736 if ( aName.equals( ExampleSettings.aDimensionNames[i] ) ) 737 return true; 738 return false; 739 } 740 } 741 742 // outer class for service implementation 743 744 public class ExampleDataPilotSource 745 { 746 // implementation of com.sun.star.sheet.DataPilotSource 747 748 static public class _ExampleDataPilotSource implements 749 com.sun.star.sheet.XDimensionsSupplier, 750 com.sun.star.sheet.XDataPilotResults, 751 com.sun.star.util.XRefreshable, 752 com.sun.star.beans.XPropertySet, 753 com.sun.star.lang.XInitialization, 754 com.sun.star.lang.XServiceInfo 755 { 756 static private final String aServiceName = "com.sun.star.sheet.DataPilotSource"; 757 static private final String aImplName = _ExampleDataPilotSource.class.getName(); 758 759 private ExampleSettings aSettings = new ExampleSettings(); 760 private ExampleDimensions aDimensions; 761 762 public _ExampleDataPilotSource( com.sun.star.lang.XMultiServiceFactory xFactory ) 763 { 764 } 765 766 // XInitialization 767 768 public void initialize( Object[] aArguments ) 769 { 770 // If the first argument (Source) is a number between 2 and 10, 771 // use it as member count, otherwise keep the default value. 772 try 773 { 774 if ( aArguments.length >= 1 ) 775 { 776 String aSource = com.sun.star.uno.AnyConverter.toString(aArguments[0]); 777 if ( aSource != null && aSource.length() > 0) 778 { 779 int nValue = Integer.parseInt( aSource ); 780 if ( nValue >= 2 && nValue <= 10 ) 781 aSettings.nMemberCount = nValue; 782 } 783 } 784 } 785 catch ( NumberFormatException e ) 786 { 787 System.out.println( "Error: caught exception in " + 788 "ExampleDataPilotSource.initialize!\nException Message = " 789 + e.getMessage()); 790 e.printStackTrace(); 791 } 792 catch ( com.sun.star.lang.IllegalArgumentException e ) 793 { 794 System.out.println( "Error: caught exception in " + 795 "ExampleDataPilotSource.initialize!\nException Message = " 796 + e.getMessage()); 797 e.printStackTrace(); 798 } 799 } 800 801 // XDataPilotResults 802 803 public com.sun.star.sheet.DataResult[][] getResults() 804 { 805 int[] nDigits = new int[ExampleSettings.nDimensionCount]; 806 int nValue = 1; 807 for (int i=0; i<ExampleSettings.nDimensionCount; i++) 808 { 809 nDigits[i] = nValue; 810 nValue *= 10; 811 } 812 813 int nMemberCount = aSettings.nMemberCount; 814 int nRowDimCount = aSettings.aRowDimensions.size(); 815 int nColDimCount = aSettings.aColDimensions.size(); 816 817 int nRows = 1; 818 for (int i=0; i<nRowDimCount; i++) 819 nRows *= nMemberCount; 820 int nColumns = 1; 821 for (int i=0; i<nColDimCount; i++) 822 nColumns *= nMemberCount; 823 824 com.sun.star.sheet.DataResult[][] aResults = new com.sun.star.sheet.DataResult[nRows][]; 825 for (int nRow=0; nRow<nRows; nRow++) 826 { 827 int nRowVal = nRow; 828 int nRowResult = 0; 829 for (int nRowDim=0; nRowDim<nRowDimCount; nRowDim++) 830 { 831 int nDim = ((Integer)aSettings.aRowDimensions.get(nRowDimCount-nRowDim-1)).intValue(); 832 nRowResult += ( nRowVal % nMemberCount ) * nDigits[nDim]; 833 nRowVal /= nMemberCount; 834 } 835 836 aResults[nRow] = new com.sun.star.sheet.DataResult[nColumns]; 837 for (int nCol=0; nCol<nColumns; nCol++) 838 { 839 int nColVal = nCol; 840 int nResult = nRowResult; 841 for (int nColDim=0; nColDim<nColDimCount; nColDim++) 842 { 843 int nDim = ((Integer)aSettings.aColDimensions.get(nColDimCount-nColDim-1)).intValue(); 844 nResult += ( nColVal % nMemberCount ) * nDigits[nDim]; 845 nColVal /= nMemberCount; 846 } 847 848 aResults[nRow][nCol] = new com.sun.star.sheet.DataResult(); 849 aResults[nRow][nCol].Flags = com.sun.star.sheet.DataResultFlags.HASDATA; 850 aResults[nRow][nCol].Value = nResult; 851 } 852 } 853 return aResults; 854 } 855 856 // XDimensionsSupplier 857 858 public com.sun.star.container.XNameAccess getDimensions() 859 { 860 if ( aDimensions == null ) 861 aDimensions = new ExampleDimensions( aSettings ); 862 return aDimensions; 863 } 864 865 // XPropertySet 866 867 public com.sun.star.beans.XPropertySetInfo getPropertySetInfo() 868 { 869 return new ExamplePropertySetInfo( new com.sun.star.beans.Property[] { 870 new com.sun.star.beans.Property( "ColumnGrand", -1, 871 new com.sun.star.uno.Type( Boolean.class ), (short) 0), 872 new com.sun.star.beans.Property( "RowGrand", -1, 873 new com.sun.star.uno.Type( Boolean.class ), (short) 0) }); 874 } 875 876 public void setPropertyValue( String aPropertyName, Object aValue ) 877 throws com.sun.star.beans.UnknownPropertyException 878 { 879 if ( aPropertyName.equals( "ColumnGrand" ) || 880 aPropertyName.equals( "RowGrand" ) ) 881 { 882 // ignored 883 } 884 else 885 throw new com.sun.star.beans.UnknownPropertyException(); 886 } 887 888 public Object getPropertyValue( String aPropertyName ) 889 throws com.sun.star.beans.UnknownPropertyException 890 { 891 if ( aPropertyName.equals( "ColumnGrand" ) || 892 aPropertyName.equals( "RowGrand" ) ) 893 { 894 return new Boolean( false ); // always false 895 } 896 else 897 throw new com.sun.star.beans.UnknownPropertyException(); 898 } 899 900 public void addPropertyChangeListener( 901 String aPropertyName, 902 com.sun.star.beans.XPropertyChangeListener xListener ) 903 { 904 } 905 public void removePropertyChangeListener( 906 String aPropertyName, 907 com.sun.star.beans.XPropertyChangeListener aListener ) 908 { 909 } 910 public void addVetoableChangeListener( 911 String PropertyName, 912 com.sun.star.beans.XVetoableChangeListener aListener ) 913 { 914 } 915 public void removeVetoableChangeListener( 916 String PropertyName, 917 com.sun.star.beans.XVetoableChangeListener aListener ) 918 { 919 } 920 921 // XRefreshable 922 923 public void refresh() 924 { 925 } 926 public void addRefreshListener( com.sun.star.util.XRefreshListener l ) 927 { 928 } 929 public void removeRefreshListener( com.sun.star.util.XRefreshListener l ) 930 { 931 } 932 933 // XServiceInfo 934 935 public String getImplementationName() 936 { 937 return aImplName; 938 } 939 940 public String[] getSupportedServiceNames() 941 { 942 String [] aSupportedServices = new String[ 1 ]; 943 aSupportedServices[ 0 ] = aServiceName; 944 return aSupportedServices; 945 } 946 947 public boolean supportsService( String aService ) 948 { 949 return aService.equals( aServiceName ); 950 } 951 } 952 953 public static com.sun.star.lang.XSingleServiceFactory __getServiceFactory( 954 String implName, 955 com.sun.star.lang.XMultiServiceFactory multiFactory, 956 com.sun.star.registry.XRegistryKey regKey) 957 { 958 com.sun.star.lang.XSingleServiceFactory xSingleServiceFactory = null; 959 960 if ( implName.equals(_ExampleDataPilotSource.aImplName) ) 961 xSingleServiceFactory = 962 com.sun.star.comp.loader.FactoryHelper.getServiceFactory( 963 _ExampleDataPilotSource.class, 964 _ExampleDataPilotSource.aServiceName, multiFactory, regKey); 965 966 return xSingleServiceFactory; 967 } 968 969 // This method not longer necessary since OOo 3.4 where the component registration 970 // was changed to passive component registration. For more details see 971 // http://wiki.services.openoffice.org/wiki/Passive_Component_Registration 972 973 // public static boolean __writeRegistryServiceInfo( 974 // com.sun.star.registry.XRegistryKey regKey) 975 // { 976 // return com.sun.star.comp.loader.FactoryHelper.writeRegistryServiceInfo( 977 // _ExampleDataPilotSource.aImplName, 978 // _ExampleDataPilotSource.aServiceName, regKey); 979 // } 980 } 981 982