package eu.telecom.sudparis.dpwsim.view.tools; import java.awt.Component; import java.awt.Container; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Image; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JOptionPane; import eu.telecom.sudparis.dpwsim.DPWSim; /** * Swing Utilities * * @author Son Han * @date 2013/09/20 * @version 2.0 */ public class SwingUtilities { public static String DEFAULT_IMAGE_TEXT = "Default image"; /** * Create an icon from an existing image file either in class path or from local file system. * * @param path ((1) /res/icon.png, (2) local: E:\path\to\file, (3) invalid) * @return (1) if path exists in class, return ImageIcon * (2) else return new ImageIcon(path) - always return a (not null) pointer * (3) if in both cases, no image icon is created, return a null pointer * */ public static ImageIcon createImageIcon(String path) { java.net.URL imgURL = SwingUtilities.class.getResource(path); ImageIcon icon; if (imgURL != null) { icon = new ImageIcon(imgURL); } else { icon = new ImageIcon(path); } if (icon.getIconHeight() > 0) return icon; // if an image icon created else return null; } public static ImageIcon createImageIcon(String path, int h) { ImageIcon icon = createImageIcon(path); if (icon != null) icon.setImage(resizeToHeight(icon.getImage(), h)); return icon; } public static void loadImage(JLabel holder, String path, int h){ ImageIcon icon = createImageIcon(path, h); if (icon.getIconHeight() < 0) icon = createDefaultDeviceIcon(h); holder.setIcon(icon); } public static ImageIcon createDefaultDeviceIcon() { return createImageIcon("/res/device_default.png", 24); } public static ImageIcon createDefaultDeviceIcon(int h) { return createImageIcon("/res/device_default.png", h); } public static ImageIcon createAppIcon(){ return createImageIcon("/res/favicon.png"); } public static ImageIcon createDefaultLayout(){ return createImageIcon("/res/default_layout.png"); } public static ImageIcon defaultOperationStatus(){ return createImageIcon("/res/devices/default_dev_status.jpg"); } public static void showCreditMessage(Component frame){ JOptionPane.showMessageDialog(frame, "DPWSim version " + DPWSim.VERSION + "\n" + "Simulation Toolkit for DPWS \n" + "Institute Mines-Telecom, Telecom SudParis \n\n" + "Nguyen Van Luong, luongnv89@gmail.com \n" + "Son Han, vnhanson@gmail.com \n", "About" , JOptionPane.INFORMATION_MESSAGE, createAppIcon()); } public static void showHelp(Component frame) { JOptionPane.showMessageDialog(frame, "Simulation Toolkit for DPWS", "Help" , JOptionPane.INFORMATION_MESSAGE, createAppIcon()); } public static boolean validateIPAddress(String ip){ if (ip == null || ip.isEmpty()) return false; ip = ip.trim(); if ((ip.length() < 6) & (ip.length() > 15)) return false; try { Pattern pattern = Pattern.compile("^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$"); Matcher matcher = pattern.matcher(ip); return matcher.matches(); } catch (PatternSyntaxException ex) { return false; } } public static void addGridBagComponent(Container container, GridBagLayout gridbag, GridBagConstraints c, Component com, int gridx, int gridy, int gridwidth, int gridheight){ c.gridx = gridx; c.gridy = gridy; c.gridwidth = gridwidth; c.gridheight = gridheight; gridbag.setConstraints(com, c); container.add(com); } public static Image resizeToWidth(Image image, int w){ int h = image.getHeight(null) * w / image.getWidth(null); Image newimg = image.getScaledInstance(w, h, java.awt.Image.SCALE_SMOOTH); // scale it the smooth way return newimg; } public static Image resizeToHeight(Image image, int h){ int w = image.getWidth(null) * h / image.getHeight(null); Image newimg = image.getScaledInstance(w, h, Image.SCALE_SMOOTH); // scale it the smooth way return newimg; } public static void showErrorMessage(Component parent, Object errMsg){ JOptionPane.showMessageDialog(parent, errMsg, "Error", JOptionPane.ERROR_MESSAGE); } public static void showInformationMessage(Component parent, String errMsg){ JOptionPane.showMessageDialog(parent, errMsg, "Info", JOptionPane.INFORMATION_MESSAGE); } public static boolean isInteger(String s) { try { Integer.parseInt(s); } catch(NumberFormatException e) { return false; } // only got here if we didn't return false return true; } }