package de.FeatureModellingTool.ElementLocating;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreePath;
import org.jdesktop.swingx.JXTreeTable;
import de.FeatureModellingTool.FeatureModel.CFRelation;
import de.FeatureModellingTool.FeatureModel.Constraint;
import de.FeatureModellingTool.FeatureModel.Feature;
import de.FeatureModellingTool.FeatureModel.FeatureRelation;
import de.FeatureModellingTool.FeatureModel.Interaction;
import de.FeatureModellingTool.FeatureModel.ResourceComponent;
import de.FeatureModellingTool.GraphicalEditor.ElementLocator;
import de.FeatureModellingTool.InfoExplorer.InfoExplorer;
import de.FeatureModellingTool.InfoExplorer2.FeatureNode;
import de.FeatureModellingTool.InfoExplorer2.InfoExplorer2;
import de.reuse.Context;
import de.reuse.ContextImplementation;
/**
* Created by IntelliJ IDEA.
* User: saturn
* Date: 2004-5-3
* Time: 14:50:05
* To change this template use File | Settings | File Templates.
*/
class ElementLocatingImplementation implements ElementLocating, ConstantDefinition{
protected InfoExplorer infoExplorer = null;
protected InfoExplorer2 infoExplorer2 = null;
protected ElementLocator elementLocator = null;
protected final ContextImplementation context = new ContextImplementation();
private InfoExplorerProbe infoExplorerProbe = new InfoExplorerProbe();
private InfoExplorer2Probe infoExplorer2Probe = new InfoExplorer2Probe();
public Context getContext() {
return context;
}
public ElementLocatingImplementation(){
context.addContextChangeListener(new ContextChangeListener());
}
protected class ContextChangeListener implements PropertyChangeListener {
public void propertyChange(PropertyChangeEvent e) {
contextChange(e);
}
}
protected void contextChange(PropertyChangeEvent e) {
String propertyName = e.getPropertyName();
if (INFO_EXPLORER.equals(propertyName)) {
infoExplorer = (InfoExplorer) e.getNewValue();
infoExplorer.getContext().getMVContext().addValue("mouseListener", infoExplorerProbe);
} else if (INFO_EXPLORER2.equals(propertyName)) {
infoExplorer2 = (InfoExplorer2) e.getNewValue();
infoExplorer2.getContext().getMVContext().addValue("mouseListener", infoExplorer2Probe);
} else if (ELEMENT_LOCATOR.equals(propertyName)) {
elementLocator = (ElementLocator) e.getNewValue();
}
}
protected class InfoExplorerProbe extends MouseAdapter {
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
Object object = e.getSource();
if (!(object instanceof JTree)) return;
JTree tree = (JTree) object;
TreePath tp = tree.getPathForLocation(e.getX(), e.getY());
if (tp == null) return;
Object node = tp.getLastPathComponent();
if ((node == null) || (!(node instanceof DefaultMutableTreeNode)))return;
Object userObject = ((DefaultMutableTreeNode)node).getUserObject();
String id = null;
if (userObject instanceof String) return;
if (userObject instanceof Feature){
id = ((Feature)userObject).getID();
} else if (userObject instanceof ResourceComponent){
id = ((ResourceComponent)userObject).getID();
} else if (userObject instanceof FeatureRelation){
id = ((FeatureRelation)userObject).getID();
} else if (userObject instanceof Constraint){
id = ((Constraint)userObject).getID();
} else if (userObject instanceof CFRelation){
id = ((CFRelation)userObject).getID();
} else if (userObject instanceof Interaction){
id = ((Interaction)userObject).getID();
}
if (id == null) return;
if (elementLocator != null){
elementLocator.locateInDefinitionView(id);
}
}
}
public void mousePressed(MouseEvent e) {
if (e.getClickCount() == 1) {
Object object = e.getSource();
if (!(object instanceof JTree)) return;
JTree tree = (JTree) object;
TreePath tp = tree.getPathForLocation(e.getX(), e.getY());
if (tp == null) return;
Object node = tp.getLastPathComponent();
if ((node == null) || (!(node instanceof DefaultMutableTreeNode)))return;
Object userObject = ((DefaultMutableTreeNode)node).getUserObject();
String id = null;
if (userObject instanceof String) return;
if (userObject instanceof Feature){
id = ((Feature)userObject).getID();
} else if (userObject instanceof ResourceComponent){
id = ((ResourceComponent)userObject).getID();
} else if (userObject instanceof FeatureRelation){
id = ((FeatureRelation)userObject).getID();
} else if (userObject instanceof Constraint){
id = ((Constraint)userObject).getID();
} else if (userObject instanceof CFRelation){
id = ((CFRelation)userObject).getID();
} else if (userObject instanceof Interaction){
id = ((Interaction)userObject).getID();
}
if (id == null) return;
if (elementLocator != null){
elementLocator.locateInCurrentView(id);
}
}
}
}
protected class InfoExplorer2Probe extends MouseAdapter {
public void mouseClicked(MouseEvent e) {
// if (e.getClickCount() != 2)
// return;
Object object = e.getSource();
if (!(object instanceof JXTreeTable)) return;
JXTreeTable treeTable = (JXTreeTable) object;
TreePath tp = treeTable.getPathForLocation(e.getX(), e.getY());
if (tp == null) return;
Object node = tp.getLastPathComponent();
if ((node == null) || (!(node instanceof FeatureNode)))return;
FeatureNode featureNode = (FeatureNode)node;
if (featureNode.getNodeType() != FeatureNode.NODE_TYPE_NORMAL)
return;
String featureId = featureNode.getFeature().getID();
if (featureId == null)
return;
if (elementLocator != null){
if (e.getClickCount() == 1)
elementLocator.locateInCurrentView(featureId);
else
elementLocator.locateInDefinitionView(featureId);
}
}
public void mousePressed(MouseEvent e) {
//if (e.getClickCount() != 1)
//return;
Object object = e.getSource();
if (!(object instanceof JXTreeTable)) return;
JXTreeTable treeTable = (JXTreeTable) object;
TreePath tp = treeTable.getPathForLocation(e.getX(), e.getY());
if (tp == null) return;
Object node = tp.getLastPathComponent();
if ((node == null) || (!(node instanceof FeatureNode)))return;
FeatureNode featureNode = (FeatureNode)node;
if (featureNode.getNodeType() != FeatureNode.NODE_TYPE_NORMAL)
return;
String featureId = featureNode.getFeature().getID();
if (featureId == null)
return;
if (elementLocator != null){
elementLocator.locateInCurrentView(featureId);
}
}
}
}