diff --git a/src/org/ntlab/actions/AbstractFrameAction.java b/src/org/ntlab/actions/AbstractFrameAction.java new file mode 100644 index 0000000..0fed0cd --- /dev/null +++ b/src/org/ntlab/actions/AbstractFrameAction.java @@ -0,0 +1,26 @@ +package org.ntlab.actions; + +import java.awt.event.ActionEvent; + +import javax.swing.AbstractAction; + +import org.ntlab.deltaViewer.MagnetRONFrame; + +public class AbstractFrameAction extends AbstractAction { + + protected MagnetRONFrame magnetRONFrame = null; + + public AbstractFrameAction() { + } + + public AbstractFrameAction(String string, MagnetRONFrame magnetRONFrame) { + super(string); + this.magnetRONFrame = magnetRONFrame; + } + + @Override + public void actionPerformed(ActionEvent e) { + + } + +} diff --git a/src/org/ntlab/actions/OpenAction.java b/src/org/ntlab/actions/OpenAction.java new file mode 100644 index 0000000..c0620a1 --- /dev/null +++ b/src/org/ntlab/actions/OpenAction.java @@ -0,0 +1,41 @@ +package org.ntlab.actions; + +import java.awt.event.ActionEvent; +import java.io.File; + +import javax.swing.JFileChooser; +import javax.swing.filechooser.FileFilter; + +import org.ntlab.deltaViewer.MagnetRONFrame; + +public class OpenAction extends AbstractFrameAction { + + private String lastDir = null; + + public OpenAction(MagnetRONFrame magnetRONFrame) { + super("�J��...", magnetRONFrame); + } + + @Override + public void actionPerformed(ActionEvent e) { + String wd = (lastDir != null) ? lastDir : System.getProperty("user.dir"); + JFileChooser fc = new JFileChooser(wd); + // Adds file filter for supported file format + FileFilter defaultFilter = new FileFilter() { + public boolean accept(File file) { + String lcase = file.getName().toLowerCase(); + return lcase.endsWith(".magnet"); + } + @Override + public String getDescription() { + return null; + } + }; + fc.addChoosableFileFilter(defaultFilter); + int rc = fc.showDialog(null, "�J��"); + if (rc == JFileChooser.APPROVE_OPTION) { + lastDir = fc.getSelectedFile().getParent(); + } + } + +} diff --git a/src/org/ntlab/actions/StartAnimationAction.java b/src/org/ntlab/actions/StartAnimationAction.java new file mode 100644 index 0000000..4fa8a34 --- /dev/null +++ b/src/org/ntlab/actions/StartAnimationAction.java @@ -0,0 +1,21 @@ +package org.ntlab.actions; + +import java.awt.event.ActionEvent; + +import org.ntlab.deltaViewer.MagnetRONFrame; + +public class StartAnimationAction extends AbstractFrameAction { + + public StartAnimationAction(MagnetRONFrame magnetRONFrame) { + super("�Đ�", magnetRONFrame); + } + + @Override + public void actionPerformed(ActionEvent e) { + new Thread() { + public void run() { + magnetRONFrame.startCollaborationViewer(); + } + }.start(); + } +} diff --git a/src/org/ntlab/deltaViewer/MagnetRONFrame.java b/src/org/ntlab/deltaViewer/MagnetRONFrame.java index 0d71f3a..9c96d80 100644 --- a/src/org/ntlab/deltaViewer/MagnetRONFrame.java +++ b/src/org/ntlab/deltaViewer/MagnetRONFrame.java @@ -36,8 +36,11 @@ private DeltaExtractorJSON s = null; private CollaborationViewer viewer = null; + private MagnetRONMenuBar menuBar; private Map argsMap = new HashMap<>(); + private IObjectCallGraph objectCallGraph; + private IAliasCollector aliasCollector; public MagnetRONFrame() throws HeadlessException { super(WINDOW_TITLE); @@ -46,9 +49,21 @@ setLayout(new BorderLayout()); this.viewer = new CollaborationViewer(); getContentPane().add(viewer, BorderLayout.CENTER); + + menuBar = new MagnetRONMenuBar(this); + setJMenuBar(menuBar); + pack(); } + public void setTrace(TraceJSON trace) { + this.trace = trace; + } + + public TraceJSON getTrace() { + return trace; + } + public void startAnimation() { // Change Here! setArgmentsForDeltaExtract(argsMap); @@ -79,11 +94,13 @@ keys.add(argsKey3); keys.add(argsKey4); Map.Entry extracted = extractMulti(keys); - new Thread() { - public void run() { - startDeltaViewer(extracted.getKey(), extracted.getValue()); - } - }.start(); + objectCallGraph = extracted.getKey(); + aliasCollector = extracted.getValue(); +// new Thread() { +// public void run() { +// startDeltaViewer(extracted.getKey(), extracted.getValue()); +// } +// }.start(); } public Map.Entry extractMulti(List keys) { @@ -322,6 +339,30 @@ } } + public void startCollaborationViewer() { + // Build a frame, create a graph, and add the graph to the frame so you can actually see the graph. + if (objectCallGraph != null && aliasCollector != null) { + List relatedPoints = objectCallGraph.getRelatedPoints(); + TracePoint lastRP = relatedPoints.get(relatedPoints.size() - 1); + Map.Entry rpInf = MagnetRONViewer.getRelatedInformation(lastRP); + WINDOW_TITLE = "extract delta of:" + rpInf.getKey().getSrcClassName() + "(" + rpInf.getKey().getSrcObjectId() + ")" + " -> " + rpInf.getKey().getDstClassName()+ "(" + rpInf.getKey().getDstObjectId()+ ")"; + setTitle(WINDOW_TITLE); + + viewer.init(objectCallGraph, aliasCollector, new CollaborationLayout()); + List aliasList = new ArrayList<>(aliasCollector.getAliasList()); + +// dv.setCoordinatorPoint(1200, 100); + viewer.initAnimation(); +// for(int i = 0; i < aliasList.size(); i++) { +// System.out.println(aliasList.get(i).getObjectId() + ", " + aliasList.get(i).getMethodSignature() + " l." + aliasList.get(i).getLineNo() + " : " + aliasList.get(i).getAliasType().toString()); +// } + for (int i = 0; i <= aliasList.size(); i++) { + viewer.stepToAnimation(i); + } + + } + } + public void startDeltaViewer(IObjectCallGraph ocg, IAliasCollector ac) { // Build a frame, create a graph, and add the graph to the frame so you can actually see the graph. if (ocg != null) { diff --git a/src/org/ntlab/deltaViewer/MagnetRONMenuBar.java b/src/org/ntlab/deltaViewer/MagnetRONMenuBar.java new file mode 100644 index 0000000..1235651 --- /dev/null +++ b/src/org/ntlab/deltaViewer/MagnetRONMenuBar.java @@ -0,0 +1,27 @@ +package org.ntlab.deltaViewer; + +import javax.swing.JMenu; +import javax.swing.JMenuBar; + +import org.ntlab.actions.OpenAction; +import org.ntlab.actions.StartAnimationAction; + +public class MagnetRONMenuBar extends JMenuBar { + + public MagnetRONMenuBar(MagnetRONFrame magnetRONFrame) { + super(); + JMenu fileMenu = add(new JMenu("�t�@�C��")); + fileMenu.add(new OpenAction(magnetRONFrame)); + + JMenu extractsMenu = add(new JMenu("���o")); + + JMenu animationSettingMenu = add(new JMenu("�A�j���[�V�����ݒ�")); + + JMenu viewMenu = add(new JMenu("�\��")); + + JMenu animationMenu = add(new JMenu("�A�j���[�V����")); + animationMenu.add(new StartAnimationAction(magnetRONFrame)); + } + + +}