1- package paintcomponents .java .lazy ;
1+ package paintcomponents .java .interactive ;
22
33import java .lang .reflect .Constructor ;
44import java .lang .reflect .Method ;
5+ import java .util .ArrayList ;
6+ import java .util .NoSuchElementException ;
7+
8+ import javax .swing .JOptionPane ;
59
610import org .w3c .dom .Element ;
711
12+ import paintcomponents .NoConnectingLineSegmentException ;
813import paintcomponents .data .DataFromPoint ;
914import paintcomponents .data .DataFromPointDataProvider ;
15+ import paintcomponents .data .DataFromPointNoDataProviderException ;
16+ import paintcomponents .data .DataFromPointProviderCannotProvideDataException ;
1017import paintcomponents .data .DataTextIOPaintComponent ;
1118import paintcomponents .data .DataToPoint ;
1219import painttools .tools .SelectTool ;
20+ import typesystem .JavaType ;
1321import ui .PaintPanel ;
14- import java .util .ArrayList ;
1522
1623public class InstanceOperationComponent extends DataTextIOPaintComponent
1724 implements DataFromPointDataProvider {
1825
1926 private int height ;
2027 private int unitHeight ;
2128
22- private ClassConstructorPaintComponent ctorPC ;
2329 private ArrayList <MethodPaintComponent > methods ;
2430
31+ private Constructor displayingConstructor ;
32+ private Object instance ;
2533
2634 public InstanceOperationComponent (Constructor displayingContructor ,
2735 int x , int y ) {
2836 super (displayingContructor .toString (), x , y );
29- ctorPC = new ClassConstructorPaintComponent (displayingContructor , x , y );
37+ this .displayingConstructor = displayingContructor ;
38+ init ();
3039 methods = new ArrayList <>();
3140 height = 0 ;
3241 }
3342
43+ private void init () {
3444
45+ // parameters take place from line 1 to length
46+ Class [] paramTypes = displayingConstructor .getParameterTypes ();
47+ for (int i = 0 ; i < paramTypes .length ; i ++) {
48+ addToPoint (i + 1 , new JavaType (paramTypes [i ]));
49+ }
50+
51+ // constructed instance take line length+1
52+ addFromPoint (this , paramTypes .length + 1 ,
53+ new JavaType (this .displayingConstructor .getDeclaringClass ()));
54+
55+ // prepare String
56+ StringBuilder s = new StringBuilder ();
57+ s .append (this .displayingConstructor .toString () + "\n " );
58+ for (int i = 0 ; i < paramTypes .length ; i ++) {
59+ s .append ("arg" + i + " :: " + paramTypes [i ].getName () + "\n " );
60+ }
61+
62+ s .append ("Constructed Instance >>>> " + "\n " );
63+ setDisplayingText (s .toString ());
64+
65+ }
66+
3567 @ Override
3668 public Object provideInformationToDataFromPoint (DataFromPoint dataFromPoint ) {
37- return ctorPC . provideInformationToDataFromPoint ( dataFromPoint ) ;
69+ return instance ;
3870 }
3971
4072 @ Override
4173 public boolean canProvideInformationToDataFromPoint (DataFromPoint dataFromPoint ) {
42- return ctorPC . canProvideInformationToDataFromPoint ( dataFromPoint ) ;
74+ return instance != null ;
4375 }
4476
45-
4677 public void addMethodPaintComponent (Method method , PaintPanel panel ) {
4778 if (height == 0 ) {
4879 height = this .getRowHeight () * this .getNumberOfRows ();
4980 unitHeight = this .getRowHeight ();
5081 }
5182
5283 MethodPaintComponent methodComp = new MethodPaintComponent (
53- method , this .getX (), this .getY () + height );
84+ method , instance , this .getX (), this .getY () + height );
5485 String [] rows = methodComp .getDisplayingText ().split ("\n " );
5586 height += unitHeight * rows .length ;
5687 methods .add (methodComp );
5788 panel .addPaintComponent (methodComp );
5889 panel .repaint ();
5990 }
6091
61-
92+
6293 public Class getDisplayingClass () {
63- return ctorPC . getSelectedClass ();
94+ return displayingConstructor . getDeclaringClass ();
6495 }
6596
6697 @ Override
6798 public void translate (int i , int j ) {
6899 // TODO Auto-generated method stub
69100 super .translate (i , j );
70- ctorPC .translate (i , j );
71101 methods .forEach (e -> e .translate (i , j ));
72102 }
73103
74104 @ Override
75105 public boolean contains (int x , int y ) {
76106 // TODO Auto-generated method stub
77- if (ctorPC .contains (x , y )) {
78- return true ;
79- } else {
80- for (MethodPaintComponent method : methods ) {
81- if (method .contains (x , y )) {
82- return true ;
83- }
107+
108+ for (MethodPaintComponent method : methods ) {
109+ if (method .contains (x , y )) {
110+ return true ;
84111 }
85112 }
86113 return super .contains (x , y );
@@ -91,9 +118,11 @@ public boolean contains(int x, int y) {
91118 public void select (SelectTool selectTool ) {
92119 int x = selectTool .getLastMouseEvent ().getX ();
93120 int y = selectTool .getLastMouseEvent ().getY ();
121+
94122 for (MethodPaintComponent method : methods ) {
95123 if (method .contains (x , y )) {
96124 method .select (selectTool );
125+ return ;
97126 }
98127 }
99128 super .select (selectTool );
@@ -104,6 +133,7 @@ public void select(SelectTool selectTool) {
104133 public void deselect (SelectTool selectTool ) {
105134 int x = selectTool .getLastMouseEvent ().getX ();
106135 int y = selectTool .getLastMouseEvent ().getY ();
136+
107137 for (MethodPaintComponent method : methods ) {
108138 if (method .contains (x , y )) {
109139 method .select (selectTool );
@@ -112,6 +142,22 @@ public void deselect(SelectTool selectTool) {
112142 super .deselect (selectTool );
113143 }
114144
115-
116-
145+ public void executeConstructor () {
146+
147+ try {
148+ Object [] initargs = new Object [this .getToPoints ().size ()];
149+ for (int i = 0 ; i < initargs .length ; i ++) {
150+ DataFromPoint fromP =
151+ this .getToPoints ().get (i ).getLineSegment ().getFromPoint ();
152+ initargs [i ] = fromP .getProvider ().provideInformationToDataFromPoint (fromP );
153+ }
154+ instance = this .displayingConstructor .newInstance (initargs );
155+ methods .forEach (e -> e .setInstance (instance ));
156+ System .out .println ("new instance: " + instance );
157+ } catch (Exception e ) {
158+ JOptionPane .showMessageDialog (null , "Not Valid Parameters" );
159+ e .printStackTrace ();
160+ }
161+ }
162+
117163}
0 commit comments