001: /*
002: * The contents of this file are subject to the terms of the Common Development
003: * and Distribution License (the License). You may not use this file except in
004: * compliance with the License.
005: *
006: * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
007: * or http://www.netbeans.org/cddl.txt.
008: *
009: * When distributing Covered Code, include this CDDL Header Notice in each file
010: * and include the License file at http://www.netbeans.org/cddl.txt.
011: * If applicable, add the following below the CDDL Header, with the fields
012: * enclosed by brackets [] replaced by your own identifying information:
013: * "Portions Copyrighted [year] [name of copyright owner]"
014: *
015: * The Original Software is NetBeans. The Initial Developer of the Original
016: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
017: * Microsystems, Inc. All Rights Reserved.
018: */
019:
020: package org.netbeans.modules.xslt.mapper.view;
021:
022: import java.awt.Point;
023: import java.awt.event.InputEvent;
024: import org.netbeans.modules.soa.mapper.common.IMapperEvent;
025: import org.netbeans.modules.soa.mapper.common.IMapperListener;
026: import org.netbeans.modules.soa.mapper.common.IMapperNode;
027: import org.netbeans.modules.soa.mapper.common.basicmapper.IBasicMapper;
028: import org.netbeans.modules.soa.mapper.common.basicmapper.IBasicMapperRule;
029: import org.netbeans.modules.soa.mapper.common.basicmapper.canvas.gtk.ICanvasFieldNode;
030: import org.netbeans.modules.soa.mapper.common.basicmapper.canvas.gtk.ICanvasMethoidNode;
031: import org.netbeans.modules.soa.mapper.common.basicmapper.canvas.gtk.ICanvasView;
032: import org.netbeans.modules.soa.mapper.common.basicmapper.literal.ILiteralEditor;
033: import org.netbeans.modules.soa.mapper.common.basicmapper.literal.ILiteralUpdater;
034: import org.netbeans.modules.soa.mapper.common.basicmapper.methoid.IField;
035: import org.netbeans.modules.soa.mapper.common.basicmapper.methoid.IFieldNode;
036: import org.netbeans.modules.soa.mapper.common.basicmapper.methoid.IMethoid;
037: import org.netbeans.modules.soa.mapper.common.basicmapper.methoid.IMethoidNode;
038: import org.netbeans.modules.soa.mapper.common.gtk.ICanvasMouseData;
039: import org.netbeans.modules.soa.mapper.common.gtk.ICanvasMouseListener;
040: import org.netbeans.modules.xslt.mapper.methoid.Constants;
041: import org.netbeans.modules.xslt.mapper.model.nodes.LiteralCanvasNode;
042: import org.openide.filesystems.FileObject;
043:
044: /**
045: * This class is a workaround to support edit literals which are created
046: * from standard NetBeans palette.
047: *
048: * @author nk160297
049: */
050: public class LiteralEditListener implements ICanvasMouseListener,
051: IMapperListener {
052:
053: private XsltMapper myMapper;
054:
055: public LiteralEditListener(IBasicMapper mapper) {
056: assert mapper instanceof XsltMapper;
057: myMapper = (XsltMapper) mapper;
058: }
059:
060: public boolean doMouseDblClick(ICanvasMouseData event) {
061: int mods = event.getMouseModifier();
062: if ((mods & InputEvent.BUTTON1_MASK) == 0) {
063: return false;
064: }
065: ICanvasView canvas = myMapper.getMapperViewManager()
066: .getCanvasView().getCanvas();
067: Point point = event.getViewLocation();
068: ICanvasMethoidNode canvasMethoidNode = canvas
069: .getCanvasMethoidNodeByPoint(point);
070: if (canvasMethoidNode == null) {
071: return false;
072: }
073: IMethoidNode methoidNode = canvasMethoidNode.getMethoidNode();
074: if (methoidNode == null) {
075: return false;
076: }
077: Object nodeObject = methoidNode.getNodeObject();
078: if (nodeObject == null
079: || !(nodeObject instanceof LiteralCanvasNode)) {
080: // Only Literals are supported.
081: return false;
082: }
083: ICanvasFieldNode canvasFieldNode = canvas
084: .getCanvasFieldNodeByPoint(point);
085: if (canvasFieldNode == null) {
086: return false;
087: }
088: IFieldNode fieldNode = canvasFieldNode.getFieldNode();
089: if (fieldNode == null) {
090: return false;
091: }
092: IField field = (IField) fieldNode.getFieldObject();
093: if (field == null) {
094: return false;
095: }
096: ILiteralUpdater literalUpdater = field.getLiteralUpdater();
097: if (literalUpdater == null) {
098: String type = field.getType();
099: literalUpdater = myMapper.getLiteralUpdaterFactory()
100: .createLiteralUpdater(type);
101: if (literalUpdater == null) {
102: return false;
103: }
104: }
105:
106: ILiteralEditor editor = literalUpdater.getEditor(myMapper,
107: fieldNode);
108: if (editor != null) {
109: editor.show();
110: }
111:
112: return true;
113: }
114:
115: public boolean doMouseUp(ICanvasMouseData data) {
116: return false;
117: }
118:
119: public boolean doMouseMove(ICanvasMouseData data) {
120: return false;
121: }
122:
123: public boolean doMouseDown(ICanvasMouseData data) {
124: return false;
125: }
126:
127: public boolean doMouseClick(ICanvasMouseData data) {
128: return false;
129: }
130:
131: public void eventInvoked(IMapperEvent e) {
132: Object eventObject = e.getTransferObject();
133: //
134: if (e.getEventType().equals(IMapperEvent.REQ_NEW_NODE)) {
135: IBasicMapperRule rule = myMapper.getMapperRule();
136: if (rule != null && eventObject instanceof IMapperNode) {
137: IMethoidNode mNode = (IMethoidNode) eventObject;
138: if (rule.isAllowToCreate(mNode)) {
139: handleLiteral(mNode);
140: }
141: }
142: }
143: }
144:
145: private void handleLiteral(IMethoidNode mNode) {
146: IMethoid methoid = (IMethoid) mNode.getMethoidObject();
147: //
148: if (methoid.isLiteral()) {
149: IFieldNode fieldNode = (IFieldNode) mNode
150: .getOutputFieldNodes().get(0); // all literals has one output
151: String outputType = fieldNode.getTypeName();
152: switch (Constants.LiteralType.findByName(outputType)) {
153: case XPATH_LITERAL_TYPE:
154:
155: // Node dataNode = NodeFactory.getInstance().createNode(exprObj);
156: // mNode.setNodeObject(dataNode);
157: // fieldNode.setNodeObject(dataNode);
158: // getMapper().addNode(mNode);
159:
160: ILiteralUpdater literalUpdater = myMapper
161: .getLiteralUpdaterFactory()
162: .createLiteralUpdater(outputType);
163: literalUpdater.getEditor(myMapper, fieldNode).show();
164: return;
165: }
166: }
167: }
168:
169: }
|