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.model.nodes.actions;
021:
022: import java.awt.Dialog;
023: import java.awt.event.ActionEvent;
024: import org.netbeans.modules.soa.ui.form.valid.DefaultDialogDescriptor;
025: import org.netbeans.modules.soa.ui.form.valid.SoaDialogDisplayer;
026: import org.netbeans.modules.xml.xpath.AbstractXPathModelHelper;
027: import org.netbeans.modules.xml.xpath.XPathException;
028: import org.netbeans.modules.xml.xpath.XPathExpression;
029: import org.netbeans.modules.xml.xpath.XPathModel;
030: import org.netbeans.modules.xml.xpath.XPathPredicateExpression;
031: import org.netbeans.modules.xslt.mapper.model.targettree.PredicatedSchemaNode;
032: import org.netbeans.modules.xslt.mapper.view.PredicateManager;
033: import org.netbeans.modules.xslt.mapper.view.XsltMapper;
034: import org.netbeans.modules.xslt.mapper.xpatheditor.ExpressionEditor;
035: import org.openide.util.HelpCtx;
036: import org.openide.util.NbBundle;
037:
038: /**
039: * Shows the Expression editor dialog in order to edit a predicate.
040: *
041: * @author nk160297
042: */
043: public class EditPredicateAction extends XsltNodeAction {
044:
045: private static final long serialVersionUID = 1L;
046:
047: public EditPredicateAction(XsltMapper xsltMapper,
048: PredicatedSchemaNode node) {
049: super (xsltMapper, node);
050: postInit();
051: // putValue(DeleteAction.ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_INSERT, 0));
052: }
053:
054: @Override
055: public String getDisplayName() {
056: return NbBundle.getMessage(ActionConst.class, "EDIT_PREDICATE"); // NOI18N
057: }
058:
059: public void actionPerformed(ActionEvent e) {
060: // XslModel model = myXsltMapper.getContext().getXSLModel();
061: // Object dataObject = myTreeNode.getDataObject();
062:
063: ExpressionEditor exprEditor = new ExpressionEditor(myXsltMapper);
064: //
065: XPathPredicateExpression[] predicateArr = ((PredicatedSchemaNode) myTreeNode)
066: .getPredicatedAxiComp().getPredicates();
067: String firstPredicateText = predicateArr[0]
068: .getExpressionString();
069: if (predicateArr != null && predicateArr.length > 0) {
070: exprEditor.setSelectedValue(firstPredicateText);
071: }
072: //
073: String title = NbBundle.getMessage(ExpressionEditor.class,
074: "TITLE_ExpressionBuilder");
075: DefaultDialogDescriptor descriptor = new DefaultDialogDescriptor(
076: exprEditor, title);
077: descriptor.setHelpCtx(new HelpCtx("xslt_editor_xpath")); // NOI18N
078:
079: Dialog dialog = SoaDialogDisplayer.getDefault().createDialog(
080: descriptor);
081: dialog.setVisible(true);
082: //
083: if (!descriptor.isOkHasPressed()) {
084: return;
085: }
086: String literal = exprEditor.getSelectedValue();
087: if (null == literal) {
088: literal = "";
089: }
090: boolean isPredicateExpressionDeleted = (firstPredicateText != null)
091: && (literal.length() == 0)
092: && (!firstPredicateText.equals(literal));
093: //
094: XPathModel xpImpl = AbstractXPathModelHelper.getInstance()
095: .newXPathModel();
096: try {
097: if (!isPredicateExpressionDeleted) {
098: XPathExpression expression = xpImpl
099: .parseExpression(literal);
100: XPathPredicateExpression predicate = AbstractXPathModelHelper
101: .getInstance().newXPathPredicateExpression(
102: expression);
103:
104: if (predicateArr != null && predicateArr.length > 0) {
105: // If there was previous prediates, then modify first element only
106: XPathPredicateExpression[] newPredicateArr = new XPathPredicateExpression[predicateArr.length];
107: newPredicateArr[0] = predicate;
108: // copy remaining elements as is
109: for (int index = 1; index < predicateArr.length; index++) {
110: newPredicateArr[index] = predicateArr[index];
111: }
112: predicateArr = newPredicateArr;
113: } else {
114: // If there was not - create a new one
115: predicateArr = new XPathPredicateExpression[] { predicate };
116: }
117: }
118: //
119: PredicateManager pm = myXsltMapper.getPredicateManager();
120: if (!isPredicateExpressionDeleted) {
121: pm.modifyPredicate((PredicatedSchemaNode) myTreeNode,
122: predicateArr);
123: } else {
124: pm.deletePredicate((PredicatedSchemaNode) myTreeNode);
125: }
126: } catch (XPathException ex) {
127: // Error.Incorrect expression
128: }
129: }
130: }
|