00001 /* 00002 * (c) copyright 2008, Technische Universitaet Graz and Technische Universitaet Wien 00003 * 00004 * This file is part of jdiagengine. 00005 * 00006 * jdiagengine is free software: you can redistribute it and/or modify 00007 * it under the terms of the GNU General Public License as published by 00008 * the Free Software Foundation, either version 3 of the License, or 00009 * (at your option) any later version. 00010 * 00011 * jdiagengine is distributed in the hope that it will be useful, 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 * GNU General Public License for more details. 00015 * You should have received a copy of the GNU General Public License 00016 * along with jdiagengine. If not, see <http://www.gnu.org/licenses/>. 00017 * 00018 * Authors: Joerg Weber, Franz Wotawa 00019 * Contact: jweber@ist.tugraz.at (preferred), or fwotawa@ist.tugraz.at 00020 * 00021 */ 00022 00023 00024 package dfengine; 00025 00026 import java.util.*; 00027 00028 import utils.*; 00029 00030 public class ModeAssignmentDAGNode extends DoubleLinkedDAGNode { 00031 00032 Component comp; 00033 00034 public ModeAssignmentDAGNode(Component comp) { 00035 this.comp = comp; 00036 } 00037 00038 /* 00039 * Creates a clone of node. 00040 */ 00041 public ModeAssignmentDAGNode(ModeAssignmentDAGNode node) { 00042 super(node); 00043 this.comp = node.comp; 00044 } 00045 00046 public Object clone() { 00047 ModeAssignmentDAGNode node = new ModeAssignmentDAGNode(this); 00048 return node; 00049 } 00050 00051 public Component getFailurePred() { 00052 00053 if (parents.size() == 0) return null; 00054 else return ((ModeAssignmentDAGNode)getFirstParent()).comp; 00055 00056 } 00057 00058 public String toString() { 00059 return comp.getName(); 00060 } 00061 00062 protected boolean invariant() { 00063 if (parents.size() > 1) return false; 00064 00065 Component parent = getFailurePred(); 00066 if (parent != null) { 00067 if (!comp.hasFDGParent(parent)) return false; 00068 } 00069 00070 return true; 00071 } 00072 00073 }