Skip to content

Package: MainViewLogic$1

MainViewLogic$1

nameinstructionbranchcomplexitylinemethod
mouseClicked(MouseEvent)
M: 14 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 4 C: 0
0%
M: 1 C: 0
0%
{...}
M: 9 C: 0
0%
M: 0 C: 0
100%
M: 1 C: 0
0%
M: 1 C: 0
0%
M: 1 C: 0
0%

Coverage

1: package gui;
2:
3: import java.awt.event.ActionEvent;
4: import java.awt.event.ActionListener;
5: import java.awt.event.MouseAdapter;
6: import java.awt.event.MouseEvent;
7: import java.awt.event.MouseListener;
8: import java.util.ArrayList;
9:
10: import javax.swing.JOptionPane;
11: import javax.swing.JTree;
12: import javax.swing.event.TreeSelectionEvent;
13: import javax.swing.event.TreeSelectionListener;
14: import javax.swing.table.DefaultTableModel;
15: import javax.swing.table.TableModel;
16: import javax.swing.tree.DefaultMutableTreeNode;
17: import javax.swing.tree.DefaultTreeModel;
18:
19: import gui.datamodels.AssignmentTableDataModel;
20: import gui.datamodels.DefinitionTableDataModel;
21: import gui.datamodels.TypeTableDataModel;
22: import gui.view.MainView;
23: import gui.wrapperobjects.ConfigurationCategoryWrapper;
24: import gui.wrapperobjects.ConfigurationWrapper;
25: import gui.wrapperobjects.ConfiguredPackageWrapper;
26: import gui.wrapperobjects.DefaultTreeElementVisitor;
27: import gui.wrapperobjects.DefinitionFileWrapper;
28: import gui.wrapperobjects.PackageCategoryWrapper;
29: import gui.wrapperobjects.PackageWrapper;
30: import gui.wrapperobjects.RootWrapper;
31: import gui.wrapperobjects.SoftwareWrapper;
32: import gui.wrapperobjects.TreeElement;
33: import gui.wrapperobjects.TreeElementVisitor;
34: import gui.wrapperobjects.TypeFileWrapper;
35: import model.ConfiguredPackage;
36: import model.Package;
37: import model.RouterConfiguration;
38: import model.RouterSoftware;
39: import model.assignment.AssignmentFile;
40: import model.assignment.VariableAssignment;
41: import model.definition.AbstractVariableDefinition;
42: import model.definition.DefinitionFile;
43: import model.type.NamedVariableType;
44: import model.type.TypeFile;
45: import networkconfigurator.ConfigurationGraph;
46: import printer.PrinterException;
47:
48: /**
49: * Contains model and logic for GUI-elements.
50: *
51: * @author Phil
52: *
53: */
54: public final class MainViewLogic {
55:
56:         /**
57:          * Used by {@link MainViewLogic#updateTableView(Object)}.
58:          */
59:         private final class UpdateTableTreeElementVisitor implements TreeElementVisitor {
60:                 @Override
61:                 public void visit(final TypeFileWrapper element) {
62:                         setTypeTM(element.getTypeFile());
63:                 }
64:
65:                 @Override
66:                 public void visit(final DefinitionFileWrapper element) {
67:                         setDefinitionTM(element.getDefFile());
68:                 }
69:
70:                 @Override
71:                 public void visit(final PackageWrapper element) {
72:                         cleartableView();
73:                 }
74:
75:                 @Override
76:                 public void visit(final PackageCategoryWrapper element) {
77:                         cleartableView();
78:                 }
79:
80:                 @Override
81:                 public void visit(final ConfiguredPackageWrapper element) {
82:                         setAssignmentTM(element.getPackage().getAssignmentFile());
83:                 }
84:
85:                 @Override
86:                 public void visit(final ConfigurationWrapper element) {
87:                         cleartableView();
88:                 }
89:
90:                 @Override
91:                 public void visit(final ConfigurationCategoryWrapper element) {
92:                         cleartableView();
93:                 }
94:
95:                 @Override
96:                 public void visit(final SoftwareWrapper element) {
97:                         cleartableView();
98:                 }
99:
100:                 @Override
101:                 public void visit(final RootWrapper element) {
102:                         cleartableView();
103:                 }
104:         }
105:
106:         /**
107:          * the view to set.
108:          */
109:         private final MainView mainView;
110:         /**
111:          * The controller (mvc).
112:          */
113:         private final MainController controller;
114:         /**
115:          * the tree model.
116:          */
117:         private DefaultTreeModel modelTree;
118:         /**
119:          * The root-element.
120:          */
121:         private DefaultMutableTreeNode root;
122:
123:         /**
124:          * constructor. Creates the view.
125:          *
126:          * @param controller
127:          * the controller to set.
128:          */
129:         public MainViewLogic(final MainController controller) {
130:                 this.controller = controller;
131:                 this.mainView = new MainView();
132:                 this.mainView.getjFrame().setVisible(true);
133:                 initLogic();
134:                 initModelData();
135:         }
136:
137:         /**
138:          * Creates Model Objects for GUI (TreeModel/TableModel). Uses the controller. No side effects.
139:          */
140:         private void initModelData() {
141:                 this.root = new DefaultMutableTreeNode(new RootWrapper());
142:                 this.modelTree = new DefaultTreeModel(this.root);
143:                 this.modelTree.setRoot(this.root);
144:                 this.getMainView().getTreeArea().getTree().setModel(this.modelTree);
145:         }
146:
147:         /**
148:          * Creates logic for GUI (listener).
149:          */
150:         private void initLogic() {
151:
152:                 final MainViewLogic mainViewLogicThis = this;
153:                 final MouseListener mlBtnAddRouter = new MouseAdapter() {
154:                         @Override
155:                         public void mouseClicked(final MouseEvent arg0) {
156:
157:                                 final AddRouterViewLogic addRouterView =
158:                                                 new AddRouterViewLogic(getController(), mainViewLogicThis);
159:                                 addRouterView.getAddRouterView().setVisible(true);
160:
161:                         }
162:                 };
163:                 this.getMainView().getMainViewMenueArea().getBtnAddRouter()
164:                                 .addMouseListener(mlBtnAddRouter);
165:
166:                 this.getMainView().getTreeArea().getSaveMenuItem()
167:                                 .addActionListener(new ActionListener() {
168:
169:                                         @Override
170:                                         public void actionPerformed(final ActionEvent arg0) {
171:                                                 final int returnValue = JOptionPane.showConfirmDialog(
172:                                                                 getMainView().getjFrame(), basic.GuiConstants.SAVECONFIRMDIALOG,
173:                                                                 basic.GuiConstants.SAVETEXT, JOptionPane.YES_NO_OPTION);
174:                                                 if (returnValue == JOptionPane.YES_OPTION) {
175:                                                         try {
176:                                                                 saveYesPressed();
177:                                                         } catch (final GuiException e1) {
178:                                                                 new ExceptionViewLogic(getController(), e1);
179:
180:                                                         }
181:                                                 }
182:                                         }
183:
184:                                 });
185:
186:                 this.getMainView().getTreeArea().getItemForGraphicalConfig()
187:                                 .addActionListener(new ActionListener() {
188:                                         @Override
189:                                         public void actionPerformed(final ActionEvent arg0) {
190:                                                 openGraphicalGraph();
191:                                         }
192:
193:                                 });
194:
195:                 // depending on the selected item in tree, the table changes.
196:                 this.getMainView().getTreeArea().getTree().getSelectionModel()
197:                                 .addTreeSelectionListener(new TreeSelectionListener() {
198:                                         @Override
199:                                         public void valueChanged(final TreeSelectionEvent e) {
200:                                                 final DefaultMutableTreeNode dMTN =
201:                                                                 (DefaultMutableTreeNode) e.getPath().getLastPathComponent();
202:                                                 updateTableView(dMTN.getUserObject());
203:
204:                                         }
205:                                 });
206:
207:                 // save-context for assignmentfile.
208:                 this.getMainView().getTreeArea().getTree().addMouseListener(new MouseAdapter() {
209:                         @Override
210:                         public void mouseReleased(final MouseEvent e) {
211:                                 if (e.getButton() == MouseEvent.BUTTON3) {
212:                                         final JTree activeTree = (JTree) e.getSource();
213:                                         final DefaultMutableTreeNode activeNode =
214:                                                         (DefaultMutableTreeNode) activeTree.getLastSelectedPathComponent();
215:                                         ((TreeElement) activeNode.getUserObject())
216:                                                         .accept(new DefaultTreeElementVisitor() {
217:                                                                 @Override
218:                                                                 public void visit(final ConfiguredPackageWrapper element) {
219:                                                                         mainViewLogicThis.getMainView().getTreeArea()
220:                                                                                         .getPopSaveAssignment()
221:                                                                                         .show(e.getComponent(), e.getX(), e.getY());
222:                                                                 }
223:
224:                                                                 @Override
225:                                                                 public void visit(final ConfigurationWrapper element) {
226:                                                                         mainViewLogicThis.getMainView().getTreeArea()
227:                                                                                         .getPopupForGraphicalConfig()
228:                                                                                         .show(e.getComponent(), e.getX(), e.getY());
229:                                                                 }
230:                                                         });
231:                                 }
232:                         }
233:                 });
234:         }
235:
236:         /**
237:          * @param tempmainView
238:          * @throws GuiException
239:          * if building the gui causes an exception.
240:          */
241:         private void saveYesPressed() throws GuiException {
242:
243:                 final DefaultMutableTreeNode activeElement = (DefaultMutableTreeNode) this.getMainView()
244:                                 .getTreeArea().getTree().getSelectionPath().getLastPathComponent();
245:                 final TreeElement activeWrapper = (TreeElement) activeElement.getUserObject();
246:                 activeWrapper.accept(new DefaultTreeElementVisitor() {
247:                         @Override
248:                         public void visit(final ConfiguredPackageWrapper element) {
249:                                 final ConfiguredPackage pkg = element.getPackage();
250:                                 try {
251:                                         MainViewLogic.this.getController().save(pkg.getAssignmentFile(),
252:                                                         pkg.getPath());
253:                                 } catch (final PrinterException e1) {
254:                                         new ExceptionViewLogic(MainViewLogic.this.getController(), e1);
255:                                 }
256:                         }
257:                 });
258:         }
259:
260:         /**
261:          * Performs the action graphical graph should be opened.
262:          *
263:          */
264:         private void openGraphicalGraph() {
265:                 final DefaultMutableTreeNode activeElement = (DefaultMutableTreeNode) this.getMainView()
266:                                 .getTreeArea().getTree().getSelectionPath().getLastPathComponent();
267:                 final TreeElement activeWrapper = (TreeElement) activeElement.getUserObject();
268:                 activeWrapper.accept(new DefaultTreeElementVisitor() {
269:                         @Override
270:                         public void visit(final ConfigurationWrapper element) {
271:                                 ConfigurationGraph.executeConfigurationGraph(element.getConfiguration());
272:                         }
273:                 });
274:
275:         }
276:
277:         /**
278:          * Adds a software directory.
279:          *
280:          * @param rs
281:          * The RouterSoftware.
282:          */
283:         public void addSofwareToTreeModel(final RouterSoftware rs) {
284:                 final DefaultMutableTreeNode rsNode = new DefaultMutableTreeNode(new SoftwareWrapper(rs));
285:                 this.root.add(rsNode);
286:
287:                 final DefaultMutableTreeNode pkgNode =
288:                                 new DefaultMutableTreeNode(new PackageCategoryWrapper());
289:                 rsNode.add(pkgNode);
290:
291:                 for (Package pkg : rs.getPackages().values()) {
292:                         final DefaultMutableTreeNode packChild =
293:                                         new DefaultMutableTreeNode(new PackageWrapper(pkg));
294:                         pkgNode.add(packChild);
295:                         packChild
296:                                         .add(new DefaultMutableTreeNode(new DefinitionFileWrapper(pkg.getDefFile())));
297:                         packChild.add(new DefaultMutableTreeNode(new TypeFileWrapper(pkg.getTypeFile())));
298:                 }
299:
300:                 try {
301:                         final RouterConfiguration rc = rs.getDefaultConfiguration();
302:
303:                         final DefaultMutableTreeNode configsNode =
304:                                         new DefaultMutableTreeNode(new ConfigurationCategoryWrapper());
305:                         rsNode.add(configsNode);
306:
307:                         final DefaultMutableTreeNode confNode =
308:                                         new DefaultMutableTreeNode(new ConfigurationWrapper(rc));
309:                         configsNode.add(confNode);
310:
311:                         for (ConfiguredPackage pkg : rc.getPackages().values()) {
312:                                 final DefaultMutableTreeNode packChild =
313:                                                 new DefaultMutableTreeNode(new ConfiguredPackageWrapper(pkg));
314:                                 confNode.add(packChild);
315:                         }
316:
317:                 } catch (final Exception e) {
318:                         new ExceptionViewLogic(getController(), new GuiException(
319:                                         "Default configuration could not be parsed: " + e.getMessage(), e));
320:                 }
321:         }
322:
323:         /**
324:          * @param source
325:          * the source object from the view which was clicked.
326:          */
327:         private void updateTableView(final Object source) {
328:                 final TreeElement wrappedSource = (TreeElement) source;
329:                 wrappedSource.accept(new UpdateTableTreeElementVisitor());
330:         }
331:
332:         /**
333:          * clears the tablemodel.
334:          */
335:         private void cleartableView() {
336:                 final TableModel dataModel = new DefaultTableModel();
337:                 this.getMainView().getTableArea().getTable().setModel(dataModel);
338:         }
339:
340:         /**
341:          * @param assignmentFile
342:          * The assignmentfile to set. builds up the TableModel for an AssignmentFile and sets
343:          * the View Table.
344:          */
345:         private void setAssignmentTM(final AssignmentFile assignmentFile) {
346:                 // TODO Detach Observer from previous assignment file.
347:                 assignmentFile.addObserver(this.getMainView().getTableArea());
348:                 final AssignmentTableDataModel dataModel = new AssignmentTableDataModel(
349:                                 new ArrayList<VariableAssignment>(assignmentFile.getAssignments().values()));
350:
351:                 this.getMainView().getTableArea().getTable().setModel(dataModel);
352:                 this.getMainView().getTableArea().getTable().getColumnModel().getColumn(0)
353:                                 .setResizable(true);
354:                 this.getMainView().getTableArea().getTable().getColumnModel().getColumn(0)
355:                                 .setPreferredWidth(this.getMainView().getRightTablePanel().getWidth()
356:                                                 / basic.GuiConstants.ASSIGNDIVIDE);
357:                 this.getMainView().getTableArea().getTable().getColumnModel().getColumn(1)
358:                                 .setResizable(true);
359:                 this.getMainView().getTableArea().getTable().getColumnModel().getColumn(1)
360:                                 .setPreferredWidth(this.getMainView().getRightTablePanel().getWidth()
361:                                                 / basic.GuiConstants.ASSIGNDIVIDE);
362:         }
363:
364:         /**
365:          * @param definFileition
366:          * the definitionfile to set. builds up the TableModel for a DefinitionFile and sets
367:          * the View Table.
368:          */
369:         private void setDefinitionTM(final DefinitionFile definFileition) {
370:                 final DefinitionTableDataModel dataModel =
371:                                 new DefinitionTableDataModel(new ArrayList<AbstractVariableDefinition>(
372:                                                 definFileition.getDefinitions().values()));
373:
374:                 this.getMainView().getTableArea().getTable().setModel(dataModel);
375:                 this.getMainView().getTableArea().getTable().getColumnModel().getColumn(0)
376:                                 .setResizable(true);
377:                 this.getMainView().getTableArea().getTable().getColumnModel().getColumn(0)
378:                                 .setPreferredWidth(this.getMainView().getRightTablePanel().getWidth()
379:                                                 / basic.GuiConstants.DEFINITIONDIVIDE);
380:                 this.getMainView().getTableArea().getTable().getColumnModel().getColumn(1)
381:                                 .setResizable(true);
382:                 this.getMainView().getTableArea().getTable().getColumnModel().getColumn(1)
383:                                 .setPreferredWidth(this.getMainView().getRightTablePanel().getWidth()
384:                                                 / basic.GuiConstants.DEFINITIONDIVIDE);
385:                 this.getMainView().getTableArea().getTable().getColumnModel().getColumn(2)
386:                                 .setResizable(true);
387:                 this.getMainView().getTableArea().getTable().getColumnModel().getColumn(2)
388:                                 .setPreferredWidth(this.getMainView().getRightTablePanel().getWidth()
389:                                                 / basic.GuiConstants.DEFINITIONDIVIDE);
390:                 this.getMainView().getTableArea().getTable().getColumnModel().getColumn(1 + 2)
391:                                 .setResizable(true);
392:                 this.getMainView().getTableArea().getTable().getColumnModel().getColumn(1 + 2)
393:                                 .setPreferredWidth(this.getMainView().getRightTablePanel().getWidth()
394:                                                 / basic.GuiConstants.DEFINITIONDIVIDE);
395:                 this.getMainView().getTableArea().getTable().getColumnModel().getColumn(2 + 2)
396:                                 .setResizable(true);
397:                 this.getMainView().getTableArea().getTable().getColumnModel().getColumn(2 + 2)
398:                                 .setPreferredWidth(this.getMainView().getRightTablePanel().getWidth()
399:                                                 / basic.GuiConstants.DEFINITIONDIVIDE);
400:
401:         }
402:
403:         /**
404:          * @param typeFileition
405:          * the typefile. builds up the TableModel for a TypeFile and sets the View Table.
406:          */
407:         private void setTypeTM(final TypeFile typeFileition) {
408:                 final TypeTableDataModel dataModel = new TypeTableDataModel(
409:                                 new ArrayList<NamedVariableType>(typeFileition.getTypes().values()));
410:                 this.getMainView().getTableArea().getTable().setModel(dataModel);
411:                 this.getMainView().getTableArea().getTable().getColumnModel().getColumn(0)
412:                                 .setResizable(true);
413:                 this.getMainView().getTableArea().getTable().getColumnModel().getColumn(0)
414:                                 .setPreferredWidth(this.getMainView().getRightTablePanel().getWidth()
415:                                                 / basic.GuiConstants.TYPEDIVIDE);
416:                 this.getMainView().getTableArea().getTable().getColumnModel().getColumn(1)
417:                                 .setResizable(true);
418:                 this.getMainView().getTableArea().getTable().getColumnModel().getColumn(1)
419:                                 .setPreferredWidth(this.getMainView().getRightTablePanel().getWidth()
420:                                                 / basic.GuiConstants.TYPEDIVIDE);
421:                 this.getMainView().getTableArea().getTable().getColumnModel().getColumn(2)
422:                                 .setResizable(true);
423:                 this.getMainView().getTableArea().getTable().getColumnModel().getColumn(2)
424:                                 .setPreferredWidth((this.getMainView().getRightTablePanel().getWidth()
425:                                                 / basic.GuiConstants.TYPEDIVIDE) * 2);
426:         }
427:
428:         /**
429:          * @return the controller
430:          */
431:         protected MainController getController() {
432:                 return this.controller;
433:         }
434:
435:         /**
436:          * @return the view
437:          */
438:         public MainView getMainView() {
439:                 return this.mainView;
440:         }
441:
442: }