Source for org.omg.DynamicAny.DynUnionOperations

   1: /* DynUnionOperations.java --
   2:    Copyright (C) 2005 Free Software Foundation, Inc.
   3: This file is part of GNU Classpath.
   4: 
   5: GNU Classpath is free software; you can redistribute it and/or modify
   6: it under the terms of the GNU General Public License as published by
   7: the Free Software Foundation; either version 2, or (at your option)
   8: any later version.
   9: 
  10: GNU Classpath is distributed in the hope that it will be useful, but
  11: WITHOUT ANY WARRANTY; without even the implied warranty of
  12: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13: General Public License for more details.
  14: 
  15: You should have received a copy of the GNU General Public License
  16: along with GNU Classpath; see the file COPYING.  If not, write to the
  17: Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  18: 02110-1301 USA.
  19: 
  20: Linking this library statically or dynamically with other modules is
  21: making a combined work based on this library.  Thus, the terms and
  22: conditions of the GNU General Public License cover the whole
  23: combination.
  24: 
  25: As a special exception, the copyright holders of this library give you
  26: permission to link this library with independent modules to produce an
  27: executable, regardless of the license terms of these independent
  28: modules, and to copy and distribute the resulting executable under
  29: terms of your choice, provided that you also meet, for each linked
  30: independent module, the terms and conditions of the license of that
  31: module.  An independent module is a module which is not derived from
  32: or based on this library.  If you modify this library, you may extend
  33: this exception to your version of the library, but you are not
  34: obligated to do so.  If you do not wish to do so, delete this
  35: exception statement from your version. */
  36: 
  37: 
  38: package org.omg.DynamicAny;
  39: 
  40: import org.omg.CORBA.TCKind;
  41: import org.omg.DynamicAny.DynAnyPackage.InvalidValue;
  42: import org.omg.DynamicAny.DynAnyPackage.TypeMismatch;
  43: 
  44: /**
  45:  * Defines the operations, applicable to the DynUnion. The DynUnion has only two
  46:  * valid positions:
  47:  * <ul>
  48:  * <li>0 - contains the discriminator of the union. The discriminator defines,
  49:  * which of the union variants is currently active.</li>
  50:  * <li>1 - contains the currently active variant of the union content (a union
  51:  * member). </li>
  52:  * </ul>
  53:  * The size of the union is normally 2. If the discriminator value defines no
  54:  * valid variant, the union consists of discriminator only, having the size 1.
  55:  *
  56:  * @author Audrius Meskauskas, Lithuania (AudriusA@Bioinformatics.org)
  57:  */
  58: public interface DynUnionOperations
  59:   extends DynAnyOperations
  60: {
  61:   /**
  62:    * <p>Get the value of discriminator, defining which content variant
  63:    * (member) is active.
  64:    * </p><p>
  65:    * In the current implementation, the later changes on the returned value
  66:    * alter the state of the union via implemented internal listener.
  67:    * </p>
  68:    */
  69:   DynAny get_discriminator();
  70: 
  71:   /**
  72:    * <p>Set the value of discriminator, activating the member variant that is
  73:    * consistent with the discriminator value. If the current member variant
  74:    * matches the discriminator being set, it is unchanged. Otherwise, it is
  75:    * replaced by the matching member variant with fields, initialised to default
  76:    * values. The current position is set to 0 if the discriminator value does
  77:    * not match any member variant. Otherwise, the current position is set to 1,
  78:    * index of the member variant.
  79:    * </p>
  80:    * @throws TypeMismatch if the discriminator has a wrong type of this union.
  81:    */
  82:   void set_discriminator(DynAny aDiscriminator)
  83:                   throws TypeMismatch;
  84: 
  85:   /**
  86:    * Get the kind of the union descriminator.
  87:    *
  88:    * @return the TCKind value of the discriminator typecode.
  89:    */
  90:   TCKind discriminator_kind();
  91: 
  92:   /**
  93:    * Get the current variant of the union content.
  94:    *
  95:    * @return the current member of the union. This reference is only valid as
  96:    * long as the current member does not change.
  97:    *
  98:    * @throws InvalidValue if the union has no active member.
  99:    */
 100:   DynAny member()
 101:          throws InvalidValue;
 102: 
 103:   /**
 104:    * Returns the kind of the currently active union member.
 105:    *
 106:    * @return the TCKind value of the union member.
 107:    *
 108:    * @throws InvalidValue if the union has no active member.
 109:    */
 110:   TCKind member_kind()
 111:               throws InvalidValue;
 112: 
 113:   /**
 114:    * Returns the name of the currently active union member.
 115:    *
 116:    * @return the TCKind value of the union member.
 117:    *
 118:    * @throws InvalidValue if the union has no active member.
 119:    */
 120:   String member_name()
 121:               throws InvalidValue;
 122: 
 123:   /**
 124:    * Returns true if the union has no active member. This happens if If the
 125:    * discriminator value defines no valid variant. Such union consists of
 126:    * discriminator only, having the size 1.
 127:    */
 128:   boolean has_no_active_member();
 129: 
 130:   /**
 131:    * Set the discriminator to default value. The current position is set to 0.
 132:    * This also sets the content variant to the default variant, and the size of
 133:    * the union becomes 2.
 134:    *
 135:    * @throws TypeMismatch if the default case is not defined for this union.
 136:    */
 137:   void set_to_default_member()
 138:                       throws TypeMismatch;
 139: 
 140:   /**
 141:    * Set the discriminator to value that does not correspond any content variant
 142:    * (any union <code>case</code> label). The current position is set to 0.
 143:    * The size of the union becomes 0.
 144:    *
 145:    * @throws TypeMismatch if the union has explicit default case.
 146:    */
 147:   void set_to_no_active_member()
 148:                         throws TypeMismatch;
 149: }