1. /*
  2. * @(#)IORTemplateListImpl.java 1.8 03/12/19
  3. *
  4. * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
  5. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
  6. */
  7. package com.sun.corba.se.impl.ior;
  8. import java.util.ArrayList ;
  9. import java.util.Iterator ;
  10. import org.omg.CORBA_2_3.portable.InputStream ;
  11. import org.omg.CORBA_2_3.portable.OutputStream ;
  12. import com.sun.corba.se.spi.ior.IORTemplate ;
  13. import com.sun.corba.se.spi.ior.IORTemplateList ;
  14. import com.sun.corba.se.spi.ior.ObjectId ;
  15. import com.sun.corba.se.spi.ior.IORTemplate ;
  16. import com.sun.corba.se.spi.ior.IOR ;
  17. import com.sun.corba.se.spi.ior.IORFactory ;
  18. import com.sun.corba.se.spi.ior.IORFactories ;
  19. import com.sun.corba.se.spi.orb.ORB ;
  20. public class IORTemplateListImpl extends FreezableList implements IORTemplateList
  21. {
  22. /* This class must override add( int, Object ) and set( int, Object )
  23. * so that adding an IORTemplateList to an IORTemplateList just results
  24. * in a list of TaggedProfileTemplates.
  25. */
  26. public Object set( int index, Object element )
  27. {
  28. if (element instanceof IORTemplate) {
  29. return super.set( index, element ) ;
  30. } else if (element instanceof IORTemplateList) {
  31. Object result = remove( index ) ;
  32. add( index, element ) ;
  33. return result ;
  34. } else
  35. throw new IllegalArgumentException() ;
  36. }
  37. public void add( int index, Object element )
  38. {
  39. if (element instanceof IORTemplate) {
  40. super.add( index, element ) ;
  41. } else if (element instanceof IORTemplateList) {
  42. IORTemplateList tl = (IORTemplateList)element ;
  43. addAll( index, tl ) ;
  44. } else
  45. throw new IllegalArgumentException() ;
  46. }
  47. public IORTemplateListImpl()
  48. {
  49. super( new ArrayList() ) ;
  50. }
  51. public IORTemplateListImpl( InputStream is )
  52. {
  53. this() ;
  54. int size = is.read_long() ;
  55. for (int ctr=0; ctr<size; ctr++) {
  56. IORTemplate iortemp = IORFactories.makeIORTemplate( is ) ;
  57. add( iortemp ) ;
  58. }
  59. makeImmutable() ;
  60. }
  61. public void makeImmutable()
  62. {
  63. makeElementsImmutable() ;
  64. super.makeImmutable() ;
  65. }
  66. public void write( OutputStream os )
  67. {
  68. os.write_long( size() ) ;
  69. Iterator iter = iterator() ;
  70. while (iter.hasNext()) {
  71. IORTemplate iortemp = (IORTemplate)(iter.next()) ;
  72. iortemp.write( os ) ;
  73. }
  74. }
  75. public IOR makeIOR( ORB orb, String typeid, ObjectId oid )
  76. {
  77. return new IORImpl( orb, typeid, this, oid ) ;
  78. }
  79. public boolean isEquivalent( IORFactory other )
  80. {
  81. if (!(other instanceof IORTemplateList))
  82. return false ;
  83. IORTemplateList list = (IORTemplateList)other ;
  84. Iterator thisIterator = iterator() ;
  85. Iterator listIterator = list.iterator() ;
  86. while (thisIterator.hasNext() && listIterator.hasNext()) {
  87. IORTemplate thisTemplate = (IORTemplate)thisIterator.next() ;
  88. IORTemplate listTemplate = (IORTemplate)listIterator.next() ;
  89. if (!thisTemplate.isEquivalent( listTemplate ))
  90. return false ;
  91. }
  92. return thisIterator.hasNext() == listIterator.hasNext() ;
  93. }
  94. }