001: /*
002: * ====================================================================
003: * The JRefactory License, Version 1.0
004: *
005: * Copyright (c) 2001 JRefactory. All rights reserved.
006: *
007: * Redistribution and use in source and binary forms, with or without
008: * modification, are permitted provided that the following conditions
009: * are met:
010: *
011: * 1. Redistributions of source code must retain the above copyright
012: * notice, this list of conditions and the following disclaimer.
013: *
014: * 2. Redistributions in binary form must reproduce the above copyright
015: * notice, this list of conditions and the following disclaimer in
016: * the documentation and/or other materials provided with the
017: * distribution.
018: *
019: * 3. The end-user documentation included with the redistribution,
020: * if any, must include the following acknowledgment:
021: * "This product includes software developed by the
022: * JRefactory (http://www.sourceforge.org/projects/jrefactory)."
023: * Alternately, this acknowledgment may appear in the software itself,
024: * if and wherever such third-party acknowledgments normally appear.
025: *
026: * 4. The names "JRefactory" must not be used to endorse or promote
027: * products derived from this software without prior written
028: * permission. For written permission, please contact seguin@acm.org.
029: *
030: * 5. Products derived from this software may not be called "JRefactory",
031: * nor may "JRefactory" appear in their name, without prior written
032: * permission of Chris Seguin.
033: *
034: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
035: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
036: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
037: * DISCLAIMED. IN NO EVENT SHALL THE CHRIS SEGUIN OR
038: * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
039: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
040: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
041: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
042: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
043: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
044: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
045: * SUCH DAMAGE.
046: * ====================================================================
047: *
048: * This software consists of voluntary contributions made by many
049: * individuals on behalf of JRefactory. For more information on
050: * JRefactory, please see
051: * <http://www.sourceforge.org/projects/jrefactory>.
052: */
053: package org.acm.seguin.tools.install;
054:
055: import java.awt.GridBagConstraints;
056: import java.awt.GridBagLayout;
057: import java.awt.Insets;
058: import java.io.PrintWriter;
059: import java.util.StringTokenizer;
060: import javax.swing.JTextArea;
061: import javax.swing.border.EtchedBorder;
062: import org.acm.seguin.util.MissingSettingsException;
063:
064: /**
065: * Stores the header and footer
066: *
067: *@author Chris Seguin
068: *@created September 12, 2001
069: */
070: public abstract class MultilineSettingPanel extends SettingPanel {
071: private JTextArea textArea;
072:
073: /**
074: * Constructor for the MultilineSettingPanel object
075: */
076: public MultilineSettingPanel() {
077: super ();
078: setLayout(new GridBagLayout());
079: }
080:
081: /**
082: * Gets the DefaultValue attribute of the SettingPanel object
083: *
084: *@return The DefaultValue value
085: */
086: public String getDefaultValue() {
087: int count = 1;
088: boolean possible = true;
089: StringBuffer result = new StringBuffer();
090: while (possible) {
091: try {
092: result.append(SettingPanel.bundle.getString(getKey()
093: + "." + count));
094: result.append("\n");
095: count++;
096: } catch (MissingSettingsException mse) {
097: possible = false;
098: }
099: }
100: return result.toString();
101: }
102:
103: /**
104: * Gets the Value attribute of the SettingPanel object
105: *
106: *@return The Value value
107: */
108: public String getValue() {
109: return textArea.getText();
110: }
111:
112: /**
113: * Adds a feature to the Control attribute of the MultilineSettingPanel
114: * object
115: */
116: public void addControl() {
117: textArea = new JTextArea();
118: textArea.setText(getDefaultValue());
119:
120: GridBagConstraints constraints = new GridBagConstraints();
121: constraints.gridx = 0;
122: constraints.gridy = 1;
123: constraints.gridwidth = 1;
124: constraints.gridheight = 1;
125: constraints.weightx = 1.0;
126: constraints.weighty = 1.0;
127: constraints.anchor = constraints.WEST;
128: constraints.fill = constraints.BOTH;
129: constraints.insets = new Insets(5, 5, 5, 5);
130: constraints.ipadx = 0;
131: constraints.ipady = 0;
132: textArea.setBorder(new EtchedBorder());
133: add(textArea, constraints);
134: }
135:
136: /**
137: * Generate the settings file for this particular setting
138: *
139: *@param output the output stream
140: */
141: public void generateSetting(PrintWriter output) {
142: printDescription(output);
143: StringTokenizer tok = new StringTokenizer(textArea.getText(),
144: "\r\n");
145: int count = 1;
146: while (tok.hasMoreTokens()) {
147: output.println(getKey() + "." + count + "="
148: + addEscapes(tok.nextToken()));
149: count++;
150: }
151: output.println("");
152: }
153:
154: /**
155: * Description of the Method
156: */
157: public void reload() {
158: textArea.setText(getDefaultValue());
159: }
160:
161: /**
162: * Gets the initial value if it is not defined
163: *
164: *@return The InitialValue value
165: */
166: protected String getInitialValue() {
167: return "";
168: }
169:
170: /**
171: * Adds the escapes to the lines
172: *
173: *@param line the line to add the escapes to
174: *@return a transformed line
175: */
176: private String addEscapes(String line) {
177: StringBuffer l_sbBuffer = new StringBuffer();
178: for (int ndx = 0; ndx < line.length(); ndx++) {
179: if (line.charAt(ndx) == '\\') {
180: l_sbBuffer.append("\\\\");
181: } else {
182: l_sbBuffer.append(line.charAt(ndx));
183: }
184: }
185:
186: return l_sbBuffer.toString();
187: }
188: }
189: /*******\
190: \*******/
|