001: /*
002: * This file is not part of the ItsNat framework.
003: *
004: * Original source code use and closed source derivatives are authorized
005: * to third parties with no restriction or fee.
006: * The original source code is owned by the author.
007: *
008: * This program is distributed AS IS in the hope that it will be useful,
009: * but WITHOUT ANY WARRANTY; without even the implied warranty of
010: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
011: *
012: * Author: Jose Maria Arranz Santamaria
013: * (C) Innowhere Software Services S.L., Spanish company, year 2007
014: */
015:
016: package org.itsnat.feashow.features.core;
017:
018: import javax.swing.tree.DefaultMutableTreeNode;
019: import javax.swing.tree.DefaultTreeModel;
020: import javax.swing.tree.TreePath;
021: import javax.swing.tree.TreeSelectionModel;
022: import org.itsnat.comp.free.ItsNatFreeTree;
023: import org.itsnat.core.ClientDocument;
024: import org.itsnat.core.ItsNatDocument;
025: import org.itsnat.core.ItsNatServletRequest;
026: import org.itsnat.feashow.FeatureTreeBuilder;
027: import org.itsnat.feashow.FeatureTreeNode;
028: import org.w3c.dom.Element;
029: import org.w3c.dom.events.DocumentEvent;
030: import org.w3c.dom.events.EventTarget;
031: import org.w3c.dom.events.MouseEvent;
032: import org.w3c.dom.views.AbstractView;
033: import org.w3c.dom.views.DocumentView;
034:
035: public class SelectFeatureFromURL {
036: public static void selectFeatureNode(
037: FeatureTreeBuilder treeBuilder, ItsNatServletRequest request) {
038: String featureNameComplete = request.getServletRequest()
039: .getParameter("feature");
040: if (featureNameComplete == null) {
041: selectDefault(treeBuilder);
042: } else {
043: int pos = featureNameComplete.lastIndexOf('.');
044: String featureName = featureNameComplete.substring(0, pos);
045:
046: DefaultMutableTreeNode dataNode = (DefaultMutableTreeNode) treeBuilder
047: .getDefaultMutableTreeNode(featureName);
048: if (dataNode == null)
049: throw new RuntimeException("Feature not found:"
050: + featureName);
051:
052: FeatureTreeNode feature = (FeatureTreeNode) dataNode
053: .getUserObject();
054: ItsNatFreeTree tree = treeBuilder.getItsNatFreeTree();
055: DefaultTreeModel dataModel = (DefaultTreeModel) tree
056: .getTreeModel();
057: TreePath path = new TreePath(dataModel
058: .getPathToRoot(dataNode));
059:
060: String panelName = featureNameComplete.substring(pos + 1,
061: featureNameComplete.length());
062: int panel = feature.getPanelCode(panelName);
063:
064: String methodName = request.getServletRequest()
065: .getParameter("method");
066: if (methodName == null)
067: methodDirect(path, feature, panel); // by default
068: else if (methodName.equals("direct"))
069: methodDirect(path, feature, panel);
070: else if (methodName.equals("evtbrowser"))
071: methodEventUsingBrowser(path, feature, panel);
072: else if (methodName.equals("evtnotbrowser"))
073: methodEventNotBrowser(path, feature, panel);
074: else
075: throw new RuntimeException("Unknown method:"
076: + methodName);
077:
078: }
079: }
080:
081: public static void selectDefault(FeatureTreeBuilder treeBuilder) {
082: ItsNatFreeTree tree = treeBuilder.getItsNatFreeTree();
083: TreeSelectionModel selModel = tree.getTreeSelectionModel();
084: DefaultTreeModel dataModel = (DefaultTreeModel) tree
085: .getTreeModel();
086:
087: selModel.setSelectionPath(new TreePath(dataModel.getRoot()));
088: }
089:
090: public static void methodDirect(TreePath path,
091: FeatureTreeNode feature, int panel) {
092: FeatureTreeBuilder treeBuilder = feature
093: .getFeatureTreeBuilder();
094: ItsNatFreeTree tree = treeBuilder.getItsNatFreeTree();
095:
096: TreeSelectionModel selModel = tree.getTreeSelectionModel();
097: selModel.setSelectionPath(path);
098:
099: if (panel != feature.getFirstPanel())
100: feature.selectPanel(panel);
101: }
102:
103: public static void methodEventUsingBrowser(final TreePath path,
104: final FeatureTreeNode feature, final int panel) {
105: FeatureTreeBuilder treeBuilder = feature
106: .getFeatureTreeBuilder();
107: final ItsNatFreeTree tree = treeBuilder.getItsNatFreeTree();
108: final ItsNatDocument itsNatDoc = feature.getItsNatDocument();
109:
110: Runnable dispCode = new Runnable() {
111: public void run() {
112: Element featureElem;
113: EventTarget featureElemEnh;
114: MouseEvent event1;
115: synchronized (itsNatDoc) {
116: featureElem = tree.getItsNatTreeUI()
117: .getParentElementFromTreePath(path);
118: featureElemEnh = (EventTarget) itsNatDoc
119: .getItsNatNode(featureElem);
120: event1 = createMouseEvent(itsNatDoc);
121: }
122: featureElemEnh.dispatchEvent(event1); // Select feature
123:
124: if (panel == feature.getFirstPanel())
125: return;
126:
127: Element tabElem;
128: EventTarget tabElemEnh;
129: MouseEvent event2;
130: synchronized (itsNatDoc) {
131: tabElem = feature.getTabElement(panel);
132: tabElemEnh = (EventTarget) itsNatDoc
133: .getItsNatNode(tabElem);
134: event2 = createMouseEvent(itsNatDoc);
135: }
136:
137: tabElemEnh.dispatchEvent(event2); // Select tab
138: }
139: };
140: ClientDocument client = itsNatDoc.getClientDocumentOwner();
141: client.startEventDispatcherThread(dispCode);
142: }
143:
144: public static void methodEventNotBrowser(TreePath path,
145: FeatureTreeNode feature, int panel) {
146: FeatureTreeBuilder treeBuilder = feature
147: .getFeatureTreeBuilder();
148: ItsNatFreeTree tree = treeBuilder.getItsNatFreeTree();
149: ItsNatDocument itsNatDoc = feature.getItsNatDocument();
150:
151: Element featureElem = tree.getItsNatTreeUI()
152: .getParentElementFromTreePath(path);
153: EventTarget featureElemEnh = (EventTarget) itsNatDoc
154: .getItsNatNode(featureElem);
155: MouseEvent event1 = createMouseEvent(itsNatDoc);
156: featureElemEnh.dispatchEvent(event1); // Select feature
157:
158: if (panel == feature.getFirstPanel())
159: return;
160:
161: Element tabElem = feature.getTabElement(panel);
162: EventTarget tabElemEnh = (EventTarget) itsNatDoc
163: .getItsNatNode(tabElem);
164: MouseEvent event2 = createMouseEvent(itsNatDoc);
165: tabElemEnh.dispatchEvent(event2); // Select tab
166: }
167:
168: public static MouseEvent createMouseEvent(ItsNatDocument itsNatDoc) {
169: DocumentEvent docEvent = (DocumentEvent) itsNatDoc;
170: AbstractView view = ((DocumentView) itsNatDoc).getDefaultView();
171:
172: MouseEvent event = (MouseEvent) docEvent
173: .createEvent("MouseEvents");
174: event.initMouseEvent("click", true, true, view, 0, 0, 0, 0, 0,
175: false, false, false, false, (short) 0/*left button*/,
176: null);
177: return event;
178: }
179:
180: }
|