package co.forsaken.projectindigo.gui; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.lang.management.ManagementFactory; import java.lang.management.OperatingSystemMXBean; import java.lang.reflect.Method; import javax.swing.JSlider; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import co.forsaken.projectindigo.gui.components.Button; import co.forsaken.projectindigo.gui.components.DirectorySelector; import co.forsaken.projectindigo.gui.components.Label; import co.forsaken.projectindigo.gui.components.RoundedBox; import co.forsaken.projectindigo.gui.components.TextBox; import co.forsaken.projectindigo.log.LogManager; import co.forsaken.projectindigo.utils.Settings; @SuppressWarnings("serial") public class SettingsPanel extends BasePanel { private RoundedBox _bg; private Button _continueBtn; private Button _backBtn; private Settings _settings; private Label _installDirLbl; private TextBox _installDirBox; private Button _installDirBtn; private Label _maxRamLbl; private Label _maxRamAmtLbl; private JSlider _maxRamSlider; private Label _javaParamsLbl; private TextBox _javaParamsBox; public SettingsPanel(MainPanel mainPanel) { super(mainPanel, 3); } public void initComponents() { loadSettings(); _bg = new RoundedBox(MainPanel.BORDER_COLOUR); _bg.setBounds((getWidth() - (getWidth() - 50)) / 2, (getHeight() - (getHeight() - 50)) / 2, getWidth() - 50, getHeight() - 50); _backBtn = new Button(this, "Back"); _backBtn.setBounds(_bg.getWidth() - (200 - 10), _bg.getHeight() - (25 - 10), 200, 25); _backBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { _mainPanel.switchPage(1); } }); _continueBtn = new Button(this, "Save"); _continueBtn.setBounds(_backBtn.getX() - 200 - 50, _bg.getHeight() - (25 - 10), 200, 25); _continueBtn.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { save(); _mainPanel.switchPage(1); } }); _installDirLbl = new Label(this, "Install Location: "); _installDirBox = new TextBox(this, Settings.getToken().installPath); _installDirBox.setEditable(false); _installDirBox.setText(Settings.getToken().installPath); _installDirBtn = new Button(this, "..."); _installDirBtn.addActionListener(new DirectorySelector(SettingsPanel.this)); _installDirBox.setBounds(((getWidth() - (getWidth() - 300)) / 2) - (150 / 2), (50 / 2) + 50, (getWidth() - 300), 25); _installDirBtn.setBounds(_installDirBox.getX() + _installDirBox.getWidth() + 50, _installDirBox.getY(), 100, _installDirBox.getHeight()); _installDirLbl.setBounds(_installDirBox.getX(), _installDirBox.getY() - 30, _installDirBox.getWidth(), _installDirBox.getHeight()); _maxRamAmtLbl = new Label(this, Settings.getToken().maxRam); long ram = 0; OperatingSystemMXBean operatingSystemMXBean = ManagementFactory.getOperatingSystemMXBean(); Method m; try { m = operatingSystemMXBean.getClass().getDeclaredMethod("getTotalPhysicalMemorySize"); m.setAccessible(true); Object value = m.invoke(operatingSystemMXBean); if (value != null) { ram = Long.valueOf(value.toString()) / 1024 / 1024; } else { LogManager.warn("Could not get RAM Value"); ram = 4096; } } catch (Exception e) { LogManager.error(e.getMessage()); } _maxRamSlider = new JSlider(); _maxRamSlider.setSnapToTicks(true); _maxRamSlider.setMajorTickSpacing(256); _maxRamSlider.setMinorTickSpacing(256); _maxRamSlider.setMinimum(256); String vmType = System.getProperty("sun.arch.data.model"); if (vmType != null) { if (vmType.equals("64")) { _maxRamSlider.setMaximum((int) ram); } else if (vmType.equals("32")) { if (ram < 1024) { _maxRamSlider.setMaximum((int) ram); } else { _maxRamSlider.setMaximum(1024); } } } int ramMax = (Integer.parseInt(Settings.getToken().maxRam) > _maxRamSlider.getMaximum()) ? _maxRamSlider.getMaximum() : Integer.parseInt(Settings.getToken().maxRam); _maxRamSlider.setValue(ramMax); _maxRamAmtLbl.setText(getAmount()); _maxRamSlider.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { _maxRamAmtLbl.setText(getAmount()); } }); add(_maxRamSlider, 0); _maxRamLbl = new Label(this, "Max RAM Allocation: "); _maxRamSlider.setBounds(((getWidth() - (getWidth() - 300)) / 2) - (150 / 2), _installDirBox.getY() + 50 + 30, (getWidth() - 300), 25); _maxRamAmtLbl.setBounds(_maxRamSlider.getX() + _maxRamSlider.getWidth() + 50, _maxRamSlider.getY(), 100, _maxRamSlider.getHeight()); _maxRamLbl.setBounds(_maxRamSlider.getX(), _maxRamSlider.getY() - 30, _maxRamSlider.getWidth(), _maxRamSlider.getHeight()); ; _javaParamsLbl = new Label(this, "Additional Java Parameters: "); _javaParamsBox = new TextBox(this, ""); _javaParamsBox.setText(Settings.getToken().javaParams); _javaParamsBox.setBounds(((getWidth() - (getWidth() - 150)) / 2), _maxRamSlider.getY() + 50 + 30, (getWidth() - 150), 25); _javaParamsLbl.setBounds(_javaParamsBox.getX(), _javaParamsBox.getY() - 30, _javaParamsBox.getWidth(), _javaParamsBox.getHeight()); add(_bg); } private String getAmount() { int ramMax = _maxRamSlider.getValue(); return (ramMax >= 1024) ? Math.round((ramMax / 256) / 4) + "." + (((ramMax / 256) % 4) * 25) + " GB" : ramMax + " MB"; } public void setInstallFolderText(String path) { _installDirBox.setText(path); } public Settings getSettings() { return _settings; } public void loadSettings() { _settings = new Settings(); } public void save() { Settings.getToken().installPath = _installDirBox.getText(); Settings.getToken().maxRam = _maxRamSlider.getValue() + ""; Settings.getToken().javaParams = _javaParamsBox.getText(); Settings.save(); ((ServerBasePanel) getMainPanel().getPanel(1)).updateServersDir(); } }