package com.cari.voip.keyboard.soft.views; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.List; import java.util.Timer; import java.util.TimerTask; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IContributionItem; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TableLayout; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.window.Window; import org.eclipse.swt.SWT; import org.eclipse.swt.events.MenuEvent; import org.eclipse.swt.events.MenuListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; import org.eclipse.ui.IActionBars; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.part.ViewPart; import com.cari.voip.keyboard.soft.Activator; import com.cari.voip.keyboard.soft.actions.CallFailActionGroup; import com.cari.voip.keyboard.soft.adapter.callFailContentProvider; import com.cari.voip.keyboard.soft.adapter.callFailLabelProvider; import com.cari.voip.keyboard.soft.dialogs.RegisterDialog; import com.cari.voip.keyboard.soft.model.cdr; import com.cari.voip.keyboard.soft.model.cdrFactory; import com.cari.voip.keyboard.soft.model.switchUsers.SwitchUsersSession; import com.cari.voip.keyboard.soft.model.system.SoftR; import com.cari.voip.keyboard.soft.model.system.SystemId; import com.cari.voip.keyboard.stack.CCKPConnection; import com.cari.voip.keyboard.stack.events.Packet; import com.cari.voip.keyboard.stack.events.PacketFilter; import com.cari.voip.keyboard.stack.events.ReplyListener; import com.cari.voip.keyboard.stack.events.TrapEventListener; public class CallFailView extends ViewPart implements PropertyChangeListener{ public static final String ID_VIEW = "com.cari.voip.keyboard.soft.views.CallFailView"; private TrapEventListener listener; private ReplyListener replyListener; private TableViewer tv; private Table tb; private SwitchUsersSession session; private String sql; //private Menu context_menu; //private Action callBack; private CallFailActionGroup actiongroup; private MenuManager menuManager; private Action checkAll; private Timer timer = new Timer(); private boolean timerCancel = false; private TimerTask ttask; final Object lock = new Object(); private boolean isOpening; private SoftR sr=null; private String mStr=null; private String mcode=null; private String rcode=null; private String msg=null; public CallFailView(){ super(); isOpening = false; this.ttask = new TimerTask(){ public void run(){ Activator.getDisplay().asyncExec(new Runnable() { public void run() { Reg(true); } }); } }; this.listener = new TrapEventListener(){ public void processTrap(final Packet event){ //revealListeners.add(event); Activator.getDisplay().asyncExec(new Runnable() { public void run() { doQuerry(); } }); } }; this.replyListener = new ReplyListener(){ @Override public void processReply(Packet command, final Packet reply) { Activator.getDisplay().asyncExec(new Runnable() { public void run() { String result = (String) reply.getProperty("reply-text"); if(result == null || result.startsWith("err")){ msg = "���ע�᲻�ɹ�������������ע����"; Reg(false); } else{ sr.saveReg(mStr, mcode, rcode); } } }); } }; } @Override public void createPartControl(Composite parent) { timer.scheduleAtFixedRate(ttask, 10000, 10000); createTableViewer(parent); attachListener(); } private void createTableViewer(Composite parent) { this.tv = new TableViewer(parent,SWT.SINGLE | SWT.BORDER | SWT.FULL_SELECTION); this.tb = this.tv.getTable(); this.tb.setLayoutData(new GridData(GridData.FILL_BOTH)); this.tb.setHeaderVisible(true); this.tb.setLinesVisible(true); TableLayout layout = new TableLayout(); this.tb.setLayout(layout); layout.addColumnData(new ColumnWeightData(40)); new TableColumn(this.tb,SWT.NONE).setText("����"); layout.addColumnData(new ColumnWeightData(30)); new TableColumn(this.tb,SWT.NONE).setText("����"); layout.addColumnData(new ColumnWeightData(140)); new TableColumn(this.tb,SWT.NONE).setText("��ʼʱ��"); layout.addColumnData(new ColumnWeightData(60)); new TableColumn(this.tb,SWT.NONE).setText("ʧ������"); this.tv.setLabelProvider(new callFailLabelProvider()); this.tv.setContentProvider(new callFailContentProvider()); actiongroup = new CallFailActionGroup(this); menuManager = new MenuManager(); //final Menu context_menu = actiongroup.fillContextMemu(menuManager); menuManager.addMenuListener(new IMenuListener(){ public void menuAboutToShow(IMenuManager manager){ IStructuredSelection selection = (IStructuredSelection)tv.getSelection(); Object o = selection.getFirstElement(); if(o instanceof cdr){ actiongroup.getCallBackAction().setEnabled(false); SwitchUsersSession session = getSession(); if(session != null){ actiongroup.getCallBackAction().setEnabled(session.canDail()); } actiongroup.getDeleteAction().setEnabled(true); }else{ actiongroup.getCallBackAction().setEnabled(false); actiongroup.getDeleteAction().setEnabled(false); } } }); /*context_menu.addMenuListener(new MenuListener(){ public void menuShown(MenuEvent e){ IStructuredSelection selection = (IStructuredSelection)tv.getSelection(); Object o = selection.getFirstElement(); if(o instanceof cdr){ for(MenuItem item:context_menu.getItems()){ item.setEnabled(true); item.dispose(); } } else{ for(MenuItem item:context_menu.getItems()){ item.setEnabled(false); } } } public void menuHidden(MenuEvent e){ } });*/ makeActions(); contributeToActionBars(); this.sql = cdrFactory.getDispatcherFailQuerryString(); doQuerry(); } public Table getTable(){ return this.tb; } protected SwitchUsersSession getSession(){ if(this.session == null){ this.session = Activator.getSwitchUsersSession(); } return this.session; } protected void refreshTable(List recs){ this.tv.setInput(recs); this.tv.refresh(); this.tb.setTopIndex(this.tb.getItemCount()-1); } private void makeActions() { checkAll = new Action(){ public void run(){ try { cdrFactory.checkAllDispatcherFail(getSession()); doQuerry(); } catch (Exception e) { } } }; checkAll.setText("ȫ��ȷ��"); checkAll.setToolTipText("ȷ�����е���δ������"); checkAll.setImageDescriptor(Activator.getImageDescriptor("icons/check_all.gif")); } private void contributeToActionBars() { IActionBars bars = getViewSite().getActionBars(); fillLocalToolBar(bars.getToolBarManager()); } private void fillLocalToolBar(IToolBarManager toolBarManager) { toolBarManager.add(checkAll); toolBarManager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); } protected void doQuerry(){ if(this.sql == null || this.sql.length() == 0 ){ //MessageDialog.openInformation(null, "����", "��ѯ���Ϊ�գ�"); return; } try { List recs = cdrFactory.getCDR(this.getSession(), sql); refreshTable(recs); } catch (Exception e) { MessageDialog.openInformation(null, "�쳣", e.getMessage()+"\n"+sql); } } public void onCallBack(){ IStructuredSelection selection = (IStructuredSelection)tv.getSelection(); Object o = selection.getFirstElement(); if(o instanceof cdr){ cdr rec = (cdr)o; try{ rec.callBack(this.getSession()); } catch (Exception e) { MessageDialog.openInformation(null, "�쳣", e.getMessage()); } } } public void onDeleteClick(){ IStructuredSelection selection = (IStructuredSelection)tv.getSelection(); Object o = selection.getFirstElement(); if(o instanceof cdr){ cdr rec = (cdr)o; try{ rec.setCheckFlag(this.getSession()); doQuerry(); } catch (Exception e) { MessageDialog.openInformation(null, "�쳣", e.getMessage()); } } } private void attachListener() { SwitchUsersSession session = getSession(); if(session != null){ CCKPConnection connection = session.getConnection(); if(connection != null){ connection.addTrapEventListeners(this.listener, new PacketFilter(){ public boolean accept(Packet packet){ boolean ret = false; if(packet.getPacketType() == Packet.TYPE_TRAP_CALL_DISPATCHER_FAIL){ ret = true; } return ret; } }); } session.addPropertyChangeListener(SwitchUsersSession.PROP_DISPATCHER_ONLINE,this); actiongroup.getCallBackAction().setEnabled(session.canDail()); } } private void detachListener() { SwitchUsersSession session = getSession(); if(session != null){ CCKPConnection connection = session.getConnection(); if(connection != null){ connection.removeTrapEventListeners(listener); } session.removePropertyChangeListener(SwitchUsersSession.PROP_DISPATCHER_ONLINE,this); } } protected void Reg(boolean firstReg) { if(!timerCancel){ this.timer.cancel(); timerCancel = true; } /*StringBuilder builder = new StringBuilder(); builder.append( "cpu:"+SystemId.getCPUID()+"("+String.valueOf(SystemId.getNumberOfProcessors())+")\n"); String[] macArray = SystemId.getMACAddresses(); for(String mac:macArray){ builder.append("Ext:"+mac+"\n"); } String[] macArrayJava = SystemId.getMACAddressesJava(); for(String mac:macArrayJava){ builder.append("Jav:"+mac+"\n"); }*/ if(sr == null){ try{ sr = new SoftR(); if(sr.isAreadyRegOK()){ return; } }catch(Exception e){ MessageDialog.openInformation(null, "�쳣", "ȱ�����"); this.getSite().getWorkbenchWindow().getWorkbench().close(); return; } } mStr = sr.getMachineString(); mcode = sr.getMachineCode(); if(msg == null){ msg = "���ע�᲻�ɹ�������������ע����"; } if(rcode == null){ rcode = sr.getRegCode(); if(rcode == null){ msg = "�����δע�ᣬ��ע�᱾���!"; } } if(firstReg && (mcode != null) && (rcode != null)){ SwitchUsersSession session = this.getSession(); session.sendMRegister(mcode, rcode.toLowerCase(), replyListener); return; } /* boolean openAgain = true; while (openAgain) { RegisterDialog rgDlg = new RegisterDialog(null, m,msg,r); if (rgDlg.open() != Window.OK) { try { openAgain = false; this.getSite().getWorkbenchWindow().getWorkbench().close(); } catch (Exception e) { } } else{ r = rgDlg.getRegCode(); if (sr.checkRegisterCode(m, r)) { openAgain = false; sr.saveReg(mStr, m, r); } else{ msg="ע�������벻��ȷ������������"; r = sr.getRegCodeFromMachineCode(m); } } } */ RegisterDialog rgDlg = new RegisterDialog(null, mcode,msg,rcode); if (rgDlg.open() != Window.OK) { try { //openAgain = false; this.getSite().getWorkbenchWindow().getWorkbench().close(); } catch (Exception e) { } }else{ rcode = rgDlg.getRegCode(); SwitchUsersSession session = this.getSession(); session.sendMRegister(mcode, rcode.toLowerCase(), replyListener); } } public void dispose() { detachListener(); super.dispose(); } @Override public void setFocus() { if(this.tb != null){ this.tb.setFocus(); } } protected void checkEnable(Object value){ /*boolean v = true; if(value instanceof Boolean){ Boolean val = (Boolean)value; v = val.booleanValue(); } else if(value instanceof String){ String val = (String)value; if(val.equals("end") || val.equals("none")){ v = false; } } actiongroup.getCallBackAction().setEnabled(v); */ SwitchUsersSession session = getSession(); if(session != null){ actiongroup.getCallBackAction().setEnabled(session.canDail()); } } @Override public void propertyChange(final PropertyChangeEvent evt) { Activator.getDisplay().asyncExec(new Runnable() { public void run() { if(evt.getPropertyName().equals(SwitchUsersSession.PROP_DISPATCHER_ONLINE)){ checkEnable(evt.getNewValue()); } } }); } }