package org.topicquests.topicmap.ui; import javax.swing.*; import org.topicquests.common.api.IResult; import org.topicquests.common.api.ITopicQuestsOntology; import org.topicquests.model.TicketPojo; import org.topicquests.model.api.node.INode; import org.topicquests.model.api.ITicket; import org.topicquests.topicmap.json.model.api.IJSONTopicDataProvider; import org.topicquests.topicmap.json.model.api.IMergeResultsListener; import java.awt.*; import java.awt.event.MouseEvent; import java.awt.event.MouseAdapter; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; /** * <p>Title: </p> * * <p>Description: </p> * * <p>Copyright: Copyright (c) 2013</p> * * <p>Company: </p> * * @author not attributable * @version 1.0 */ public class SuggestedMergeTab extends JPanel { private NodeComparisonDialog compareDialog; private DefaultListModel listModel; //HOT THREAD SAFE private String theNodes; private INode leftNode, rightNode; private IJSONTopicDataProvider database; private ITicket credentials; public SuggestedMergeTab() { try { jbInit(); listModel = new DefaultListModel(); this.nodePairList.setModel(listModel); compareDialog = new NodeComparisonDialog(); compareDialog.setHost(this); credentials = new TicketPojo(ITopicQuestsOntology.SYSTEM_USER); } catch (Exception ex) { ex.printStackTrace(); } } public void setDataProvider(IJSONTopicDataProvider dp) { database = (IJSONTopicDataProvider)dp; } private void jbInit() throws Exception { this.setLayout(borderLayout1); jPanel1.setLayout(flowLayout1); nodePairList.addMouseListener(new SuggestedMergeTab_nodePairList_mouseAdapter(this)); examineButton.setEnabled(false); examineButton.setToolTipText("Study the selected Node Pair"); examineButton.setText("Study"); examineButton.addActionListener(new SuggestedMergeTab_examineButton_actionAdapter(this)); removeButton.setEnabled(false); removeButton.setToolTipText("Remove selected Node Pair"); removeButton.setText("Remove"); removeButton.addActionListener(new SuggestedMergeTab_removeButton_actionAdapter(this)); this.add(jPanel1, java.awt.BorderLayout.NORTH); jPanel1.add(examineButton); jPanel1.add(removeButton); this.add(jScrollPane1, java.awt.BorderLayout.CENTER); jScrollPane1.getViewport().add(nodePairList); } BorderLayout borderLayout1 = new BorderLayout(); JPanel jPanel1 = new JPanel(); FlowLayout flowLayout1 = new FlowLayout(); JScrollPane jScrollPane1 = new JScrollPane(); JList nodePairList = new JList(); JButton examineButton = new JButton(); JButton removeButton = new JButton(); public void addNodeLocatorPair (String leftNodeLocator, String rightNodeLocator) { synchronized(nodePairList) { listModel.addElement(leftNodeLocator+" "+rightNodeLocator); nodePairList.repaint(); } } void enableButtons(boolean t) { this.examineButton.setVisible(t); this.removeButton.setVisible(t); } public void nodePairList_mouseClicked(MouseEvent e) { this.theNodes = (String)nodePairList.getSelectedValue(); enableButtons(true); } /** * A user has asserted that two nodes are to be merged given <code>reason</code> * @param reason */ public void doTheMerge(String reason) { IMergeResultsListener mergeListener = null; //no need to send in a listener database.mergeTwoNodes(leftNode, rightNode, reason, ITopicQuestsOntology.SYSTEM_USER, mergeListener); listModel.removeElement(theNodes); } public void doNoMerge(String reason) { //punt, for now //TODO, we really ought to think about a way to represent // a NotThoughtToBeMerged assertion listModel.removeElement(theNodes); } /** * Task is to take <code>theNodes</code> and fetch the two * topic map {@link INode} instances as XML and send them * to the {@link NodeComparisonDialog} * @param e */ public void examineButton_actionPerformed(ActionEvent e) { String [] x = theNodes.split(" "); String leftLocator = x[0].trim(); String rightLocator = x[1].trim(); IResult r = database.getNode(leftLocator, credentials); leftNode = (INode)r.getResultObject(); r = database.getNode(rightLocator, credentials); rightNode = (INode)r.getResultObject(); compareDialog.setNodes(leftNode.toXML(), rightNode.toXML()); } public void removeButton_actionPerformed(ActionEvent e) { listModel.removeElement(theNodes); } } class SuggestedMergeTab_removeButton_actionAdapter implements ActionListener { private SuggestedMergeTab adaptee; SuggestedMergeTab_removeButton_actionAdapter(SuggestedMergeTab adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.removeButton_actionPerformed(e); } } class SuggestedMergeTab_examineButton_actionAdapter implements ActionListener { private SuggestedMergeTab adaptee; SuggestedMergeTab_examineButton_actionAdapter(SuggestedMergeTab adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.examineButton_actionPerformed(e); } } class SuggestedMergeTab_nodePairList_mouseAdapter extends MouseAdapter { private SuggestedMergeTab adaptee; SuggestedMergeTab_nodePairList_mouseAdapter(SuggestedMergeTab adaptee) { this.adaptee = adaptee; } public void mouseClicked(MouseEvent e) { adaptee.nodePairList_mouseClicked(e); } }