00001 package edu.ksu.cis.bandera.specification.pattern.node;
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 import java.util.*;
00039 import edu.ksu.cis.bandera.specification.pattern.analysis.*;
00040
00041 public final class AUnit extends PUnit
00042 {
00043 private final LinkedList _pattern_ = new TypedLinkedList(new Pattern_Cast());
00044
00045 private class Pattern_Cast implements Cast
00046 {
00047 public Object cast(Object o)
00048 {
00049 PPattern node = (PPattern) o;
00050
00051 if((node.parent() != null) &&
00052 (node.parent() != AUnit.this))
00053 {
00054 node.parent().removeChild(node);
00055 }
00056
00057 if((node.parent() == null) ||
00058 (node.parent() != AUnit.this))
00059 {
00060 node.parent(AUnit.this);
00061 }
00062
00063 return node;
00064 }
00065 }
00066 public AUnit()
00067 {
00068 }
00069 public AUnit(
00070 XPPattern _pattern_)
00071 {
00072 if(_pattern_ != null)
00073 {
00074 while(_pattern_ instanceof X1PPattern)
00075 {
00076 this._pattern_.addFirst(((X1PPattern) _pattern_).getPPattern());
00077 _pattern_ = ((X1PPattern) _pattern_).getXPPattern();
00078 }
00079 this._pattern_.addFirst(((X2PPattern) _pattern_).getPPattern());
00080 }
00081
00082 }
00083 public AUnit(
00084 List _pattern_)
00085 {
00086 {
00087 Object temp[] = _pattern_.toArray();
00088 for(int i = 0; i < temp.length; i++)
00089 {
00090 this._pattern_.add(temp[i]);
00091 }
00092 }
00093
00094 }
00095 public void apply(Switch sw)
00096 {
00097 ((Analysis) sw).caseAUnit(this);
00098 }
00099 public Object clone()
00100 {
00101 return new AUnit(
00102 cloneList(_pattern_));
00103 }
00104 public LinkedList getPattern()
00105 {
00106 return _pattern_;
00107 }
00108 void removeChild(Node child)
00109 {
00110 if(_pattern_.remove(child))
00111 {
00112 return;
00113 }
00114
00115 }
00116 void replaceChild(Node oldChild, Node newChild)
00117 {
00118 for(ListIterator i = _pattern_.listIterator(); i.hasNext();)
00119 {
00120 if(i.next() == oldChild)
00121 {
00122 if(newChild != null)
00123 {
00124 i.set(newChild);
00125 oldChild.parent(null);
00126 return;
00127 }
00128
00129 i.remove();
00130 oldChild.parent(null);
00131 return;
00132 }
00133 }
00134
00135 }
00136 public void setPattern(List list)
00137 {
00138 Object temp[] = list.toArray();
00139 for(int i = 0; i < temp.length; i++)
00140 {
00141 _pattern_.add(temp[i]);
00142 }
00143 }
00144 public String toString()
00145 {
00146 return ""
00147 + toString(_pattern_);
00148 }
00149 }