Skip to content

Commit fa40597

Browse files
committed
Add Java Fields Display
1 parent 5a94755 commit fa40597

File tree

7 files changed

+145
-6
lines changed

7 files changed

+145
-6
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package actions;
2+
3+
import actions.menu.ActionsMenuBarTitles;
4+
import paintcomponents.java.lazy.ClassPaintComponent;
5+
import paintcomponents.java.lazy.FieldsPaintComponent;
6+
import ui.PaintPanel;
7+
8+
public class AddLazyJavaFieldsComponentAction extends PaintAction {
9+
10+
public AddLazyJavaFieldsComponentAction(PaintPanel panel) {
11+
super(panel);
12+
}
13+
//TODO
14+
//NOTE: I am copying from Constructor and Methods, consider refinement
15+
@Override
16+
public boolean canPerformAction() {
17+
if (panel.getSelectTool().getSelectedComponents().size() != 1) {
18+
return false;
19+
}
20+
if (panel.getSelectTool().getSelectedComponents()
21+
.get(0) instanceof ClassPaintComponent) {
22+
return true;
23+
}
24+
return false;
25+
}
26+
@Override
27+
public void performAction() {
28+
ClassPaintComponent comp = (ClassPaintComponent) panel.getSelectTool()
29+
.getSelectedComponents().get(0);
30+
31+
FieldsPaintComponent fieldsComp =
32+
new FieldsPaintComponent(comp.getDisplayingClass(),
33+
panel.getWidth() / 2,
34+
panel.getHeight() / 2);
35+
panel.addPaintComponent(fieldsComp);
36+
panel.repaint();
37+
}
38+
39+
@Override
40+
public String locationString() {
41+
return ActionsMenuBarTitles.Lazy().Add().Java_Fields().toString();
42+
}
43+
44+
}

src/actions/menu/ActionsMenuBar.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import actions.AddDataInputBoxAction;
1414
import actions.AddLazyJavaClassAction;
1515
import actions.AddLazyJavaConstructorAction;
16+
import actions.AddLazyJavaFieldsComponentAction;
1617
import actions.AddLazyJavaMethodComponentAction;
1718
import actions.AddTextBoxAction;
1819
import actions.ConstructDataLineSegmentAction;
@@ -42,6 +43,7 @@ public ActionsMenuBar(PaintPanel panel){
4243
addAction(new AddLazyJavaClassAction(panel));
4344
addAction(new AddLazyJavaConstructorAction(panel));
4445
addAction(new AddLazyJavaMethodComponentAction(panel));
46+
addAction(new AddLazyJavaFieldsComponentAction(panel));
4547

4648
}
4749

src/actions/menu/ActionsMenuBarTitles.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,11 @@ public ActionsMenuBarTitles Java_Method() {
7979
append("Java Method");
8080
return this;
8181
}
82+
83+
public ActionsMenuBarTitles Java_Fields() {
84+
append("Java Fields");
85+
return this;
86+
}
8287

8388

8489
}

