/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright (c) 2000-2010 Oracle and/or its affiliates. All rights reserved.
*
* The contents of this file are subject to the terms of either the GNU
* General Public License Version 2 only ("GPL") or the Common Development
* and Distribution License("CDDL") (collectively, the "License"). You
* may not use this file except in compliance with the License. You can
* obtain a copy of the License at
* https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
* or packager/legal/LICENSE.txt. See the License for the specific
* language governing permissions and limitations under the License.
*
* When distributing the software, include this License Header Notice in each
* file and include the License file at packager/legal/LICENSE.txt.
*
* GPL Classpath Exception:
* Oracle designates this particular file as subject to the "Classpath"
* exception as provided by Oracle in the GPL Version 2 section of the License
* file that accompanied this code.
*
* Modifications:
* If applicable, add the following below the License Header, with the fields
* enclosed by brackets [] replaced by your own identifying information:
* "Portions Copyright [year] [name of copyright owner]"
*
* Contributor(s):
* If you wish your version of this file to be governed by only the CDDL or
* only the GPL Version 2, indicate your decision by adding "[Contributor]
* elects to include this software in this distribution under the [CDDL or GPL
* Version 2] license." If you don't indicate a single choice of license, a
* recipient has the option to distribute your version of this file under
* either the CDDL, the GPL Version 2 or to extend the choice of license to
* its licensees as provided above. However, if you add GPL Version 2 code
* and therefore, elected the GPL Version 2 license, then the option applies
* only if the new code is made subject to such option by the copyright
* holder.
*/
/*
* @(#)BytesField.java 1.6 06/28/07
*/
package com.sun.messaging.jmq.admin.apps.console.util;
import java.awt.BorderLayout;
import java.awt.event.ActionListener;
import javax.swing.JPanel;
import javax.swing.JComboBox;
import com.sun.messaging.jmq.util.SizeString;
import com.sun.messaging.jmq.admin.util.Globals;
import com.sun.messaging.jmq.admin.resources.AdminConsoleResources;
/**
* This class implements a field used to enter some amount of
* bytes. It supports the selection of the byte unit:
*
* <UL>
* <LI>MegaBytes
* <LI>KiloBytes
* <LI>Bytes
* </UL>
* The default unit displayed is KILOBYTES.
* <P>
*
* The getValue() method returns the value entered in <STRONG>BYTES</STRONG>.
*/
public class BytesField extends JPanel {
public final static int BYTES = 0;
public final static int KILOBYTES = 1;
public final static int MEGABYTES = 2;
private static AdminConsoleResources acr = Globals.getAdminConsoleResources();
private LongField lf;
private JComboBox unitCB;
public BytesField(long min, long max, String text) {
this(min, max, text, 0);
}
public BytesField(long min, long max, int columns) {
this(min, max, null, columns);
}
public BytesField(long min, long max,
String text, int columns) {
initGui(min, max, text, columns);
setUnit(KILOBYTES);
}
public void addActionListener(ActionListener l) {
lf.addActionListener(l);
}
public void setText(String s) {
lf.setText(s);
}
public String getText() {
return (lf.getText());
}
public void setEnabled(boolean b) {
lf.setEnabled(b);
unitCB.setEnabled(b);
}
/**
* Set the byte unit.
*
* @param unit byte unit. Can be one of MEGABYTES,
* KILOBYTES, or BYTES
*/
public void setUnit(int unit) {
if ((unit < 0) || (unit > MEGABYTES)) {
return;
}
unitCB.setSelectedIndex(unit);
}
/*
* Returns the unit of the value i.e. BYTES, KILOBYTES, or
* MEGABYTES.
*
* @return The unit of the value.
*/
public int getUnit() {
int selIndex = unitCB.getSelectedIndex();
return (selIndex);
}
/**
* Sets the bytes string using the format
* recognized by the SizeString class.
*/
public void setSizeString(String strVal) {
SizeString ss;
String tmp = strVal.trim();
long val;
int unit;
char c;
try {
ss = new SizeString(tmp);
} catch (Exception e) {
/*
* Should not get here
*/
return;
}
c = tmp.charAt(tmp.length() -1);
if (Character.isLetter(c)) {
switch (c) {
case 'm':
case 'M':
val = ss.getMBytes();
unit = BytesField.MEGABYTES;
break;
case 'k':
case 'K':
val = ss.getKBytes();
unit = BytesField.KILOBYTES;
break;
case 'b':
case 'B':
val = ss.getBytes();
unit = BytesField.BYTES;
break;
default:
val = 0;
unit = BytesField.BYTES;
break;
}
} else {
val = ss.getBytes();
unit = BytesField.BYTES;
}
setText(Long.toString(val));
setUnit(unit);
}
/**
* Returns the bytes string in the format recognized by
* the SizeString class.
*/
public String getSizeString() {
String strValue = getText();
int unit = getUnit();
String unitStr;
switch (unit) {
case BytesField.BYTES:
unitStr = "b";
break;
case BytesField.KILOBYTES:
unitStr = "k";
break;
case BytesField.MEGABYTES:
unitStr = "m";
break;
default:
unitStr = "b";
break;
}
return (strValue + unitStr);
}
/**
* Return the value in bytes.
*
* @return The value entered in bytes.
*/
public long getValue() {
String s;
int selIndex;
long tmpLong;
s = lf.getText();
try {
tmpLong = Long.parseLong(s);
} catch (Exception e) {
return (-1);
}
selIndex = unitCB.getSelectedIndex();
switch (selIndex) {
case MEGABYTES:
return (tmpLong * 1048576);
case KILOBYTES:
return (tmpLong * 1024);
case BYTES:
return (tmpLong);
default:
return (-1);
}
}
private void initGui(long min, long max, String text, int collumns) {
String[] units;
lf = new LongField(min, max, text, collumns);
units = new String[ 3 ];
units[MEGABYTES] = acr.getString(acr.I_MEGABYTES);
units[KILOBYTES] = acr.getString(acr.I_KILOBYTES);
units[BYTES] = acr.getString(acr.I_BYTES);
unitCB = new JComboBox(units);
setLayout(new BorderLayout());
add(lf, "Center");
add(unitCB, "East");
}
}