|
What this is
Other links
The source code
/*
* Sun Public License Notice
*
* The contents of this file are subject to the Sun Public License
* Version 1.0 (the "License"). You may not use this file except in
* compliance with the License. A copy of the License is available at
* http://www.sun.com/
*
* The Original Code is NetBeans. The Initial Developer of the Original
* Code is Sun Microsystems, Inc. Portions Copyright 1997-2003 Sun
* Microsystems, Inc. All Rights Reserved.
*/
package org.netbeans.modules.cvsclient.editors;
import java.awt.*;
import java.beans.*;
import java.util.*;
import org.openide.explorer.propertysheet.editors.XMLPropertyEditor;
/** A property editor for array of Strings.
* @author Ian Formanek
* @version 0.10, 17 Jun 1998
*/
public class StatesStringArrayEditor implements XMLPropertyEditor {
// constants for XML persistence
private static final String XML_STRING_ARRAY = "StringArray"; // NOI18N
private static final String XML_STRING_ITEM = "StringItem"; // NOI18N
private static final String ATTR_COUNT = "count"; // NOI18N
private static final String ATTR_INDEX = "index"; // NOI18N
private static final String ATTR_VALUE = "value"; // NOI18N
// private fields
private String[] strings;
private PropertyChangeSupport support;
public StatesStringArrayEditor() {
support = new PropertyChangeSupport (this);
}
public Object getValue () {
return strings;
}
public void setValue (Object value) {
strings = (String[]) value;
support.firePropertyChange ("", null, null); // NOI18N
}
// -----------------------------------------------------------------------------
// StringArrayCustomizable implementation
/** Used to acquire the current value from the PropertyEditor
* @return the current value of the property
*/
public String[] getStringArray () {
return (String[])getValue ();
}
/** Used to modify the current value in the PropertyEditor
* @param value the new value of the property
*/
public void setStringArray (String[] value) {
setValue (value);
}
// end of StringArrayCustomizable implementation
protected final String getStrings(boolean quoted) {
if (strings == null) return "null"; // NOI18N
StringBuffer buf = new StringBuffer ();
for (int i = 0; i < strings.length; i++) {
// XXX handles in-string escapes if quoted
buf.append(quoted ? "\""+strings[i]+"\"" : strings[i]); // NOI18N
if (i != strings.length - 1)
buf.append (", "); // NOI18N
}
return buf.toString ();
}
public String getAsText () {
return getStrings(false);
}
public void setAsText (String text) {
if (text.equals("null")) { // NOI18N
setValue(null);
return;
}
StringTokenizer tok = new StringTokenizer(text, ","); // NOI18N
java.util.List list = new LinkedList();
while (tok.hasMoreTokens()) {
String s = tok.nextToken();
list.add(s.trim());
}
String [] a = (String[])list.toArray(new String[list.size()]);
setValue(a);
}
public String getJavaInitializationString () {
if (strings == null) return "null"; // NOI18N
// [PENDING - wrap strings ???]
StringBuffer buf = new StringBuffer ("new String[] {"); // NOI18N
buf.append (getStrings(true));
buf.append ("}"); // NOI18N
return buf.toString ();
}
public String[] getTags () {
return null;
}
public boolean isPaintable () {
return false;
}
public void paintValue (Graphics g, Rectangle rectangle) {
}
public boolean supportsCustomEditor () {
return true;
}
public Component getCustomEditor() {
return new StatesStringArrayCustomEditor(this);
}
public void addPropertyChangeListener (PropertyChangeListener propertyChangeListener) {
support.addPropertyChangeListener (propertyChangeListener);
}
public void removePropertyChangeListener (PropertyChangeListener propertyChangeListener) {
support.removePropertyChangeListener (propertyChangeListener);
}
// -------------------------------------------
// XMLPropertyEditor implementation
/** Called to store current property value into XML subtree.
* @param doc The XML document to store the XML in - should be used for
* creating nodes only
* @return the XML DOM element representing a subtree of XML from which
the value should be loaded
*/
public org.w3c.dom.Node storeToXML(org.w3c.dom.Document doc) {
org.w3c.dom.Element arrayEl = doc.createElement(XML_STRING_ARRAY);
int count = strings != null ? strings.length : 0;
arrayEl.setAttribute(ATTR_COUNT, Integer.toString(count));
for (int i=0; i < count; i++) {
org.w3c.dom.Element itemEl = doc.createElement(XML_STRING_ITEM);
itemEl.setAttribute(ATTR_INDEX, Integer.toString(i));
itemEl.setAttribute(ATTR_VALUE, strings[i]);
arrayEl.appendChild(itemEl);
}
return arrayEl;
}
/** Called to load property value from specified XML subtree.
* If succesfully loaded, the value should be available via getValue().
* An IOException should be thrown when the value cannot be restored from
* the specified XML element
* @param element the XML DOM element representing a subtree of XML from
* which the value should be loaded
* @exception IOException thrown when the value cannot be restored from
the specified XML element
*/
public void readFromXML(org.w3c.dom.Node element) throws java.io.IOException {
if (!XML_STRING_ARRAY.equals(element.getNodeName()))
throw new java.io.IOException();
org.w3c.dom.NamedNodeMap attributes = element.getAttributes();
String[] stringArray;
org.w3c.dom.Node countNode = null;
int count = 0;
if ((countNode = attributes.getNamedItem(ATTR_COUNT)) != null
&& (count = Integer.parseInt(countNode.getNodeValue())) > 0) {
stringArray = new String[count];
org.w3c.dom.NodeList items = element.getChildNodes();
org.w3c.dom.Element itemEl;
for (int i = 0; i < items.getLength(); i++) {
if (items.item(i).getNodeType() == org.w3c.dom.Node.ELEMENT_NODE) {
itemEl = (org.w3c.dom.Element)items.item(i);
if (itemEl.getNodeName().equals(XML_STRING_ITEM)) {
String indexStr = itemEl.getAttribute(ATTR_INDEX);
String valueStr = itemEl.getAttribute(ATTR_VALUE);
if (indexStr != null && valueStr != null) {
int index = Integer.parseInt(indexStr);
if (index >=0 && index < count)
stringArray[index] = valueStr;
}
}
}
}
}
else stringArray = new String[0];
setValue(stringArray);
}
}
|
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.