src/paintcomponents/data/DataDisplayPaintComponent.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,10 @@
1212
//TODO THIS class is a copy of DataInputTextfieldPaintComponent class, please consider abstraction
1313
public class DataDisplayPaintComponent extends DataTextIOPaintComponent {
1414

15-
private DataToPoint toPoint;
1615

1716
public DataDisplayPaintComponent(String displayingText, int x, int y) {
1817
super(displayingText, x, y);
19-
this.toPoint = addToPoint(0);
18+
addToPoint(0);
2019
}
2120

2221
/**
@@ -30,7 +29,7 @@ public DataDisplayPaintComponent(String displayingText, int x, int y) {
3029
* @see DataToPoint.fetchData for exception details
3130
*/
3231
public void updateDisplayText() throws NoSuchElementException, NoConnectingLineSegmentException, DataFromPointNoDataProviderException, DataFromPointProviderCannotProvideDataException{
33-
Object data = toPoint.fetchData();
32+
Object data = getToPoints().get(0).fetchData();
3433
if(data instanceof String){
3534
this.setDisplayingText(data.toString());
3635
} else {

src/paintcomponents/data/DataTextIOPaintComponent.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,10 +91,9 @@ public void addFromPoint(DataFromPointDataProvider provider, int yShift) {
9191
* the row number
9292
* @return the added toPoint
9393
*/
94-
public DataToPoint addToPoint(int yShift) {
94+
public void addToPoint(int yShift) {
9595
DataToPoint toPoint = new DataToPoint(getX(), getY());
9696
toPoints.add(new DataToPointInfo(toPoint, yShift));
97-
return toPoint;
9897

9998
}
10099

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
package paintcomponents.java.lazy;
2+
3+
import java.lang.reflect.Field;
4+
import java.util.ArrayList;
5+
import java.util.NoSuchElementException;
6+
7+
import paintcomponents.NoConnectingLineSegmentException;
8+
import paintcomponents.data.DataFromPoint;
9+
import paintcomponents.data.DataFromPointDataProvider;
10+
import paintcomponents.data.DataFromPointNoDataProviderException;
11+
import paintcomponents.data.DataFromPointProviderCannotProvideDataException;
12+
import paintcomponents.data.DataTextIOPaintComponent;
13+
14+
public class FieldsPaintComponent extends DataTextIOPaintComponent implements DataFromPointDataProvider{
15+
16+
private Class displayingClass;
17+
18+
public FieldsPaintComponent(Class displayingClass, int x, int y) {
19+
super(displayingClass.getName(), x, y);
20+
this.displayingClass = displayingClass;
21+
22+
init();
23+
}
24+
25+
private void init() {
26+
/*
27+
* Line 1 class name
28+
* line 2 in instance
29+
* line 3 .. the fields
30+
*/
31+
Field[] fields = displayingClass.getFields();
32+
33+
//the left receiving instance
34+
addToPoint(1);
35+
36+
for (int i = 0; i < fields.length; i++) {
37+
addFromPoint(this, i + 2);
38+
}
39+
40+
41+
// prepare String
42+
StringBuilder s = new StringBuilder();
43+
s.append(this.displayingClass.toString() + "\n");
44+
s.append(">>> Operating Instance :: "
45+
+ "\n");
46+
for (int i = 0; i < fields.length; i++) {
47+
s.append("arg" + i + " :: " + fields[i].getName() + "\n");
48+
}
49+
50+
setDisplayingText(s.toString());
51+
52+
}
53+
54+
@Override
55+
public Object provideInformationToDataFromPoint(
56+
DataFromPoint dataFromPoint) {
57+
int index = getFromPoints().indexOf(dataFromPoint);
58+
Field[] fields = displayingClass.getFields();
59+
Field field = fields[index];
60+
61+
Object operatingInstance = null;
62+
try {
63+
operatingInstance = getToPoints().get(0).fetchData();
64+
} catch (NoSuchElementException | NoConnectingLineSegmentException
65+
| DataFromPointNoDataProviderException
66+
| DataFromPointProviderCannotProvideDataException e1) {
67+
e1.printStackTrace();
68+
// TODO Handle Exception
69+
// Note: a static method may not contain an valid instance
70+
// throw new IllegalStateException();
71+
}
72+
73+
try {
74+
return field.get(operatingInstance);
75+
} catch (IllegalArgumentException | IllegalAccessException e) {
76+
// TODO Auto-generated catch block
77+
e.printStackTrace();
78+
// TODO Handle Exception
79+
throw new IllegalStateException();
80+
}
81+
}
82+
83+
@Override
84+
public boolean canProvideInformationToDataFromPoint(
85+
DataFromPoint dataFromPoint) {
86+
//TODO IMPORTANT Implement this method
87+
return true;
88+
}
89+
90+
}

src/paintcomponents/java/lazy/MethodPaintComponent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ private void init() {
6262
// prepare String
6363
StringBuilder s = new StringBuilder();
6464
s.append(this.displayingMethod.toString() + "\n");
65-
s.append(">>> Operating Instance :: " + this.displayingMethod.toString()
65+
s.append(">>> Operating Instance :: "
6666
+ "\n");
6767
for (int i = 0; i < paramTypes.length; i++) {
6868
s.append("arg" + i + " :: " + paramTypes[i].getName() + "\n");

0 commit comments

Comments
 (0)