/* * $Id: TextComponentUtil.java,v 1.1 2005/05/25 19:56:30 ahmed Exp $ * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package jaligner.ui.util; import jaligner.ui.clipboard.ClipboardHandlerFactory; import jaligner.ui.filechooser.FileChooserFactory; import jaligner.ui.filechooser.NamedInputStream; import jaligner.util.Commons; import java.io.BufferedReader; import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.logging.Level; import java.util.logging.Logger; import javax.print.Doc; import javax.print.DocFlavor; import javax.print.DocPrintJob; import javax.print.PrintService; import javax.print.PrintServiceLookup; import javax.print.ServiceUI; import javax.print.SimpleDoc; import javax.print.attribute.HashDocAttributeSet; import javax.print.attribute.HashPrintRequestAttributeSet; import javax.print.attribute.PrintRequestAttributeSet; import javax.print.attribute.standard.DocumentName; import javax.print.attribute.standard.JobName; import javax.swing.text.Document; import javax.swing.text.JTextComponent; /** * Text component (e.g. {@link javax.swing.JTextArea}or * {@link javax.swing.JTextPane}) editing helper class. * * @author Ahmed Moustafa (ahmed@users.sf.net) */ public class TextComponentUtil { /** * Empty string */ private static final String EMPTY = ""; /** * Logger */ private static final Logger logger = Logger .getLogger(TextComponentUtil.class.getName()); /** * Copies the selected text to the system clipboad and then deletes it from * the text component. * * @param textComponent */ public static void cut(JTextComponent textComponent) { copy(textComponent); delete(textComponent); } /** * Copies the selected text to the system clipboard. * * @param textComponent */ public static void copy(JTextComponent textComponent) { ClipboardHandlerFactory.getClipboardHandler().setContents( textComponent.getSelectedText()); } /** * Copies the text contents of the system clipboard to the text component. * * @param textComponent */ public static void paste(JTextComponent textComponent) { String contents = ClipboardHandlerFactory.getClipboardHandler() .getContents(); if (contents != null) { StringBuffer buffer = new StringBuffer(); char c; for (int i = 0, n = contents.length(); i < n; i++) { c = contents.charAt(i); // Not to copy a null character if (c != 0) { buffer.append(c); } } textComponent.replaceSelection(buffer.toString()); } if (!textComponent.hasFocus()) { textComponent.requestFocus(); } } /** * Deletes the selected text in a text component. * * @param textComponent */ public static void delete(JTextComponent textComponent) { textComponent.replaceSelection(EMPTY); } /** * Selects all contents of a text component. * * @param textComponent */ public static void selectAll(JTextComponent textComponent) { if (!textComponent.hasFocus()) { textComponent.requestFocus(); } textComponent.selectAll(); } /** * Opens a file and puts the contents of the file in a text component. * * @param textComponent * @throws TextComponentUtilException */ public static boolean open(JTextComponent textComponent) throws TextComponentUtilException { InputStream is = null; BufferedReader reader = null; try { NamedInputStream selectedInputStream = FileChooserFactory .getFileChooser().open(); if (selectedInputStream != null) { is = selectedInputStream.getInputStream(); textComponent.setText(EMPTY); reader = new BufferedReader(new InputStreamReader(is)); String line; Document document = textComponent.getDocument(); while ((line = reader.readLine()) != null) { document.insertString(document.getLength(), line + Commons.getLineSeparator(), null); } if (!textComponent.hasFocus()) { textComponent.requestFocus(); } return true; } else { return false; } } catch (Exception e) { throw new TextComponentUtilException(e.getMessage()); } finally { if (is != null) { try { is.close(); } catch (Exception e) { logger.log(Level.WARNING, "Failed closing input stream: " + e.getMessage(), e); } } if (reader != null) { try { reader.close(); } catch (Exception e) { logger.log(Level.WARNING, "Failed closing reader: " + e.getMessage(), e); } } } } /** * Saves the contents of a text component to a file. * * @param textComponent * @param fileName * @return true if a file has been chosen or false otherwise * @throws TextComponentUtilException */ public static boolean save(JTextComponent textComponent, String fileName) throws TextComponentUtilException { InputStream is = null; try { is = new ByteArrayInputStream(textComponent.getText().getBytes()); return FileChooserFactory.getFileChooser().save(is, fileName); } catch (Exception e) { throw new TextComponentUtilException(e.getMessage()); } finally { try { is.close(); } catch (Exception e) { logger.log(Level.WARNING, "Failed closing input stream: " + e.getMessage(), e); } } } /** * Saves the contents of a text component to a file. * * @param textComponent * @return true if a file has been chosen or false otherwise * @throws TextComponentUtilException */ public static boolean save(JTextComponent textComponent) throws TextComponentUtilException { return save(textComponent, null); } /** * Prints the contents of a text component. * * @param textComponent */ public static void print(JTextComponent textComponent) throws TextComponentUtilException { InputStream is = null; try { PrintService[] printServices = PrintServiceLookup .lookupPrintServices(DocFlavor.INPUT_STREAM.AUTOSENSE, null); if (printServices.length > 0) { PrintRequestAttributeSet printRequestAttributeSet = new HashPrintRequestAttributeSet(); printRequestAttributeSet.add(new JobName("JAligner", null)); PrintService service = ServiceUI.printDialog(null, 50, 50, printServices, PrintServiceLookup .lookupDefaultPrintService(), DocFlavor.INPUT_STREAM.AUTOSENSE, printRequestAttributeSet); if (service != null) { DocPrintJob printJob = service.createPrintJob(); PrintJobMointor printJobMointor = new PrintJobMointor( printJob); is = new ByteArrayInputStream(textComponent.getText() .getBytes()); DocumentName documentName = new DocumentName("JAligner", null); HashDocAttributeSet docAttributeSet = new HashDocAttributeSet(); docAttributeSet.add(documentName); Doc doc = new SimpleDoc(is, DocFlavor.INPUT_STREAM.AUTOSENSE, docAttributeSet); printJob.print(doc, printRequestAttributeSet); printJobMointor.waitForPrintJob(); } } else { throw new TextComponentUtilException("No print service found!"); } } catch (Exception e) { throw new TextComponentUtilException(e.getMessage()); } finally { if (is != null) { try { is.close(); } catch (IOException e) { logger.log(Level.WARNING, "Failed closing input stream: " + e.getMessage(), e); } } } } }