/* * JacORB - a free Java ORB * * Copyright (C) 1999-2014 Gerald Brose / The JacORB Team. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * */ package org.jacorb.ir.gui.typesystem.remote; /** * */ import java.util.Enumeration; import java.util.Vector; import org.jacorb.ir.gui.typesystem.Interface; import org.jacorb.ir.gui.typesystem.ModelParticipant; import org.jacorb.ir.gui.typesystem.TypeSystemNode; import org.omg.CORBA.IRObject; import org.omg.CORBA.InterfaceDef; import org.omg.CORBA.InterfaceDefHelper; public class IRInterface extends IRContainer implements org.jacorb.ir.gui.typesystem.Interface { private IRInterface[] superInterfaces = null; private IRAttribute[] allFields = null; private IROperation[] allOperations = null; /** * Default constructor: used by TypeSystem.createNode() */ public IRInterface ( ) { super(); } /** * This method was created by a SmartGuide. * @param irObject org.omg.CORBA.IRObject */ public IRInterface ( IRObject irObject) { super(irObject); } /** * This method was created by a SmartGuide. * @return java.lang.String[] */ public String[] allowedToAdd() { String[] result = { IRAttribute.nodeTypeName(), IROperation.nodeTypeName(), IRConstant.nodeTypeName(), IRTypedef.nodeTypeName(), IRException.nodeTypeName()}; return result; } /** * @return java.lang.String */ public String description() { String result = super.description(); Interface[] superinterfaces = getSuperInterfaces(); if (superinterfaces.length>0) { result = result + "\nSuper-Interfaces:\t "; for (int i = 0; i<superinterfaces.length; i++) { result = result + ((TypeSystemNode)superinterfaces[i]).getAbsoluteName(); if (!(i==superinterfaces.length-1)) { result = result + ", "; } } } else { result = result + "\nSuper-Interfaces:\t:none"; } return result; } /** * Gibt alle Fields inkl. der Fields der Super-Interfaces zurück * @return org.jacorb.ir.gui.typesystem.TypeSystemNode[] */ public TypeSystemNode[] getAllFields() { if (this.allFields==null) { Vector fields = new Vector(); // erstmal die Fields der superInterfaces sammeln Interface[] superInterfaces = this.getSuperInterfaces(); for (int i=0; i<superInterfaces.length; i++) { TypeSystemNode[] nextFields = superInterfaces[i].getAllFields(); for (int n=0; n<nextFields.length; n++) { fields.addElement(nextFields[n]); } } // dann unsere eigenen Fields (also die Attributes des Interfaces) ModelParticipant[] contents = this.contents(); for (int i=0; i<contents.length; i++) { if (contents[i] instanceof IRAttribute) { fields.addElement(contents[i]); } } this.allFields = new IRAttribute[fields.size()]; int i = 0; for (Enumeration e = fields.elements(); e.hasMoreElements(); ) { allFields[i] = (IRAttribute)e.nextElement(); i++; } } // if (allFields==null) return allFields; } /** * Gibt alle Fields inkl. der Fields der Super-Interfaces zurück * @return org.jacorb.ir.gui.typesystem.TypeSystemNode[] */ public TypeSystemNode[] getAllOperations() { if (this.allOperations==null) { Vector operations = new Vector(); // erstmal die Operationen der superInterfaces sammeln Interface[] superInterfaces = this.getSuperInterfaces(); for (int i=0; i<superInterfaces.length; i++) { TypeSystemNode[] nextOperations = superInterfaces[i].getAllOperations(); for (int n=0; n<nextOperations.length; n++) { operations.addElement(nextOperations[n]); } } // dann unsere eigenen Operationen ModelParticipant[] contents = this.contents(); for (int i=0; i<contents.length; i++) { if (contents[i] instanceof IROperation) { operations.addElement(contents[i]); } } this.allOperations = new IROperation[operations.size()]; int i = 0; for (Enumeration e = operations.elements(); e.hasMoreElements(); ) { allOperations[i] = (IROperation)e.nextElement(); i++; } } // if (allOperations==null) return allOperations; } /** * This method was created by a SmartGuide. * @return org.jacorb.ir.gui.typesystem.Interface[] */ public Interface[] getSuperInterfaces() { if (superInterfaces==null) { // superInterfaces in unserem dazugehörigen Field speichern InterfaceDef interfaceDef = InterfaceDefHelper.narrow(irObject); InterfaceDef[] baseInterfaces = interfaceDef.base_interfaces(); // base interfaces aus IR holen this.superInterfaces = new IRInterface[baseInterfaces.length]; for (int i=0; i<baseInterfaces.length; i++) { // für alle base interfaces die zugehörige TypeSystemNode holen IRInterface superInterface = (IRInterface)RemoteTypeSystem.createTypeSystemNode(baseInterfaces[i]); this.superInterfaces[i] = superInterface; } } return superInterfaces; } /** * @return java.lang.String */ public static String nodeTypeName() { return "interface"; } /** * @param irObject org.omg.CORBA.IRObject */ protected void setIRObject(org.omg.CORBA.IRObject irObject) { super.setIRObject(irObject); } }