001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041: package org.netbeans.modules.visualweb.propertyeditors;
042:
043: import com.sun.rave.designtime.DesignProperty;
044: import java.awt.Component;
045: import java.beans.PropertyDescriptor;
046:
047: /**
048: * An editor for list-like or table-like properties. Any property that takes a
049: * list or array of objects that have a regular number of fields may be edited
050: * using this editor. Implementing classes must provide an implementation of
051: * the <code>getRows()</code> and <code>setRows(List)</code> methods, which are
052: * called to get and set the property's value as a list of lists (using
053: * {@link java.util.List}). In addition, implementing classes must provide
054: * the column names and types to be used when representing the tabular data in
055: * a table widget.
056: *
057: * Editing is done through a custom pop-up component, but an in-line, read-only
058: * view of the values in the table's default column is also provided. The default
059: * column is the first, or whatever column index is returned by the method
060: * <code>getDefaultDisplayColumnIndex()</code>.
061: *
062: * @see TabularPropertyPanel
063: * @see com.sun.rave.propertyeditors.TabularPropertyModel
064: * @author gjmurphy
065: */
066: public class TabularPropertyEditor extends PropertyEditorBase {
067:
068: /**
069: * Key used to specify a table model within a property descriptor.
070: */
071: public final static String TABLE_MODEL_CLASS = "com.sun.rave.propertyeditors.TABLE_MODEL_CLASS"; //NOI18N
072:
073: /**
074: * Creates a new instance of TabularPropertyEditor.
075: */
076: public TabularPropertyEditor() {
077: }
078:
079: public boolean supportsCustomEditor() {
080: return true;
081: }
082:
083: /**
084: * Returns the index of the column to use as a default display when the
085: * editor is not displaying the full table of values. By default, the
086: * first (0th) column is used.
087: */
088: protected int getTextDisplayColumnIndex() {
089: return 0;
090: }
091:
092: /**
093: * Return a table model suitable for displaying the value of this property
094: * as a table of columns and rows. By default, looks for a table model class
095: * specified as the value of the property descriptor key TABLE_MODEL_CLASS.
096: */
097: protected TabularPropertyModel getTabularPropertyModel() {
098: TabularPropertyModel model = null;
099: DesignProperty designProperty = this .getDesignProperty();
100: if (designProperty != null) {
101: PropertyDescriptor propertyDescriptor = designProperty
102: .getPropertyDescriptor();
103: model = (TabularPropertyModel) propertyDescriptor
104: .getValue(TABLE_MODEL_CLASS);
105: }
106: return model;
107: }
108:
109: /**
110: * Returns this editor's custom editor panel, an instance of TabularPropertyPanel.
111: * To notify the panel of changes in the tabular property, call
112: * <code>((TabularPropertyPanel) this.getCustomEditor()).updateTableData()</code>.
113: */
114: public Component getCustomEditor() {
115: TabularPropertyModel model = this .getTabularPropertyModel();
116: model.setValue(this .getValue());
117: TabularPropertyPanel panel = new TabularPropertyPanel(model,
118: this );
119: return panel;
120: }
121:
122: /**
123: * Returns a string containing the comma-delimited values of the column,
124: * the index of which is returned by <code>getTextDisplayColumnIndex()</code>.
125: */
126: public String getAsText() {
127: TabularPropertyModel model = this .getTabularPropertyModel();
128: model.setValue(this .getValue());
129: int c = this .getTextDisplayColumnIndex();
130: int r = model.getRowCount();
131: if (r <= 0)
132: return "";
133: StringBuffer buffer = new StringBuffer();
134: for (int i = 0; i < r; i++) {
135: buffer.append(model.getValueAt(i, c).toString());
136: buffer.append(", ");
137: }
138: buffer.setLength(buffer.length() - 2);
139: return buffer.toString();
140: }
141:
142: public void setAsText(String text) throws IllegalArgumentException {
143: }
144:
145: public String[] getTags() {
146: return null;
147: }
148:
149: public boolean isEditableAsText() {
150: return false;
151: }
152:
153: public void setValue(Object value) {
154: super .setValue(value);
155: }
156:
157: public Object getValue() {
158: Object retValue;
159: retValue = super.getValue();
160: return retValue;
161: }
162:
163: }
|