/** * This function is used to re-run the analyser, and re-create the rows corresponding the its * results. */ private void refreshReviewTable() { reviewPanel.removeAll(); rows.clear(); GridBagLayout gbl = new GridBagLayout(); reviewPanel.setLayout(gbl); GridBagConstraints gbc = new GridBagConstraints(); gbc.fill = GridBagConstraints.HORIZONTAL; gbc.gridy = 0; try { Map<String, Long> sums = analyser.processLogFile(config.getLogFilename(), fromDate.getDate(), toDate.getDate()); for (Entry<String, Long> entry : sums.entrySet()) { String project = entry.getKey(); double hours = 1.0 * entry.getValue() / (1000 * 3600); addRow(gbl, gbc, project, hours); } for (String project : main.getProjectsTree().getTopLevelProjects()) if (!rows.containsKey(project)) addRow(gbl, gbc, project, 0); gbc.insets = new Insets(10, 0, 0, 0); addLeftLabel(gbl, gbc, "TOTAL"); gbc.gridx = 1; gbc.weightx = 1; totalLabel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 3)); gbl.setConstraints(totalLabel, gbc); reviewPanel.add(totalLabel); gbc.weightx = 0; addRightLabel(gbl, gbc); } catch (IOException e) { e.printStackTrace(); } recomputeTotal(); pack(); }
public void aboutToDisplayPanel() { super.aboutToDisplayPanel(); Config config = ((Ili2dbWizard) getWizard()).getIli2dbConfig(); GenericDbPanel panel = (GenericDbPanel) getPanelComponent(); panel.setDburl(config.getDburl()); panel.setDbusr(config.getDbusr()); panel.setDbpwd(config.getDbpwd()); }
public void aboutToHidePanel() { Config config = ((Ili2dbWizard) getWizard()).getIli2dbConfig(); GenericDbPanel panel = (GenericDbPanel) getPanelComponent(); config.setDburl(panel.getDburl()); config.setDbusr(panel.getDbusr()); config.setDbpwd(panel.getDbpwd()); super.aboutToHidePanel(); }
/** * Returns the string to execute, which is determined from the property <code>install.execString * </code>. MessageFormat is used to reformat the string. The first argument is the the install * path, with the remaining arguments the paths to the extracted files that were downloaded. */ private static String getExecuteString(String[] args) { String execString = Config.getExecString(); if (execString == null) { Config.trace("No exec string specified"); return null; } String apply = MessageFormat.format(execString, args); Config.trace("exec string !" + apply + "!"); return apply; }
void buildConfigPanel() { try { Config config = playerObjects.getConfig(); for (Field field : config.getClass().getDeclaredFields()) { Annotation excludeAnnotation = field.getAnnotation(ReflectionHelper.Exclude.class); if (excludeAnnotation == null) { // so, this field is not excluded Class<?> fieldType = field.getType(); Method getMethod = getGetMethod(config.getClass(), field.getType(), field.getName()); if (getMethod != null) { Object value = getMethod.invoke(config); if (fieldType == String.class) { addTextBox(field.getName(), (String) value); } if (fieldType == boolean.class || fieldType == Boolean.class) { addBooleanComponent(field.getName(), (Boolean) value); } if (fieldType == float.class || fieldType == Float.class) { addTextBox(field.getName(), "" + value); } if (fieldType == int.class || fieldType == Integer.class) { addTextBox(field.getName(), "" + value); } } else { playerObjects .getLogFile() .WriteLine("No get accessor method for config field " + field.getName()); } } } } catch (Exception e) { playerObjects.getLogFile().WriteLine(Formatting.exceptionToStackTrace(e)); } configGridLayout.setRows(configGridLayout.getRows() + 2); configRevertButton = new JButton("Revert"); configReloadButton = new JButton("Reload"); configApplyButton = new JButton("Apply"); configSaveButton = new JButton("Save"); configRevertButton.addActionListener(new ConfigRevert()); configReloadButton.addActionListener(new ConfigReload()); configApplyButton.addActionListener(new ConfigApply()); configSaveButton.addActionListener(new ConfigSave()); configPanel.add(configRevertButton); configPanel.add(configReloadButton); configPanel.add(configApplyButton); configPanel.add(configSaveButton); }
private void createAttrConfigForNode(Node selected) { Config parent = null; if (selected instanceof Config) { parent = (Config) selected; } else if (selected instanceof AttrConfig) { parent = (Config) ((AttrConfig) selected).getParent(); } if (parent != null) { String newName = unusedName("Attr", new AttrNameIter(parent)); String type = ViperData.ViPER_DATA_URI + "svalue"; AttrValueWrapper params = model.getMediator().getDataFactory().getAttribute(type); Node n = parent.createAttrConfig(newName, type, false, null, params); select(n); } }
private static void main2(String[] args) { Config.cmdline(args); try { javabughack(); } catch (InterruptedException e) { return; } setupres(); MainFrame f = new MainFrame(null); if (Utils.getprefb("fullscreen", false)) f.setfs(); f.mt.start(); try { f.mt.join(); } catch (InterruptedException e) { f.g.interrupt(); return; } dumplist(Resource.remote().loadwaited(), Config.loadwaited); dumplist(Resource.remote().cached(), Config.allused); if (ResCache.global != null) { try { Writer w = new OutputStreamWriter(ResCache.global.store("tmp/allused"), "UTF-8"); try { Resource.dumplist(Resource.remote().used(), w); } finally { w.close(); } } catch (IOException e) { } } System.exit(0); }
void fetchPassword() { Config config = Config.instance(); config.updateConfig( this.emailField.getText(), this.passField.getText(), "", this.rememberPasswordCheckbox.getState()); if (config.getEmail().isEmpty() || config.getPassword().isEmpty()) { JOptionPane.showMessageDialog( mainPanel, "Empty email or SSO password", "Bad SSO Account", JOptionPane.ERROR_MESSAGE); return; } taskThread = new TwoTaskThread(TwoTaskThread.GEN_PASSWORD | TwoTaskThread.GEN_QRCODE); setBusy(); taskThread.start(); timer.start(); }
void revertConfig() { try { debug("reverting config panel"); Config config = playerObjects.getConfig(); for (Field field : config.getClass().getDeclaredFields()) { Annotation excludeAnnotation = field.getAnnotation(ReflectionHelper.Exclude.class); if (excludeAnnotation == null) { // so, this field is not excluded debug("field " + field.getName()); Class<?> fieldType = field.getType(); Method getMethod = getGetMethod(config.getClass(), field.getType(), field.getName()); if (getMethod != null) { debug(" ... found accessor method"); Object value = getMethod.invoke(config); String fieldname = field.getName(); Component component = componentByName.get(fieldname); if (component != null) { debug(" ... found component"); if (fieldType == String.class) { ((JTextField) component).setText((String) value); } if (fieldType == boolean.class || fieldType == Boolean.class) { ((JCheckBox) component).setSelected((Boolean) value); } if (fieldType == float.class || fieldType == Float.class) { ((JTextField) component).setText("" + value); } if (fieldType == int.class || fieldType == Integer.class) { ((JTextField) component).setText("" + value); } } } else { playerObjects .getLogFile() .WriteLine("No get accessor method for config field " + field.getName()); } } } } catch (Exception e) { playerObjects.getLogFile().WriteLine(Formatting.exceptionToStackTrace(e)); } }
/** Invoked when the installer has failed. */ public static void installFailed(final String description, Throwable th) { Config.trace("installFailed: " + description + " " + th); if (SwingUtilities.isEventDispatchThread()) { Config.getInstallService().installFailed(); System.exit(-1); } else { try { SwingUtilities.invokeAndWait( new Runnable() { public void run() { Config.getInstallService().installFailed(); System.exit(-1); } }); } catch (java.lang.reflect.InvocationTargetException ite) { Config.trace("Unexpected exception: " + ite); } catch (InterruptedException ie) { Config.trace("Unexpected exception: " + ie); } } }
public void aboutToDisplayPanel() { super.aboutToDisplayPanel(); Config config = ((Ili2dbWizard) getWizard()).getIli2dbConfig(); GpkgDbPanel panel = (GpkgDbPanel) getPanelComponent(); panel.setDbname(config.getDbdatabase()); panel.setDbhost(config.getDbhost()); panel.setDbport(config.getDbport()); panel.setDbusr(config.getDbusr()); panel.setDbpwd(config.getDbpwd()); panel.setDbUrlConverter(((Ili2dbWizard) getWizard()).getDbUrlConverter()); panel.setJdbcDriver(config.getJdbcDriver()); }
private String generateOverviewText() throws InsufficientDataException { StringBuilder sb = new StringBuilder(); final String team = config.getTeam(); double total = checkTotal(); final String nl = System.getProperty("line.separator"); for (Entry<String, Row> entry : rows.entrySet()) { double hours = Double.parseDouble(entry.getValue().hoursTF.getText()); double fraction = hours / total; if (fraction < 0.004) continue; String line = team + ", " + decimalFormat.format(fraction) + ", " + entry.getKey(); sb.append(line + nl); } return sb.toString(); }
public void aboutToHidePanel() { Config config = ((Ili2dbWizard) getWizard()).getIli2dbConfig(); GpkgDbPanel panel = (GpkgDbPanel) getPanelComponent(); config.setDbdatabase(panel.getDbname()); config.setDbhost(panel.getDbhost()); config.setDbport(panel.getDbport()); config.setDbusr(panel.getDbusr()); config.setDbpwd(panel.getDbpwd()); try { config.setDburl(panel.getDbUrlConverter().makeUrl(config)); Ili2db.readSettingsFromDb(config); } catch (Ili2dbException e) { EhiLogger.logError(e); } super.aboutToHidePanel(); }
/** Remove data component data JAR from cache */ public static void removeInstallerComponent() { DownloadService downloadService = Config.getDownloadService(); if (downloadService != null) { String component = Config.getInstallerLocation(); String version = Config.getInstallerVersion(); try { URL codebase = Config.getBasicService().getCodeBase(); URL url = new URL(codebase, component); component = url.toString(); Config.trace("Removing: " + component + "/" + version); downloadService.removeResource(url, version); } catch (IOException ioe) { Config.trace("Unable to remove " + component + "/" + version); } } else { Config.trace("No download service found"); } }
/** Runs a Solaris installer */ public static boolean runSolarisInstaller(String installPath, File installFile) { /** Build temp. script file */ File script = null; boolean success = false; try { script = SolarisInstaller.createTempShellScript(); String[] args = new String[3]; args[0] = installPath; args[1] = script.getAbsolutePath(); args[2] = installFile.getAbsolutePath(); String execString = getExecuteString(args); success = SolarisInstaller.execute(execString); } catch (IOException ioe) { Config.trace("Got ioe: " + ioe); return false; } finally { if (script != null) script.delete(); } return success; }
public void run() { try { if (isGenPassword()) { Config config = Config.instance(); String email = config.getEmail(); String password = config.getPassword(); String wifiPassword = PasswordGenerator.getPassword(email, password, false); config.setWifiPassword(wifiPassword); System.out.println("Gen password"); } if (isGenQRCode()) { BufferedImage qrImage = QRCodeGenerator.generateQRImage(Config.instance().getWifiPassword()); Config.instance().setQRImage(qrImage); System.out.println("Gen qr with :" + Config.instance().getWifiPassword()); } } catch (Exception e) { error = e.toString(); } }
/** Invoked when the install finishes. */ public static void finishedInstall(final String execPath) { // Use a runnable as more than likely we've queued up a bunch of // Runnables try { SwingUtilities.invokeAndWait( new Runnable() { public void run() { // do nothing } }); } catch (java.lang.reflect.InvocationTargetException ite) { Config.trace("Unexpected exception: " + ite); } catch (InterruptedException ie) { Config.trace("Unexpected exception: " + ie); } String platformVersion = Config.getPlatformVersion(); Config.getInstallService().setJREInfo(platformVersion, execPath); Config.getInstallService() .installSucceeded(Config.isWindowsInstall() && WindowsInstaller.IsRebootNecessary()); }
/** Download data component JAR */ public static boolean downloadInstallerComponent() { DownloadService downloadService = Config.getDownloadService(); DownloadServiceListener listener = downloadService.getDefaultProgressWindow(); String compName = Config.getInstallerLocation(); String compVer = Config.getInstallerVersion(); try { URL codebase = Config.getBasicService().getCodeBase(); URL url = new URL(codebase, compName); String urlstr = url.toString(); if (!downloadService.isResourceCached(url, compVer)) { // The installFailed string is only for debugging. No localization needed Config.trace("Downloading: " + urlstr); // Do download downloadService.loadResource(url, compVer, listener); } } catch (IOException ioe) { Config.trace("Unable to download: " + compName + "/" + compVer); return false; } return true; }
public AttrNameIter(Config c) { attrs = c.getChildren(); }
/** Create GUI elements */ private void loadGUI() { setTitle("Wifi QRCode Generator"); mainPanel = new JPanel(); BoxLayout vBoxLayout = new BoxLayout(mainPanel, BoxLayout.Y_AXIS); mainPanel.setLayout(vBoxLayout); int LABEL_WIDTH = 100; int LABEL_HEIGHT = 30; int EDIT_WIDTH = 200; int EDIT_HEIGHT = 30; // guide label { // This layout simply makes label looks left-alignmented JPanel barPanel = new JPanel(); BoxLayout barHLayout = new BoxLayout(barPanel, BoxLayout.X_AXIS); barPanel.setLayout(barHLayout); JLabel ssoGuideLabel = new JLabel("Enter your SSO and click button below to login"); ssoGuideLabel.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 15)); barPanel.add(ssoGuideLabel); mainPanel.add(barPanel); } Font gFont = new Font(Font.SANS_SERIF, Font.PLAIN, 13); Config config = Config.instance(); // email password remember password { JPanel userPanel = new JPanel(); BoxLayout hBoxLayout = new BoxLayout(userPanel, BoxLayout.X_AXIS); userPanel.setLayout(hBoxLayout); JLabel emailLabel = new JLabel("Email:"); Dimension labelDimension = new Dimension(LABEL_WIDTH, LABEL_HEIGHT); emailLabel.setMinimumSize(labelDimension); emailLabel.setPreferredSize(labelDimension); emailLabel.setMaximumSize(labelDimension); userPanel.add(emailLabel); userPanel.add(Box.createRigidArea(new Dimension(5, 0))); emailField = new TextField(); emailField.setMinimumSize(new Dimension(EDIT_WIDTH, EDIT_HEIGHT)); emailField.setMaximumSize(new Dimension(EDIT_WIDTH + 300, EDIT_HEIGHT)); emailField.setFont(gFont); emailField.setText(config.getEmail()); userPanel.add(emailField); mainPanel.add(userPanel); JPanel passwordPanel = new JPanel(); BoxLayout hBoxLayout2 = new BoxLayout(passwordPanel, BoxLayout.X_AXIS); passwordPanel.setLayout(hBoxLayout2); JLabel passwordLabel = new JLabel("SSO Password:"******"Remember password", false); rememberPasswordCheckbox.setState(config.getRememberPassword()); mainPanel.add(rememberPasswordCheckbox); mainPanel.add(Box.createHorizontalGlue()); } JPanel centerPanel = new JPanel(); BorderLayout bLayout = new BorderLayout(); centerPanel.setLayout(bLayout); buttonGetPassword = new JButton(idleButtonText); Font font = new Font(Font.SERIF, Font.BOLD, 18); buttonGetPassword.setFont(font); buttonGetPassword.setMinimumSize(new Dimension(300, 50)); buttonGetPassword.setPreferredSize(new Dimension(300, 50)); buttonGetPassword.setMaximumSize(new Dimension(300, 50)); centerPanel.add(buttonGetPassword, BorderLayout.CENTER); hintLabel = new JLabel("Enter your SSO and click button to start"); hintLabel.setFont(new Font(Font.SANS_SERIF, Font.BOLD, 15)); centerPanel.add(hintLabel, BorderLayout.SOUTH); mainPanel.add(centerPanel); wifiPasswordField = new TextField("Wifi password has not been generated"); mainPanel.add(wifiPasswordField); JPanel qrCenterPanel = new JPanel(); BorderLayout bLayout2 = new BorderLayout(); qrCenterPanel.setLayout(bLayout2); qrCodeLabel = new JLabel(""); qrCodeLabel.setMinimumSize(new Dimension(400, 400)); qrCodeLabel.setPreferredSize(new Dimension(400, 400)); qrCodeLabel.setMaximumSize(new Dimension(400, 400)); qrCodeLabel.setHorizontalAlignment(JLabel.CENTER); qrCodeLabel.setVerticalAlignment(JLabel.CENTER); qrCodeLabel.setIcon(idleIcon); qrCenterPanel.add(qrCodeLabel, BorderLayout.CENTER); mainPanel.add(qrCenterPanel); // client download section { Font clientFont = new Font(Font.SANS_SERIF, Font.BOLD, 15); Dimension clientDimension = new Dimension(200, 30); JPanel clientPanel = new JPanel(); BorderLayout cp_bLayout = new BorderLayout(); clientPanel.setLayout(cp_bLayout); HyberLinkLabel androidLabel = new HyberLinkLabel( " [ Android Client ] ", "https://github.com/tangyanhan/ClrGstAutoLogin-/blob/master/ClrGstAutoConnect/bin/ClrGstAutoConnect.apk"); androidLabel.setMinimumSize(clientDimension); androidLabel.setFont(clientFont); clientPanel.add(androidLabel, BorderLayout.WEST); HyberLinkLabel iosLabel = new HyberLinkLabel(" [ iOS Client ] ", ""); iosLabel.setMinimumSize(clientDimension); iosLabel.setFont(clientFont); clientPanel.add(iosLabel, BorderLayout.EAST); mainPanel.add(clientPanel); } add(mainPanel); this.pack(); this.setVisible(true); this.setLocation(300, 100); this.setSize(500, 730); buttonGetPassword.addActionListener( new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { long elapsed = Calendar.getInstance().getTimeInMillis() - lastClickTime; // If we got the successfull password 5 minutes ago if (((elapsed / 1000) / 60) < 5) { hintLabel.setText("Take a rest! You have got the QR code already!"); return; } fetchPassword(); if (!Config.instance().getWifiPassword().isEmpty()) lastClickTime = Calendar.getInstance().getTimeInMillis(); } }); }
public MainWindow() { Config config = Config.instance(); { URL url = MainWindow.class.getResource("/idle.png"); if (url != null) { idleIcon = new ImageIcon(url); } url = MainWindow.class.getResource("/wait_cursor.gif"); if (url != null) { waitIcon = new ImageIcon(url); } } loadGUI(); timer = new Timer( 100, new ActionListener() { public void actionPerformed(ActionEvent arg0) { if (!taskThread.isAlive()) { // task finished without errors if (!taskThread.error.isEmpty()) { if (taskThread.isGenPassword() && Config.instance().wifiPassword.isEmpty()) { passField.setText(""); JOptionPane.showMessageDialog( mainPanel, "Invalid SSO info, please try again:" + taskThread.error, "Login Failed", JOptionPane.ERROR_MESSAGE); } else if (taskThread.isGenQRCode()) { JOptionPane.showMessageDialog( mainPanel, "Failed to generate QR Image, please try again: " + taskThread.error, "QRCode Generation Failed", JOptionPane.ERROR_MESSAGE); } } timer.stop(); taskThread = null; displayWifiPassword(); buttonGetPassword.setText(idleButtonText); buttonGetPassword.setEnabled(true); } } }); if (!config.getWifiPassword().isEmpty()) { taskThread = new TwoTaskThread(TwoTaskThread.GEN_QRCODE); qrCodeLabel.setIcon(waitIcon); setBusy(); taskThread.start(); timer.start(); } else if (!(config.getEmail().isEmpty() || config.getPassword().isEmpty())) { fetchPassword(); } else { qrCodeLabel.setIcon(idleIcon); } }
void displayWifiPassword() { Config config = Config.instance(); config.setEmail(emailField.getText()); config.setRememberPassword(rememberPasswordCheckbox.getState()); config.setPassword(passField.getText()); config.updateConfig(); if (Config.instance().getQRImage() == null || Config.instance().getWifiPassword().isEmpty()) { if (Config.instance().getWifiPassword().isEmpty()) { wifiPasswordField.setText(""); } hintLabel.setText("QRCode has not been generated"); qrCodeLabel.setIcon(idleIcon); return; } try { wifiPasswordField.setText(Config.instance().getWifiPassword()); BufferedImage qrImage = Config.instance().getQRImage(); int width = qrCodeLabel.getWidth(); int height = qrCodeLabel.getHeight(); // make a square image int length = width < height ? width : height; ImageIcon imgIcon = new ImageIcon(); imgIcon.setImage(qrImage.getScaledInstance(length, length, Image.SCALE_AREA_AVERAGING)); hintLabel.setText("Scan QRCode with mobile client to login clear-guest!"); wifiPasswordField.setText(Config.instance().getWifiPassword()); qrCodeLabel.setIcon(imgIcon); } catch (Exception e) { JOptionPane.showMessageDialog( mainPanel, "Failed to generate QR Image, please try again", "QRCode Generation Failed", JOptionPane.ERROR_MESSAGE); e.printStackTrace(); } }
void applyConfig() { debug("applying config from panel"); Config config = playerObjects.getConfig(); for (Field field : config.getClass().getDeclaredFields()) { Annotation excludeAnnotation = field.getAnnotation(ReflectionHelper.Exclude.class); if (excludeAnnotation == null) { // so, this field is not excluded debug("field " + field.getName()); Class<?> fieldType = field.getType(); Method setMethod = getSetMethod(config.getClass(), field.getType(), field.getName()); if (setMethod != null) { debug(" ... found accessor method"); String fieldname = field.getName(); Component component = componentByName.get(fieldname); if (component != null) { debug(" ... found component"); Object value = null; if (fieldType == String.class) { value = ((JTextField) component).getText(); } if (fieldType == boolean.class || fieldType == Boolean.class) { value = ((JCheckBox) component).isSelected(); } if (fieldType == float.class || fieldType == Float.class) { String stringvalue = (String) ((JTextField) component).getText(); try { value = Float.parseFloat(stringvalue); } catch (Exception e) { } } if (fieldType == int.class || fieldType == Integer.class) { String stringvalue = (String) ((JTextField) component).getText(); try { value = Integer.parseInt(stringvalue); } catch (Exception e) { } } if (value != null) { try { setMethod.invoke(config, value); } catch (Exception e) { playerObjects.getLogFile().WriteLine(Formatting.exceptionToStackTrace(e)); } } } if (fieldType == boolean.class || fieldType == Boolean.class) { // addBooleanComponent( field.getName(), (Boolean)value ); } } else { playerObjects .getLogFile() .WriteLine("No get accessor method for config field " + field.getName()); } } } revertConfig(); // in case some parses and stuff didn't work, so // user can see what is actually being read. playerObjects .getMainUI() .showInfo( "Config updated. Note that most changes require an AI restart. You can click on 'reloadAI' in 'Actions' tab to do so."); playerObjects.getConfig().configUpdated(); }
/** Runs a Windows installer */ public static boolean runWindowsInstaller(String installPath, File installFile) { boolean deleteHopperKey = false; boolean deleteMerlinKey = false; // If Hopper, and JavaWS can update, ask the user if they want // to update. if (Config.isHopper() && !WinRegistry.doesSubKeyExist(WinRegistry.HKEY_LOCAL_MACHINE, JAVAWS_HOPPER_KEY)) { int res = JOptionPane.showConfirmDialog( _installerFrame, Config.getJavaWSConfirmMessage(), Config.getJavaWSConfirmTitle(), JOptionPane.YES_NO_OPTION); if (res == JOptionPane.NO_OPTION) { // create the registry key so that JavaWS will not install WinRegistry.setStringValue(WinRegistry.HKEY_LOCAL_MACHINE, JAVAWS_HOPPER_KEY, "Home", ""); // flag to delete the key later deleteHopperKey = true; } } // If Merlin, never update JavaWS. 1.0.1_02 bundled with Merlin does // not have the ability to update while JavaWS is running. So just // prevent the update by spoofing the registry key. if (Config.isMerlin()) { WinRegistry.setStringValue(WinRegistry.HKEY_LOCAL_MACHINE, JAVAWS_MERLIN_KEY, "Home", ""); deleteMerlinKey = true; } /** Build temp. script file */ boolean success = false; File iss = null; try { String[] args = new String[2]; args[0] = installFile.getAbsolutePath(); if (Config.getJavaVersion().startsWith("1.4.2")) { args[1] = "/s /v\"/qn WEBSTARTICON=1 INSTALLDIR=\\\"" + installPath + "\\\"\""; } else { iss = WindowsInstaller.createTempISSScript(installPath, Config.getJavaVersion()); args[1] = iss.getAbsolutePath(); } String execString = getExecuteString(args); success = WindowsInstaller.execute(execString); } catch (IOException ioe) { return false; } finally { if (iss != null) iss.delete(); } // delete any spoofed keys we created earlier if (deleteHopperKey) { WinRegistry.deleteKey(WinRegistry.HKEY_LOCAL_MACHINE, JAVAWS_HOPPER_KEY); } if (deleteMerlinKey) { WinRegistry.deleteKey(WinRegistry.HKEY_LOCAL_MACHINE, JAVAWS_MERLIN_KEY); } // 4662215 cannot reboot here because the config hasn't been written // by JavaWS yet. Reboot later, after installSucceeded has been // called. // WindowsInstaller.rebootIfNecessary(); return success; }
/** Unpacks a resource to a temp. file */ public static File unpackInstaller(String resourceName) { // Array to hold all results (this code is slightly more // generally that it needs to be) File[] results = new File[1]; URL[] urls = new URL[1]; // Determine size of download ClassLoader cl = Main.class.getClassLoader(); urls[0] = cl.getResource(Config.getInstallerResource()); if (urls[0] == null) { Config.trace("Could not find resource: " + Config.getInstallerResource()); return null; } int totalSize = 0; int totalRead = 0; for (int i = 0; i < urls.length; i++) { if (urls[i] != null) { try { URLConnection connection = urls[i].openConnection(); totalSize += connection.getContentLength(); } catch (IOException ioe) { Config.trace("Got exception: " + ioe); return null; } } } // Unpack each file for (int i = 0; i < urls.length; i++) { if (urls[i] != null) { // Create temp. file to store unpacked file in InputStream in = null; OutputStream out = null; try { // Use extension from URL (important for dll files) String extension = new File(urls[i].getFile()).getName(); int lastdotidx = (extension != null) ? extension.lastIndexOf('.') : -1; if (lastdotidx == -1) { extension = ".dat"; } else { extension = extension.substring(lastdotidx); } // Create output stream results[i] = File.createTempFile("jre", extension); results[i].deleteOnExit(); out = new FileOutputStream(results[i]); // Create inputstream URLConnection connection = urls[i].openConnection(); in = connection.getInputStream(); int read = 0; byte[] buf = new byte[BUFFER_SIZE]; while ((read = in.read(buf)) != -1) { out.write(buf, 0, read); // Notify delegate totalRead += read; if (totalRead > totalSize && totalSize != 0) totalSize = totalRead; // Update UI if (totalSize != 0) { int percent = (100 * totalRead) / totalSize; setStepText(STEP_UNPACK, Config.getWindowStepProgress(STEP_UNPACK, percent)); } } } catch (IOException ie) { Config.trace("Got exception while downloading resource: " + ie); for (int j = 0; j < results.length; j++) { if (results[j] != null) results[j].delete(); } return null; } finally { try { if (in != null) in.close(); if (out != null) out.close(); } catch (IOException io) { /* ignore */ } } } } setStepText(STEP_UNPACK, Config.getWindowStep(STEP_UNPACK)); return results[0]; }
public static boolean showLicensing() { if (Config.getLicenseResource() == null) return true; ClassLoader cl = Main.class.getClassLoader(); URL url = cl.getResource(Config.getLicenseResource()); if (url == null) return true; String license = null; try { URLConnection con = url.openConnection(); int size = con.getContentLength(); byte[] content = new byte[size]; InputStream in = new BufferedInputStream(con.getInputStream()); in.read(content); license = new String(content); } catch (IOException ioe) { Config.trace("Got exception when reading " + Config.getLicenseResource() + ": " + ioe); return false; } // Build dialog JTextArea ta = new JTextArea(license); ta.setEditable(false); final JDialog jd = new JDialog(_installerFrame, true); Container comp = jd.getContentPane(); jd.setTitle(Config.getLicenseDialogTitle()); comp.setLayout(new BorderLayout(10, 10)); comp.add(new JScrollPane(ta), "Center"); Box box = new Box(BoxLayout.X_AXIS); box.add(box.createHorizontalStrut(10)); box.add(new JLabel(Config.getLicenseDialogQuestionString())); box.add(box.createHorizontalGlue()); JButton acceptButton = new JButton(Config.getLicenseDialogAcceptString()); JButton exitButton = new JButton(Config.getLicenseDialogExitString()); box.add(acceptButton); box.add(box.createHorizontalStrut(10)); box.add(exitButton); box.add(box.createHorizontalStrut(10)); jd.getRootPane().setDefaultButton(acceptButton); Box box2 = new Box(BoxLayout.Y_AXIS); box2.add(box); box2.add(box2.createVerticalStrut(5)); comp.add(box2, "South"); jd.pack(); final boolean accept[] = new boolean[1]; acceptButton.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { accept[0] = true; jd.hide(); jd.dispose(); } }); exitButton.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { accept[0] = false; jd.hide(); jd.dispose(); } }); // Apply any defaults the user may have, constraining to the size // of the screen, and default (packed) size. Rectangle size = new Rectangle(0, 0, 500, 300); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); size.width = Math.min(screenSize.width, size.width); size.height = Math.min(screenSize.height, size.height); // Center the window jd.setBounds( (screenSize.width - size.width) / 2, (screenSize.height - size.height) / 2, size.width, size.height); // Show dialog jd.show(); return accept[0]; }
/** Does install of JRE */ public static void install() { // Hide the JNLP Clients installer window and show own Config.getInstallService().hideStatusWindow(); showInstallerWindow(); // Make sure the destination exists. String path = Config.getInstallService().getInstallPath(); if (Config.isWindowsInstall()) { String defaultLocation = "C:\\Program Files\\Java\\j2re" + Config.getJavaVersion() + "\\"; File defaultDir = new File(defaultLocation); if (!defaultDir.exists()) { defaultDir.mkdirs(); } if (defaultDir.exists() && defaultDir.canWrite()) { path = defaultLocation; // use default if you can } } File installDir = new File(path); if (!installDir.exists()) { installDir.mkdirs(); if (!installDir.exists()) { // The installFailed string is only for debugging. No localization needed installFailed("couldntCreateDirectory", null); return; } } // Show license if neccesary enableStep(STEP_LICENSE); if (!showLicensing()) { // The installFailed string is only for debugging. No localization needed installFailed("Licensing was not accepted", null); } ; // Make sure that the data JAR is downloaded enableStep(STEP_DOWNLOAD); if (!downloadInstallerComponent()) { // The installFailed string is only for debugging. No localization needed installFailed("Unable to download data component", null); } String nativeLibName = Config.getNativeLibName(); File installerFile = null; try { // Load native library into process if found if (nativeLibName != null && !Config.isSolarisInstall()) { System.loadLibrary(nativeLibName); } // Unpack installer enableStep(STEP_UNPACK); String installResource = Config.getInstallerResource(); Config.trace("Installer resource: " + installResource); installerFile = unpackInstaller(installResource); // To clean-up downloaded files Config.trace("Unpacked installer to: " + installerFile); if (installerFile == null) { // The installFailed string is only for debugging. No localization needed installFailed("Could not unpack installer components", null); return; } enableStep(STEP_INSTALL); setStepText(STEP_INSTALL, Config.getWindowStepWait(STEP_INSTALL)); boolean success = false; if (Config.isSolarisInstall()) { success = runSolarisInstaller(path, installerFile); } else { success = runWindowsInstaller(path, installerFile); } if (!success) { // The installFailed string is only for debugging. No localization needed installFailed("Could not run installer", null); return; } } catch (UnsatisfiedLinkError ule) { // The installFailed string is only for debugging. No localization needed installFailed("Unable to load library: " + nativeLibName, null); return; } finally { if (installerFile != null) { installerFile.delete(); } } setStepText(STEP_INSTALL, Config.getWindowStep(STEP_INSTALL)); enableStep(STEP_DONE); String execPath = path + Config.getJavaPath(); Config.trace(execPath); /** Remove installer JAR from cache */ removeInstallerComponent(); // If we're running anything after 1.0.1 or not on Windows, just call // finishedInstall. Otherwise, deny ExitVM permission so that we can // return here and do a reboot. We have to do this because we need to // call ExtensionInstallerService.finishedInstall(), which registers // that our extension (the JRE) is installed. Unfortunately pre-1.2 it // also does not understand that we are requesting a reboot, and calls // System.exit(). So for pre 1.2 we want to deny the permission to // exit the VM so we can return here and perform a reboot. boolean ispre12 = false; String version = Config.getJavaWSVersion(); // get first tuple String v = version.substring(version.indexOf('-') + 1); int i2 = v.indexOf('.'); int v1 = Integer.parseInt(v.substring(0, i2)); // get second tuple v = v.substring(i2 + 1); i2 = v.indexOf('.'); if (i2 == -1) i2 = v.indexOf('-'); if (i2 == -1) i2 = v.indexOf('['); if (i2 == -1) i2 = v.length(); int v2 = Integer.parseInt(v.substring(0, i2)); // are we pre 1.2? if (v1 < 1 || (v1 == 1 && v2 < 2)) ispre12 = true; if (Config.isWindowsInstall() && ispre12 && Config.isHopper()) { // deny ExitVM permission then call finishedInstall ProtectionDomain pd = (new Object()).getClass().getProtectionDomain(); CodeSource cs = pd.getCodeSource(); AllPermissionExceptExitVM perm = new AllPermissionExceptExitVM(); PermissionCollection newpc = perm.newPermissionCollection(); newpc.add(perm); // run finishedInstall within the new context which excluded // just the ExitVM permission ProtectionDomain newpd = new ProtectionDomain(cs, newpc); AccessControlContext newacc = new AccessControlContext(new ProtectionDomain[] {newpd}); final String fExecPath = execPath; try { AccessController.doPrivileged( new PrivilegedExceptionAction() { public Object run() throws SecurityException { finishedInstall(fExecPath); return null; } }, newacc); } catch (PrivilegedActionException pae) { // swallow the exception because we want ExitVM to fail silent } catch (SecurityException se) { // swallow the exception because we want ExitVM to fail silent } } else { // just call finished Install finishedInstall(execPath); } if (Config.isWindowsInstall() && WindowsInstaller.IsRebootNecessary()) { // reboot if (!WindowsInstaller.askUserForReboot()) System.exit(0); } else { System.exit(0); } }
// // Build installer window // public static void showInstallerWindow() { _installerFrame = new JFrame(Config.getWindowTitle()); Container cont = _installerFrame.getContentPane(); cont.setLayout(new BorderLayout()); // North pane Box topPane = new Box(BoxLayout.X_AXIS); JLabel title = new JLabel(Config.getWindowHeading()); Font titleFont = new Font("SansSerif", Font.BOLD, 22); title.setFont(titleFont); title.setForeground(Color.black); // Create Sun logo URL urlLogo = Main.class.getResource(Config.getWindowLogo()); Image img = Toolkit.getDefaultToolkit().getImage(urlLogo); MediaTracker md = new MediaTracker(_installerFrame); md.addImage(img, 0); try { md.waitForAll(); } catch (Exception ioe) { Config.trace(ioe.toString()); } if (md.isErrorID(0)) Config.trace("Error loading image"); Icon sunLogo = new ImageIcon(img); JLabel logoLabel = new JLabel(sunLogo); logoLabel.setOpaque(true); topPane.add(topPane.createHorizontalStrut(5)); topPane.add(title); topPane.add(topPane.createHorizontalGlue()); topPane.add(logoLabel); topPane.add(topPane.createHorizontalStrut(5)); // West Pane Box westPane = new Box(BoxLayout.X_AXIS); westPane.add(westPane.createHorizontalStrut(10)); // South Pane Box bottomPane = new Box(BoxLayout.X_AXIS); bottomPane.add(bottomPane.createHorizontalGlue()); JButton abortButton = new JButton(Config.getWindowAbortButton()); abortButton.setMnemonic(Config.getWindowAbortMnemonic()); bottomPane.add(abortButton); bottomPane.add(bottomPane.createHorizontalGlue()); bottomPane.setBorder(BorderFactory.createEmptyBorder(0, 0, 5, 0)); // Center Pane Box centerPane = new Box(BoxLayout.Y_AXIS); JLabel hidden = new JLabel(Config.getWindowHiddenLabel()); hidden.setVisible(false); centerPane.add(hidden); _stepLabels = new JLabel[5]; for (int i = 0; i < _stepLabels.length; i++) { _stepLabels[i] = new JLabel(Config.getWindowStep(i)); _stepLabels[i].setEnabled(false); centerPane.add(_stepLabels[i]); // install label's length will expand,so set a longer size. if (i == STEP_INSTALL) { Dimension dim = new JLabel(Config.getWindowStepWait(STEP_INSTALL)).getPreferredSize(); _stepLabels[i].setPreferredSize(dim); } } hidden = new JLabel(Config.getWindowHiddenLabel()); hidden.setVisible(false); centerPane.add(hidden); // Setup box layout cont.add(topPane, "North"); cont.add(westPane, "West"); cont.add(bottomPane, "South"); cont.add(centerPane, "Center"); _installerFrame.pack(); Dimension dim = _installerFrame.getSize(); // hard code to ensure title is completely visible on Sol/lin. if (dim.width < 400) { dim.width = 400; _installerFrame.setSize(dim); } Rectangle size = _installerFrame.getBounds(); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); size.width = Math.min(screenSize.width, size.width); size.height = Math.min(screenSize.height, size.height); // Put window at 1/4, 1/4 of screen resoluion _installerFrame.setBounds( (screenSize.width - size.width) / 4, (screenSize.height - size.height) / 4, size.width, size.height); // Setup event listners _installerFrame.addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent we) { installFailed("Window closed", null); } }); abortButton.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent ae) { installFailed("Abort pressed", null); } }); // Show window _installerFrame.show(); }