--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sysperfana/memspyext/com.nokia.s60tools.swmtanalyser/src/com/nokia/s60tools/swmtanalyser/dialogs/AdvancedFilterDialog.java Wed Apr 21 20:01:08 2010 +0300
@@ -0,0 +1,653 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+package com.nokia.s60tools.swmtanalyser.dialogs;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.events.VerifyEvent;
+import org.eclipse.swt.events.VerifyListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+import com.nokia.s60tools.swmtanalyser.analysers.AnalyserConstants;
+import com.nokia.s60tools.swmtanalyser.dialogs.SaveFilterOptions.ValueTypes;
+
+/**
+ * UI Dialog class for Advanced Filter Options.
+ *
+ */
+public class AdvancedFilterDialog extends Dialog implements SelectionListener{
+
+ private Button[] severity_buttons;
+ private Combo delta_dropdown;
+ private Combo delta_dropdown2;
+ private Button filter_button;
+ private Button cancel_button;
+ private Text start_text;
+ private Text end_text;
+ private Text start_text2;
+ private Text end_text2;
+ private String[] delta_filter_type = {"Doesn't matter", "Between", "Equals", "Greater than", "Less than"};
+ private Combo startwith_dropdown;
+ private Text item_name_text;
+ private Button[] ram_and_disk_buttons;
+ private Button[] thread_event_buttons;
+ private Button[] system_events_buttons;
+ private TextVerifyListener verify_listener = new TextVerifyListener();
+ private FilterInput input;
+ private Button reset_button;
+
+ /**
+ * Construction
+ * @param parent shell
+ */
+ public AdvancedFilterDialog(Shell parent) {
+ super(parent);
+ setShellStyle(getShellStyle()|SWT.RESIZE);
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.dialogs.Dialog#createContents(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ protected Control createContents(Composite parent) {
+ Composite composite = new Composite(parent, SWT.RESIZE);
+ composite.setLayout(new GridLayout(1, false));
+ composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ composite.setSize(400, 500);
+ composite.getShell().setText("Custom filter");
+
+ Group item_name_grp = new Group(composite, SWT.NONE);
+ item_name_grp.setText("Item name");
+ item_name_grp.setLayout(new GridLayout(3,false));
+ item_name_grp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ Label item_label = new Label(item_name_grp, SWT.WRAP);
+ item_label.setText("Item name:");
+
+ startwith_dropdown = new Combo(item_name_grp, SWT.BORDER|SWT.READ_ONLY);
+ startwith_dropdown.setItems(new String[]{"Start with", "Contains"});
+ startwith_dropdown.select(0);
+
+ item_name_text = new Text(item_name_grp, SWT.BORDER);
+ item_name_text.setLayoutData(new GridData(GridData.FILL_HORIZONTAL|GridData.GRAB_HORIZONTAL));
+
+ Group event_name_grp = new Group(composite, SWT.NONE);
+ event_name_grp.setText("Event name");
+ event_name_grp.setLayout(new GridLayout(3,true));
+ event_name_grp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ Label eventLabel = new Label(event_name_grp, SWT.WRAP|SWT.BOLD);
+ eventLabel.setText("RAM and Disk memory events:");
+ GridData eventLabelGD = new GridData(GridData.FILL_HORIZONTAL);
+ eventLabelGD.horizontalSpan = 4;
+ eventLabel.setLayoutData(eventLabelGD);
+
+ String[] ram_and_disk_event_names = {"RAM used", "Disk used"};
+ ram_and_disk_buttons = new Button[2];
+ for(int i=0; i<ram_and_disk_buttons.length; i++)
+ {
+ ram_and_disk_buttons[i] = new Button(event_name_grp, SWT.CHECK);
+ ram_and_disk_buttons[i].setText(ram_and_disk_event_names[i]);
+ }
+
+ Label thread_events_label = new Label(event_name_grp, SWT.WRAP|SWT.BOLD);
+ thread_events_label.setText("Thread events:");
+ thread_events_label.setLayoutData(eventLabelGD);
+
+ String[] thread_event_names = {"Heap size", "Heap allocated space", "Heap allocated cell count", "No of Files", "No of PS Handles"};
+ thread_event_buttons = new Button[thread_event_names.length];
+ for (int i = 0; i < thread_event_buttons.length; i++) {
+ thread_event_buttons[i] = new Button(event_name_grp, SWT.CHECK);
+ thread_event_buttons[i].setText(thread_event_names[i]);
+ }
+
+ Label system_events_label = new Label(event_name_grp, SWT.WRAP|SWT.BOLD);
+ system_events_label.setText("System data events:");
+ system_events_label.setLayoutData(eventLabelGD);
+
+ String[] system_event_names = {"System Data"};
+ system_events_buttons = new Button[system_event_names.length];
+ for (int i = 0; i < system_events_buttons.length; i++) {
+ system_events_buttons[i] = new Button(event_name_grp, SWT.CHECK);
+ system_events_buttons[i].setText(system_event_names[i]);
+ }
+
+ Group severity_grp = new Group(composite, SWT.NONE);
+ severity_grp.setText("Severity");
+ severity_grp.setLayout(new GridLayout(4, true));
+ severity_grp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ String[] severity_names = {"All", "Critical", "High", "Normal"};
+ severity_buttons = new Button[4];
+ for (int i = 0; i < severity_buttons.length; i++) {
+ severity_buttons[i] = new Button(severity_grp, SWT.CHECK);
+ severity_buttons[i].setText(severity_names[i]);
+ severity_buttons[i].setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ severity_buttons[i].addSelectionListener(this);
+ severity_buttons[i].setEnabled(false);
+ }
+ severity_buttons[0].setEnabled(true);
+ severity_buttons[0].setSelection(true);
+
+ Group delta_grp = new Group(composite, SWT.NONE);
+ delta_grp.setText("Delta");
+ delta_grp.setLayout(new GridLayout(5, false));
+ delta_grp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ Label delta_label = new Label(delta_grp, SWT.WRAP);
+ delta_label.setText("Delta (bytes):");
+
+ delta_dropdown = new Combo(delta_grp, SWT.BORDER|SWT.READ_ONLY);
+ delta_dropdown.setItems(delta_filter_type);
+ delta_dropdown.select(0);
+ delta_dropdown.addSelectionListener(this);
+
+ GridData textGD = new GridData(GridData.FILL);
+ textGD.widthHint = 100;
+ start_text = new Text(delta_grp, SWT.BORDER);
+ start_text.setText("0");
+ start_text.setLayoutData(textGD);
+ start_text.setEnabled(false);
+ start_text.addVerifyListener(verify_listener);
+
+ Label and_label = new Label(delta_grp, SWT.WRAP);
+ and_label.setText("and");
+
+ end_text = new Text(delta_grp, SWT.BORDER);
+ end_text.setText("0");
+ end_text.setLayoutData(textGD);
+ end_text.setEnabled(false);
+ end_text.addVerifyListener(verify_listener);
+
+ Label delta_label2 = new Label(delta_grp, SWT.WRAP);
+ delta_label2.setText("Delta (count):");
+
+ delta_dropdown2 = new Combo(delta_grp, SWT.BORDER|SWT.READ_ONLY);
+ delta_dropdown2.setItems(delta_filter_type);
+ delta_dropdown2.select(0);
+ delta_dropdown2.addSelectionListener(this);
+
+ start_text2 = new Text(delta_grp, SWT.BORDER);
+ start_text2.setText("0");
+ start_text2.setLayoutData(textGD);
+ start_text2.setEnabled(false);
+ start_text2.addVerifyListener(verify_listener);
+
+ Label and_label2 = new Label(delta_grp, SWT.WRAP);
+ and_label2.setText("and");
+
+ end_text2 = new Text(delta_grp, SWT.BORDER);
+ end_text2.setText("0");
+ end_text2.setLayoutData(textGD);
+ end_text2.setEnabled(false);
+ end_text2.addVerifyListener(verify_listener);
+
+ restorePreviousValues();
+ return super.createContents(composite);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ protected void createButtonsForButtonBar(Composite parent) {
+ filter_button = this.createButton(parent, IDialogConstants.OK_ID, "Filter", true);
+ filter_button.addSelectionListener(this);
+ reset_button = this.createButton(parent, IDialogConstants.DESELECT_ALL_ID, "Reset", false);
+ reset_button.addSelectionListener(this);
+ cancel_button = this.createButton(parent, IDialogConstants.CANCEL_ID, "Cancel", false);
+ cancel_button.addSelectionListener(this);
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent)
+ */
+ public void widgetDefaultSelected(SelectionEvent e) {
+ if(e.widget == severity_buttons[0])
+ {
+ for (int i = 1; i < severity_buttons.length; i++) {
+ severity_buttons[i].setEnabled(false);
+ }
+ }
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+ */
+ public void widgetSelected(SelectionEvent e) {
+ if(e.widget == severity_buttons[0])
+ {
+ for (int i = 1; i < severity_buttons.length; i++) {
+ severity_buttons[i].setEnabled(!severity_buttons[0].getSelection());
+ }
+ }
+ else if(e.widget == delta_dropdown)
+ {
+ changeTextBoxStatus(delta_dropdown, start_text, end_text);
+ }
+ else if(e.widget == delta_dropdown2)
+ {
+ changeTextBoxStatus(delta_dropdown2, start_text2, end_text2);
+ }
+ }
+
+ /**
+ * Get filter options
+ * @return options
+ */
+ public FilterInput getFilterOptions()
+ {
+ return input;
+ }
+
+ /**
+ * Enable/Disable the To and From text boxes based on the selection
+ * @param drop_down Combo
+ * @param start To Text box
+ * @param end From Text box
+ */
+ private void changeTextBoxStatus(Combo drop_down, Text start, Text end)
+ {
+ int i = drop_down.getSelectionIndex();
+ switch (i) {
+ case 0:
+ start.setEnabled(false);
+ end.setEnabled(false);
+ break;
+ case 1:
+ start.setEnabled(true);
+ end.setEnabled(true);
+ break;
+ case 2:
+ start.setEnabled(true);
+ end.setEnabled(false);
+ break;
+ case 3:
+ start.setEnabled(true);
+ end.setEnabled(false);
+ break;
+ case 4:
+ start.setEnabled(true);
+ end.setEnabled(false);
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ /**
+ * Helper class to store all settings in the Advanced Dialog
+ *
+ */
+ public class FilterInput
+ {
+ int filter_option;
+ String filter_text;
+ String[] events;
+ AnalyserConstants.Priority[] severities;
+ int delta_bytes_option;
+ long start_size;
+ long end_size;
+ int delta_count_option;
+ long start_count;
+ long end_count;
+ public int getDelta_count_option() {
+ return delta_count_option;
+ }
+ public void setDelta_count_option(int delta_count_option) {
+ this.delta_count_option = delta_count_option;
+ }
+ public int getDelta_bytes_option() {
+ return delta_bytes_option;
+ }
+ public void setDelta_kb_option(int delta_kb_option) {
+ this.delta_bytes_option = delta_kb_option;
+ }
+ public long getEnd_count() {
+ return end_count;
+ }
+ public void setEnd_count(long end_count) {
+ this.end_count = end_count;
+ }
+ public long getEnd_size() {
+ return end_size;
+ }
+ public void setEnd_size(long end_size) {
+ this.end_size = end_size;
+ }
+ public String[] getEvents() {
+ return events;
+ }
+ public void setEvents(String[] events) {
+ this.events = events;
+ }
+ public int getName_Filter_option() {
+ return filter_option;
+ }
+ private void setFilter_option(int filter_option) {
+ this.filter_option = filter_option;
+ }
+ public String getFilter_text() {
+ return filter_text;
+ }
+ public void setFilter_text(String filter_text) {
+ this.filter_text = filter_text;
+ }
+ public AnalyserConstants.Priority[] getSeverities() {
+ return severities;
+ }
+ public void setSeverities(AnalyserConstants.Priority[] severities) {
+ this.severities = severities;
+ }
+ public long getStart_count() {
+ return start_count;
+ }
+ public void setStart_count(long start_count) {
+ this.start_count = start_count;
+ }
+ public long getStart_size() {
+ return start_size;
+ }
+ public void setStart_size(long start_size) {
+ this.start_size = start_size;
+ }
+
+ }
+
+ /**
+ * Verify Listener to stop typing alphabetics in the To and From text boxes.
+ *
+ */
+ private class TextVerifyListener implements VerifyListener
+ {
+ public void verifyText(VerifyEvent event) {
+ switch (event.keyCode) {
+ case SWT.BS: // Backspace
+ case SWT.DEL: // Delete
+ case SWT.HOME: // Home
+ case SWT.END: // End
+ case SWT.ARROW_LEFT: // Left arrow
+ case SWT.ARROW_RIGHT: // Right arrow
+ return;
+ }
+ if (!Character.isDigit(event.character)) {
+ event.doit = false; // disallow the action
+ }
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.dialogs.Dialog#okPressed()
+ */
+ @Override
+ protected void okPressed() {
+ saveValues();
+ input = new FilterInput();
+ input.setFilter_option(startwith_dropdown.getSelectionIndex());
+ input.setFilter_text(item_name_text.getText());
+
+ input.setEvents(getSelectedEvents());
+
+ ArrayList<AnalyserConstants.Priority> severities = new ArrayList<AnalyserConstants.Priority>();
+ for (int i = 0; i < severity_buttons.length; i++) {
+ if(i==0 && severity_buttons[i].getSelection())
+ break;
+ else if(severity_buttons[i].getSelection())
+ severities.add(AnalyserConstants.Priority.valueOf(severity_buttons[i].getText().toUpperCase()));
+ }
+ input.setSeverities(severities.toArray(new AnalyserConstants.Priority[0]));
+
+ input.setDelta_kb_option(delta_dropdown.getSelectionIndex());
+ input.setStart_size(Long.parseLong(start_text.getText()));
+ input.setEnd_size(Long.parseLong(end_text.getText()));
+
+ input.setDelta_count_option(delta_dropdown2.getSelectionIndex());
+ input.setStart_count(Long.parseLong(start_text2.getText()));
+ input.setEnd_count(Long.parseLong(end_text2.getText()));
+
+ if(getShell()!=null)
+ getShell().dispose();
+ setReturnCode(Dialog.OK);
+ }
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.dialogs.Dialog#buttonPressed(int)
+ */
+ @Override
+ protected void buttonPressed(int buttonId) {
+
+ if(buttonId == IDialogConstants.DESELECT_ALL_ID)
+ {
+ startwith_dropdown.select(0);
+ item_name_text.setText("");
+ for (int i = 0; i < ram_and_disk_buttons.length; i++) {
+ ram_and_disk_buttons[i].setSelection(false);
+ }
+ for (int i = 0; i < thread_event_buttons.length; i++) {
+ thread_event_buttons[i].setSelection(false);
+ }
+ for (int i = 0; i < system_events_buttons.length; i++) {
+ system_events_buttons[i].setSelection(false);
+ }
+ severity_buttons[0].setSelection(true);
+ severity_buttons[0].notifyListeners(SWT.Selection, new Event());
+ delta_dropdown.select(0);
+ delta_dropdown.notifyListeners(SWT.Selection, new Event());
+ delta_dropdown2.select(0);
+ delta_dropdown2.notifyListeners(SWT.Selection, new Event());
+ }
+ super.buttonPressed(buttonId);
+ }
+
+ /**
+ * Returns string array of all selected events
+ * @return events
+ */
+ public String[] getSelectedEvents()
+ {
+ ArrayList<String> events = new ArrayList<String>();
+ for (int i = 0; i < ram_and_disk_buttons.length; i++) {
+ if(ram_and_disk_buttons[i].getSelection())
+ events.add(ram_and_disk_buttons[i].getText());
+ }
+ for (int i = 0; i < thread_event_buttons.length; i++) {
+ if(thread_event_buttons[i].getSelection())
+ events.add(thread_event_buttons[i].getText());
+ }
+ for (int i = 0; i < system_events_buttons.length; i++) {
+ if(system_events_buttons[i].getSelection())
+ events.add(system_events_buttons[i].getText());
+ }
+ return events.toArray(new String[events.size()]);
+ }
+
+ /**
+ * Returns array of selected severities. If the array size is 0, then assume that all severities selected.
+ * @return severities array
+ */
+ public String[] getSelectedSeverities()
+ {
+ ArrayList<String> severities = new ArrayList<String>();
+ for (int i = 1; i < severity_buttons.length; i++) {
+ if(severity_buttons[i].getSelection())
+ severities.add(severity_buttons[i].getText());
+ }
+ return severities.toArray(new String[0]);
+ }
+
+ /**
+ * Returns start and end values for the delta to search.
+ * @param drop_down
+ * @param start
+ * @param end
+ * @return
+ */
+ private String[] getToFromValues(Combo drop_down, Text start, Text end)
+ {
+ int i = drop_down.getSelectionIndex();
+ String[] values = null;
+ switch (i) {
+ case 0:
+ break;
+ case 1:
+ values = new String[2];
+ values[0] = start.getText();
+ values[1] = end.getText();
+ break;
+ case 2:
+ values = new String[1];
+ values[0] = start.getText();
+ break;
+ case 3:
+ values = new String[1];
+ values[0] = start.getText();
+ break;
+ case 4:
+ values = new String[1];
+ values[0] = start.getText();
+ break;
+ default:
+ break;
+ }
+ return values;
+ }
+
+ /**
+ * Saves values to dialog settings.
+ *
+ */
+ private void saveValues() {
+ SaveFilterOptions save = new SaveFilterOptions();
+ save.saveDropdownOption(ValueTypes.FILTER_TYPE, startwith_dropdown.getText());
+ save.saveDropdownOption(ValueTypes.ITEM_TEXT, item_name_text.getText());
+ String[] events = getSelectedEvents();
+ save.saveValues(ValueTypes.EVENTS, events);
+ String[] severities = getSelectedSeverities();
+ save.saveValues(ValueTypes.SEVERITIES, severities);
+ save.saveDropdownOption(ValueTypes.SIZE_TYPE, delta_dropdown.getText());
+ save.saveValues(ValueTypes.SIZES, getToFromValues(delta_dropdown,start_text, end_text));
+ save.saveDropdownOption(ValueTypes.COUNT_TYPE, delta_dropdown2.getText());
+ save.saveValues(ValueTypes.COUNTS, getToFromValues(delta_dropdown2,start_text2, end_text2));
+ }
+
+ /**
+ * Restore privious values and shows in advanced dialog.
+ *
+ */
+ private void restorePreviousValues() {
+ SaveFilterOptions restore = new SaveFilterOptions();
+
+ String filter_option = restore.getPreviousDropdownOption(ValueTypes.FILTER_TYPE);
+ if(filter_option!=null)
+ startwith_dropdown.select(startwith_dropdown.indexOf(filter_option));
+ String filter_text = restore.getPreviousDropdownOption(ValueTypes.ITEM_TEXT);
+ if(filter_text!=null)
+ item_name_text.setText(filter_text);
+ String[] events = restore.getValues(ValueTypes.EVENTS);
+ String[] severities = restore.getValues(ValueTypes.SEVERITIES);
+ String delta_size_option = restore.getPreviousDropdownOption(ValueTypes.SIZE_TYPE);
+ String[] sizes = restore.getValues(ValueTypes.SIZES);
+ String delta_count_option = restore.getPreviousDropdownOption(ValueTypes.COUNT_TYPE);
+ String[] counts = restore.getValues(ValueTypes.COUNTS);
+
+ List<String> events_list = new ArrayList<String>();
+ if(events!=null)
+ events_list = Arrays.asList(events);
+ List<String> severity_list = new ArrayList<String>();
+ if(severities!=null)
+ severity_list = Arrays.asList(severities);
+
+ for (int i = 0; i < ram_and_disk_buttons.length; i++) {
+ if(events_list.contains(ram_and_disk_buttons[i].getText()))
+ ram_and_disk_buttons[i].setSelection(true);
+ }
+ for (int i = 0; i < thread_event_buttons.length; i++) {
+ if(events_list.contains(thread_event_buttons[i].getText()))
+ thread_event_buttons[i].setSelection(true);
+ }
+ for (int i = 0; i < system_events_buttons.length; i++) {
+ if(events_list.contains(system_events_buttons[i].getText()))
+ system_events_buttons[i].setSelection(true);
+ }
+ for (int i = 1; i < severity_buttons.length; i++) {
+ if(severity_list.contains(severity_buttons[i].getText()))
+ {
+ severity_buttons[0].setSelection(false);
+ severity_buttons[0].notifyListeners(SWT.Selection, new Event());
+ severity_buttons[i].setSelection(true);
+ }
+ }
+ if(delta_size_option!=null)
+ {
+ delta_dropdown.select(delta_dropdown.indexOf(delta_size_option));
+ delta_dropdown.notifyListeners(SWT.Selection, new Event());
+
+ //setText will not work if the verify listener is there.
+ //So, remove it for temporary
+ start_text.removeVerifyListener(verify_listener);
+ end_text.removeVerifyListener(verify_listener);
+ if(sizes!=null && sizes.length == 2)
+ {
+ start_text.setText(sizes[0]);
+ end_text.setText(sizes[1]);
+ }
+ else if(sizes!=null && sizes.length == 1)
+ {
+ start_text.setText(sizes[0]);
+ }
+ //Add listeners again
+ start_text.addVerifyListener(verify_listener);
+ end_text.addVerifyListener(verify_listener);
+ }
+
+ if(delta_count_option!=null)
+ {
+ delta_dropdown2.select(delta_dropdown2.indexOf(delta_count_option));
+ delta_dropdown2.notifyListeners(SWT.Selection, new Event());
+
+ //setText will not work if the verify listener is there.
+ //So, remove it for temporary
+ start_text2.removeVerifyListener(verify_listener);
+ end_text2.removeVerifyListener(verify_listener);
+ if(counts!=null && counts.length == 2)
+ {
+ start_text2.setText(counts[0]);
+ end_text2.setText(counts[1]);
+ }
+ else if(counts!=null && counts.length == 1)
+ start_text2.setText(counts[0]);
+
+ //Add listeners again
+ start_text2.addVerifyListener(verify_listener);
+ end_text2.addVerifyListener(verify_listener);
+ }
+ }
+}