Skip to content

Commit eab7825

Browse files
authored
Merge pull request #54 from UCSDOalads/XYGBranch
Add Interactive Instance Constructor and Method
2 parents c49efae + 48df4f3 commit eab7825

10 files changed

+206
-29
lines changed

src/actions/AddInstanceMethodAction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
import actions.menu.ActionsMenuBarTitles;
1010
import paintcomponents.java.lazy.ClassPaintComponent;
11-
import paintcomponents.java.lazy.InstanceOperationComponent;
11+
import paintcomponents.java.interactive.InstanceOperationComponent;
1212
import paintcomponents.java.lazy.MethodPaintComponent;
1313

1414
public class AddInstanceMethodAction extends PaintAction {

src/actions/AddInstanceOperationAction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import actions.edit.undoredo.SharedUndoRedoActionManager;
77
import actions.edit.undoredo.UndoRedoableInterface;
88
import actions.menu.ActionsMenuBarTitles;
9-
import paintcomponents.java.lazy.InstanceOperationComponent;
9+
import paintcomponents.java.interactive.InstanceOperationComponent;
1010
import paintcomponents.java.lazy.ClassPaintComponent;
1111
import ui.PaintPanel;
1212

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package actions;
2+
3+
import actions.menu.ActionsMenuBarTitles;
4+
import paintcomponents.java.interactive.InstanceOperationComponent;
5+
import ui.PaintPanel;
6+
7+
public class ExecuteInstanceConstructorAction extends PaintAction {
8+
9+
public ExecuteInstanceConstructorAction(PaintPanel panel) {
10+
super(panel);
11+
}
12+
13+
@Override
14+
public boolean canPerformAction() {
15+
if (panel.getSelectTool().getSelectedComponents().size() != 1) {
16+
return false;
17+
}
18+
if (panel.getSelectTool().getSelectedComponents()
19+
.get(0) instanceof InstanceOperationComponent) {
20+
return true;
21+
}
22+
return false;
23+
}
24+
25+
@Override
26+
public void performAction() {
27+
InstanceOperationComponent insComp =
28+
(InstanceOperationComponent)panel.getSelectTool().
29+
getSelectedComponents().get(0);
30+
insComp.executeConstructor();
31+
}
32+
33+
@Override
34+
public String locationString() {
35+
// TODO Auto-generated method stub
36+
return ActionsMenuBarTitles.Lazy().Add().Execute_Instance_Constructor().toString();
37+
}
38+
39+
40+
41+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package actions;
2+
3+
import actions.menu.ActionsMenuBarTitles;
4+
import paintcomponents.java.interactive.MethodPaintComponent;
5+
import ui.PaintPanel;
6+
7+
public class ExecuteInstanceMethodAction extends PaintAction {
8+
9+
public ExecuteInstanceMethodAction(PaintPanel panel) {
10+
super(panel);
11+
}
12+
13+
@Override
14+
public boolean canPerformAction() {
15+
if (panel.getSelectTool().getSelectedComponents().size() != 1) {
16+
return false;
17+
}
18+
if (panel.getSelectTool().getSelectedComponents()
19+
.get(0) instanceof MethodPaintComponent) {
20+
return true;
21+
}
22+
return false;
23+
}
24+
25+
@Override
26+
public void performAction() {
27+
MethodPaintComponent methodComp =
28+
(MethodPaintComponent)panel.getSelectTool().
29+
getSelectedComponents().get(0);
30+
methodComp.executeMethod();
31+
}
32+
33+
@Override
34+
public String locationString() {
35+
// TODO Auto-generated method stub
36+
return ActionsMenuBarTitles.Lazy().Add().Execute_Instance_Method().toString();
37+
}
38+
39+
40+
41+
}

src/actions/menu/ActionsMenuBar.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@
4646
import actions.AddInstanceOperationAction;
4747
import actions.AddInteractiveConstructorAction;
4848
import actions.AddInteractiveJavaMethodComponentAction;
49+
import actions.ExecuteInstanceConstructorAction;
50+
import actions.ExecuteInstanceMethodAction;
4951

5052
public class ActionsMenuBar extends JMenuBar implements SelectionToolListener{
5153

@@ -70,6 +72,8 @@ public ActionsMenuBar(PaintPanel panel){
7072
addAction(new AddLazyJavaFieldsComponentAction(panel));
7173
addAction(new AddInstanceOperationAction(panel));
7274
addAction(new AddInstanceMethodAction(panel));
75+
addAction(new ExecuteInstanceConstructorAction(panel));
76+
addAction(new ExecuteInstanceMethodAction(panel));
7377

7478
//interactive
7579
addAction(new AddInteractiveConstructorAction(panel));

src/actions/menu/ActionsMenuBarTitles.java

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -143,15 +143,16 @@ public ActionsMenuBarTitles Zoom_Out() {
143143
return this;
144144
}
145145

146+
147+
148+
149+
146150
public ActionsMenuBarTitles Enter_Script() {
147151
append("Enter Script");
148152
return this;
149153
}
150154

151-
public ActionsMenuBarTitles Annotations() {
152-
append("Annotations");
153-
return this;
154-
}
155+
155156

156157
public ActionsMenuBarTitles RedoUndoHisotry(){
157158
append("Redo/Undo Hisotry");
@@ -168,9 +169,28 @@ public ActionsMenuBarTitles Add_Instance_Method() {
168169
return this;
169170
}
170171

172+
173+
public ActionsMenuBarTitles Execute_Instance_Constructor() {
174+
append("Execute Constructor");
175+
return this;
176+
}
177+
178+
public ActionsMenuBarTitles Execute_Instance_Method() {
179+
append("Execute Method");
180+
return this;
181+
}
182+
183+
public ActionsMenuBarTitles Annotations() {
184+
append("Annotations");
185+
return this;
186+
}
187+
188+
189+
171190
public ActionsMenuBarTitles Annotation_Font_Size() {
172191
append("Annotation Font Size");
173192

174193
return this;
175194
}
195+
176196
}

src/paintcomponents/java/interactive/ClassConstructorPaintComponent.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,10 @@ public boolean canProvideInformationToDataFromPoint(
116116

117117
return instance != null;
118118
}
119+
120+
public Class getSelectedClass() {
121+
return displayingConstructor.getDeclaringClass();
122+
}
119123

120124
public Class getDisplayingClass() {
121125
return displayingConstructor.getDeclaringClass();

src/paintcomponents/java/lazy/InstanceOperationComponent.java renamed to src/paintcomponents/java/interactive/InstanceOperationComponent.java

Lines changed: 66 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,86 +1,113 @@
1-
package paintcomponents.java.lazy;
1+
package paintcomponents.java.interactive;
22

33
import java.lang.reflect.Constructor;
44
import java.lang.reflect.Method;
5+
import java.util.ArrayList;
6+
import java.util.NoSuchElementException;
7+
8+
import javax.swing.JOptionPane;
59

610
import org.w3c.dom.Element;
711

12+
import paintcomponents.NoConnectingLineSegmentException;
813
import paintcomponents.data.DataFromPoint;
914
import paintcomponents.data.DataFromPointDataProvider;
15+
import paintcomponents.data.DataFromPointNoDataProviderException;
16+
import paintcomponents.data.DataFromPointProviderCannotProvideDataException;
1017
import paintcomponents.data.DataTextIOPaintComponent;
1118
import paintcomponents.data.DataToPoint;
1219
import painttools.tools.SelectTool;
20+
import typesystem.JavaType;
1321
import ui.PaintPanel;
14-
import java.util.ArrayList;
1522

1623
public 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
}

src/paintcomponents/java/interactive/MethodPaintComponent.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,4 +149,28 @@ public Object getInstance(){
149149
return instance;
150150
}
151151

152+
public void setInstance(Object instance) {
153+
this.instance = instance;
154+
}
155+
156+
public void executeMethod() {
157+
try {
158+
if (instance == null) {
159+
JOptionPane.showMessageDialog(null, "Please initiate an instance");
160+
return;
161+
}
162+
Object[] initargs = new Object[this.getToPoints().size()];
163+
for (int i = 0; i < initargs.length; i ++) {
164+
DataFromPoint fromP =
165+
this.getToPoints().get(i).getLineSegment().getFromPoint();
166+
initargs[i] = fromP.getProvider().provideInformationToDataFromPoint(fromP);
167+
}
168+
Object returnVal = this.displayingMethod.invoke(instance, initargs);
169+
System.out.println("method return val: " + returnVal);
170+
} catch (Exception e) {
171+
JOptionPane.showMessageDialog(null, "Error Occurs");
172+
e.printStackTrace();
173+
}
174+
}
175+
152176
}

src/paintcomponents/java/lazy/ClassConstructorPaintComponent.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -198,8 +198,5 @@ public ClassConstructorPaintComponent(Element rootElement,
198198

199199
}
200200

201-
public Class getSelectedClass() {
202-
return displayingConstructor.getDeclaringClass();
203-
}
204201

205202
}

0 commit comments

Comments
 (0)