blob: c448e1ad3d8c01e911843560c2c619f35cf59032 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the 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);
}
*/
}