diff --git a/TestPluginProject/.gitignore b/TestPluginProject/.gitignore new file mode 100644 index 0000000..ae3c172 --- /dev/null +++ b/TestPluginProject/.gitignore @@ -0,0 +1 @@ +/bin/ diff --git a/TestPluginProject/plugin.xml b/TestPluginProject/plugin.xml index 65a46b6..49f7942 100644 --- a/TestPluginProject/plugin.xml +++ b/TestPluginProject/plugin.xml @@ -29,7 +29,7 @@ + name="CSC Preferences"> diff --git a/TestPluginProject/src/testpluginproject/Activator.java b/TestPluginProject/src/testpluginproject/Activator.java index f2b5ee4..8f5825d 100644 --- a/TestPluginProject/src/testpluginproject/Activator.java +++ b/TestPluginProject/src/testpluginproject/Activator.java @@ -65,6 +65,7 @@ import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Path; +import org.eclipse.core.runtime.Platform; //Required for getting OS and other info import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.preferences.ConfigurationScope; import org.eclipse.core.runtime.preferences.IEclipsePreferences; @@ -80,7 +81,7 @@ import org.eclipse.swt.SWT; import org.eclipse.swt.dnd.Clipboard; import org.eclipse.swt.dnd.TextTransfer; -import org.eclipse.swt.internal.Platform; +//import org.eclipse.swt.internal.Platform; //Was causing conflict with org.eclipse.core.runtime.Platform import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; @@ -581,6 +582,19 @@ public void run() { } } }); + + //Getting OS Version + String osName = System.getProperty("os.name"); + String osVersion = System.getProperty("os.version"); + String osArch = System.getProperty("os.arch"); + + //Getting Java Version + String javaVersion = System.getProperty("java.version"); + String javaVendor = System.getProperty("java.vendor"); + + //Getting Eclipse Version + String eclipseVersion = Platform.getBundle("org.eclipse.core.runtime").getVersion().toString(); + List mousEventList = new ArrayList<>(); List keyEvents = new ArrayList<>(); if(mouseClickListener!=null) { @@ -600,13 +614,19 @@ public void run() { - //sort based ont he event time + //sort based on the event time Collections.sort(listSequntialevents, new EventTimeComparator()); EventDataJsonObject edjo = new EventDataJsonObject(listSequntialevents,errorLogList); +// System.out.println("EDJO"+edjo); edjo.setIPAddress(Utils.getIpAddress()); edjo.setMACAddress(Utils.getMacAddress()); edjo.setPluginVersion("V1.0.1"); + + //Save OS, Java and Eclipse version info + edjo.setOSInfo(osName, osVersion, osArch); + edjo.setJavaInfo(javaVersion, javaVendor); + edjo.setEclipseInfo(eclipseVersion); System.out.println("retrived key would be: "); //System.out.println(retriveKey()); //Save as json @@ -710,6 +730,7 @@ private void recordUserAction(String commandId, ICommandService commandService, //System.out.println("Console Output Data: "+consoleOutput); //System.out.println("MenubarClick Data: "+MenuBarClickActions); // System.out.println("WorkSpaceErrorLog Data: "+errorLogList); + keyBoardClickListener.immediateSave(); //Immediate save after some action e.g. cut, copy, paste, etc Map parameters = new HashMap<>(); String [] commandStr = commandId.split("\\."); String activePart = commandStr[commandStr.length-2]; @@ -827,12 +848,12 @@ private void showErrorDialog(String message, Throwable throwable) { private void addSelectionListener(IWorkbenchWindow window) { if (window != null) { - mouseClickListener = new MouseClickListener(window); keyBoardClickListener = new KeyBoardClickListener(); + mouseClickListener = new MouseClickListener(window, keyBoardClickListener); //Passes keyBoardClickListner info into mouse click for immediate save window.getShell().getDisplay().addFilter(org.eclipse.swt.SWT.MouseDown, mouseClickListener); window.getShell().getDisplay().addFilter(org.eclipse.swt.SWT.MouseDoubleClick,mouseClickListener); window.getShell().getDisplay().addFilter(org.eclipse.swt.SWT.KeyDown, keyBoardClickListener); - window.getWorkbench().getActiveWorkbenchWindow().getPartService().addPartListener(new WindowClickListener(listSequntialevents,window)); + window.getWorkbench().getActiveWorkbenchWindow().getPartService().addPartListener(new WindowClickListener(listSequntialevents,window,keyBoardClickListener)); //Passes keyBoardClickListner info into window change for immediate save } diff --git a/TestPluginProject/src/testpluginproject/UserLogin.java b/TestPluginProject/src/testpluginproject/UserLogin.java index 4d2b527..c78f557 100644 --- a/TestPluginProject/src/testpluginproject/UserLogin.java +++ b/TestPluginProject/src/testpluginproject/UserLogin.java @@ -2,6 +2,7 @@ import org.eclipse.core.runtime.preferences.InstanceScope; import org.eclipse.jface.preference.BooleanFieldEditor; +import org.eclipse.jface.preference.ComboFieldEditor; import org.eclipse.jface.preference.DirectoryFieldEditor; import org.eclipse.jface.preference.FieldEditorPreferencePage; import org.eclipse.jface.preference.RadioGroupFieldEditor; @@ -19,13 +20,37 @@ public UserLogin() { public void createFieldEditors() { addField(new StringFieldEditor("USERNAME", "Unity ID:", getFieldEditorParent())); addField(new StringFieldEditor("EMAIL", "NCSU Email:", getFieldEditorParent())); + + String[][] semesterOptions = { + {"Fall", "Fall"}, + {"Spring", "Spring"}, + {"Summer 1", "Summer1"}, + {"Summer 2", "Summer2"}, + {"Summer 1 and 2", "Summer1&2"}, + }; + addField(new ComboFieldEditor("SEMESTER", "Semester:", semesterOptions, getFieldEditorParent())); + + String[][] courseOptions = { + {"CSC116", "116"}, + {"CSC216", "216"}, + {"CSC316", "316"}, + {"CSC416", "416"}, + }; + addField(new ComboFieldEditor("COURSE", "Course Number:", courseOptions, getFieldEditorParent())); + + String[][] sectionOptions = { + {"Section 001", "001"}, + {"Section 002", "002"}, + {"Section 003", "003"} + }; + addField(new ComboFieldEditor("SECTION", "Section:", sectionOptions, getFieldEditorParent())); } @Override public void init(IWorkbench workbench) { // second parameter is typically the plug-in id - setPreferenceStore(new ScopedPreferenceStore(InstanceScope.INSTANCE, "csc216.plugin.prefs.page")); - setDescription("CSC 216 Student Info"); + setPreferenceStore(new ScopedPreferenceStore(InstanceScope.INSTANCE, "csc.plugin.prefs.page")); + setDescription("CSC Student Info"); } } \ No newline at end of file diff --git a/TestPluginProject/src/testpluginproject/handlers/listener/KeyBoardClickListener.java b/TestPluginProject/src/testpluginproject/handlers/listener/KeyBoardClickListener.java index 4298436..f50090d 100644 --- a/TestPluginProject/src/testpluginproject/handlers/listener/KeyBoardClickListener.java +++ b/TestPluginProject/src/testpluginproject/handlers/listener/KeyBoardClickListener.java @@ -114,6 +114,14 @@ public void run() { }, 5000); } + + //Immediately save whatever is in the buffer + public void immediateSave() { + System.out.println("Immediate save"); + if(this.KeyBoardClickEvents.toString().length()!=0) { + processKeyboardEvents(); + } + } private void processKeyboardEvents() { // TODO Auto-generated method stub SequentialEventData seDKB = new SequentialEventData("KeyBoardClickEvent", this.KeyBoardClickEvents.toString()); diff --git a/TestPluginProject/src/testpluginproject/handlers/listener/MouseClickListener.java b/TestPluginProject/src/testpluginproject/handlers/listener/MouseClickListener.java index c008b33..f76778c 100644 --- a/TestPluginProject/src/testpluginproject/handlers/listener/MouseClickListener.java +++ b/TestPluginProject/src/testpluginproject/handlers/listener/MouseClickListener.java @@ -48,9 +48,12 @@ public class MouseClickListener implements MouseListener, Listener{ IWorkbenchWindow window; + KeyBoardClickListener keyBoardClickListener; List mouseClickData; - public MouseClickListener(IWorkbenchWindow window) { + //Get keyboard buffer and create a local variable + public MouseClickListener(IWorkbenchWindow window, KeyBoardClickListener keyBoardClickListener) { this.mouseClickData = new ArrayList<>(); + this.keyBoardClickListener = keyBoardClickListener; this.window = window; } @@ -103,6 +106,7 @@ public void mouseExited(MouseEvent e) { @Override public void handleEvent(Event event) { // TODO Auto-generated method stub + keyBoardClickListener.immediateSave(); //Immediate save keyboard buffer after mouse click if(window.getActivePage()!=null) { if(window.getActivePage().getActivePart()!=null) { try { diff --git a/TestPluginProject/src/testpluginproject/handlers/listener/WindowClickListener.java b/TestPluginProject/src/testpluginproject/handlers/listener/WindowClickListener.java index 955da0f..3ab531d 100644 --- a/TestPluginProject/src/testpluginproject/handlers/listener/WindowClickListener.java +++ b/TestPluginProject/src/testpluginproject/handlers/listener/WindowClickListener.java @@ -31,8 +31,10 @@ public class WindowClickListener implements IPartListener { List activeWindow; - public WindowClickListener(List activeWindowList, IWorkbenchWindow window) { + KeyBoardClickListener keyBoardClickListener; //Create a local variable for keyboard buffer + public WindowClickListener(List activeWindowList, IWorkbenchWindow window, KeyBoardClickListener keyBoardClickListener) { this.activeWindow = activeWindowList; + this.keyBoardClickListener = keyBoardClickListener; //Save keyboard buffer to a local variable System.out.println("inside the menubar listener!"); System.out.println("Current Active Window is: "+window.getPartService().getActivePart().getTitle()); } @@ -50,6 +52,7 @@ public void partActivated(IWorkbenchPart part) { GlobalVars.lastOpenFile = path.toFile().toString(); } } + keyBoardClickListener.immediateSave(); //Immediate save after window switch this.activeWindow.add(new SequentialEventData("WindowClickEvent",part.getTitle())); diff --git a/TestPluginProject/src/testpluginproject/model/MouseClickData.java b/TestPluginProject/src/testpluginproject/model/MouseClickData.java index 3d85452..4ecf63e 100644 --- a/TestPluginProject/src/testpluginproject/model/MouseClickData.java +++ b/TestPluginProject/src/testpluginproject/model/MouseClickData.java @@ -24,7 +24,8 @@ public MouseClickData(int X,int Y,String fileName,int Line, int charOffset) { this.fileName = fileName; this.time = dateFormat.format(new Date()); this.Line = Line; - this.CharOffset = CharOffset; + // Variable name was causing issue of offset not registering + this.CharOffset = charOffset; this.username = Utils.getUsernameFromPref(); } diff --git a/TestPluginProject/src/testpluginproject/model/jsonModel/EventDataJsonObject.java b/TestPluginProject/src/testpluginproject/model/jsonModel/EventDataJsonObject.java index 6c6aef9..1b09891 100644 --- a/TestPluginProject/src/testpluginproject/model/jsonModel/EventDataJsonObject.java +++ b/TestPluginProject/src/testpluginproject/model/jsonModel/EventDataJsonObject.java @@ -27,6 +27,13 @@ public class EventDataJsonObject { private String IPAddress; private String MACAddress; private String PluginVersion; + //Get additional info about OS, Java and Eclipse + private String osName; + private String osVersion; + private String osArch; + private String javaVersion; + private String javaVendor; + private String eclipseVersion; public EventDataJsonObject(List sequentialEventData,List errorLogList) { this.errorLogList = errorLogList; @@ -76,6 +83,24 @@ public String getMACAddress() { public void setMACAddress(String mACAddress) { MACAddress = mACAddress; } + + //OS info + public void setOSInfo(String osName, String osVersion, String osArch) { + this.osName = osName; + this.osVersion = osVersion; + this.osArch = osArch; + } + + //Java info + public void setJavaInfo(String javaVersion, String javaVendor) { + this.javaVersion = javaVersion; + this.javaVendor = javaVendor; + } + + //Eclipse info + public void setEclipseInfo(String eclipseVersion) { + this.eclipseVersion = eclipseVersion; + } @Override diff --git a/TestPluginProject/src/testpluginproject/utils/Utils.java b/TestPluginProject/src/testpluginproject/utils/Utils.java index 1aa1a77..81ad71f 100644 --- a/TestPluginProject/src/testpluginproject/utils/Utils.java +++ b/TestPluginProject/src/testpluginproject/utils/Utils.java @@ -15,10 +15,14 @@ public class Utils { public static String getUsernameFromPref() { - IEclipsePreferences preferences = InstanceScope.INSTANCE.getNode("csc216.plugin.prefs.page"); + IEclipsePreferences preferences = InstanceScope.INSTANCE.getNode("csc.plugin.prefs.page"); //deal with ill formatted usernames String username = preferences.get("USERNAME", "default").toLowerCase(); String email = preferences.get("EMAIL", "default").toLowerCase(); + String semester = preferences.get("SEMESTER", "default"); + String course = preferences.get("COURSE", "default"); + String section = preferences.get("SECTION", "default"); + System.out.print(semester+" "+course+" "+section); if(email.contains("@ncsu.edu")) { if(email.replace("@ncsu.edu", "").equals(username)) { // They match, we can just move on