summaryrefslogtreecommitdiff
path: root/scripting/java/org/openoffice/netbeans/modules/office/nodes/ScriptNode.java
diff options
context:
space:
mode:
Diffstat (limited to 'scripting/java/org/openoffice/netbeans/modules/office/nodes/ScriptNode.java')
-rw-r--r--scripting/java/org/openoffice/netbeans/modules/office/nodes/ScriptNode.java212
1 files changed, 212 insertions, 0 deletions
diff --git a/scripting/java/org/openoffice/netbeans/modules/office/nodes/ScriptNode.java b/scripting/java/org/openoffice/netbeans/modules/office/nodes/ScriptNode.java
new file mode 100644
index 000000000000..1676a326c492
--- /dev/null
+++ b/scripting/java/org/openoffice/netbeans/modules/office/nodes/ScriptNode.java
@@ -0,0 +1,212 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: ScriptNode.java,v $
+ * $Revision: 1.4 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+package org.openoffice.netbeans.modules.office.nodes;
+
+import org.w3c.dom.*;
+
+import org.openide.actions.*;
+import org.openide.nodes.*;
+import org.openide.util.HelpCtx;
+import org.openide.util.NbBundle;
+import org.openide.util.actions.SystemAction;
+
+/** A simple node with no children.
+ *
+ * @author tomaso
+ */
+public class ScriptNode extends AbstractNode {
+ private Element element;
+ private static final String LOGICAL_NAME = "logicalname";
+ private static final String LANGUAGE_NAME = "languagename";
+
+ public ScriptNode(Element element) {
+ super(Children.LEAF);
+ this.element = element;
+ init();
+ }
+
+ private void init() {
+ setIconBase("/org/openoffice/netbeans/modules/office/resources/OfficeIcon");
+ setDefaultAction(SystemAction.get(PropertiesAction.class));
+
+ NodeList nl = element.getElementsByTagName(LOGICAL_NAME);
+ Element nameElement = (Element)nl.item(0);
+
+ String name = nameElement.getAttribute("value");
+ setName(name);
+ setDisplayName(name.substring(name.lastIndexOf(".") + 1));
+ setShortDescription(name);
+ }
+
+ protected SystemAction[] createActions() {
+ return new SystemAction[] {
+ SystemAction.get(ToolsAction.class),
+ null,
+ SystemAction.get(PropertiesAction.class),
+ };
+ }
+
+ public HelpCtx getHelpCtx() {
+ return HelpCtx.DEFAULT_HELP;
+ }
+
+ // RECOMMENDED - handle cloning specially (so as not to invoke the overhead of FilterNode):
+ /*
+ public Node cloneNode() {
+ // Try to pass in similar constructor params to what you originally got:
+ return new ScriptNode();
+ }
+ */
+
+ protected Sheet createSheet() {
+ Sheet sheet = super.createSheet();
+ Sheet.Set props = sheet.get(Sheet.PROPERTIES);
+ if (props == null) {
+ props = Sheet.createPropertiesSet();
+ sheet.put(props);
+ }
+
+ org.openide.nodes.Node.Property prop = null;
+ if ((prop = getStringProperty(LOGICAL_NAME)) != null)
+ props.put(prop);
+
+ if ((prop = getStringProperty(LANGUAGE_NAME)) != null)
+ props.put(prop);
+
+ return sheet;
+ }
+
+ private org.openide.nodes.Node.Property getStringProperty(String name) {
+ NodeList nl = element.getElementsByTagName(name);
+ if(nl.getLength() != 1)
+ return null;
+
+ Element nameElement = (Element)nl.item(0);
+ String value = nameElement.getAttribute("value");
+
+ return new StringProperty(this, name, value);
+ }
+
+ private class StringProperty extends PropertySupport.ReadOnly {
+ private String name, value;
+ private ScriptNode sn;
+
+ public StringProperty(ScriptNode sn, String name, String value) {
+ super(value, String.class, name,
+ "The name of the java language method for this script");
+ this.sn = sn;
+ this.name = name;
+ this.value = value;
+ }
+
+ public Object getValue() {
+ return value;
+ }
+
+ /* public void setValue(Object obj) {
+ System.out.println("Setting value to: " + obj.toString());
+
+ if ((value instanceof String) != true)
+ throw new IllegalArgumentException(name +
+ " property must be of type String");
+
+ value = obj.toString();
+ if (name.equals(LOGICAL_NAME)) {
+ sn.setName(value);
+ sn.setDisplayName(value.substring(value.lastIndexOf(".") + 1));
+ sn.setShortDescription(value);
+ }
+ } */
+ }
+
+ /* public boolean canRename() {
+ return true;
+ }
+
+ public void setName(String nue) {
+ // Update visible name, fire property changes:
+ super.setName(nue);
+ } */
+
+ /*
+ public boolean canDestroy() {
+ return true;
+ }
+ public void destroy() throws IOException {
+ // Actually remove the node itself and fire property changes:
+ super.destroy();
+ // perform additional actions, i.e. delete underlying object
+ } */
+
+ // Handle copying and cutting specially:
+ /*
+ public boolean canCopy() {
+ return true;
+ }
+ public boolean canCut() {
+ return true;
+ }
+ public Transferable clipboardCopy() {
+ // Add to, do not replace, the default node copy flavor:
+ ExTransferable et = ExTransferable.create(super.clipboardCopy());
+ et.put(new ExTransferable.Single(DataFlavor.stringFlavor) {
+ protected Object getData() {
+ return ScriptNode.this.getDisplayName();
+ }
+ });
+ return et;
+ }
+ public Transferable clipboardCut() {
+ // Add to, do not replace, the default node cut flavor:
+ ExTransferable et = ExTransferable.create(super.clipboardCut());
+ // This is not so useful because this node will not be destroyed afterwards
+ // (it is up to the paste type to decide whether to remove the "original",
+ // and it is not safe to assume that getData will only be called once):
+ et.put(new ExTransferable.Single(DataFlavor.stringFlavor) {
+ protected Object getData() {
+ return ScriptNode.this.getDisplayName();
+ }
+ });
+ return et;
+ }
+ */
+
+ // Permit user to customize whole node at once (instead of per-property):
+ /*
+ public boolean hasCustomizer() {
+ return true;
+ }
+ public Component getCustomizer() {
+ return new MyCustomizingPanel(this);
+ }
+ */
+
+}