package org.craftyourmod.mineclipse.installer.pages; import static com.richclientgui.toolbox.samples.images.SampleToolBoxImageRegistry.getImage; import java.io.IOException; import java.net.InetSocketAddress; import java.net.Proxy; import java.net.ProxySelector; import java.net.URI; import java.util.HashMap; import java.util.Iterator; import java.util.List; import org.craftyourmod.mineclipse.installer.Installer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.program.Program; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.wb.swt.SWTResourceManager; import com.richclientgui.toolbox.progressIndicator.ImageSequencer; import com.richclientgui.toolbox.samples.images.SampleToolBoxImageRegistry; public class SystemTestPage extends Composite implements Runnable { private HashMap<String, String> config = new HashMap<>(); private ImageSequencer imageSequencer; private Label lblPeaseWait; private Installer installer; protected boolean runned = false; private Label label_1; private Text text_1; /** * Create the composite. * * @param parent * @param style */ public SystemTestPage(Composite parent, int style, Installer instance) { super(parent, style); addPaintListener(new PaintListener() { public void paintControl(PaintEvent e) { if (!runned) { installer.setNextEnabled(false); run(); runned = true; installer.setNextEnabled(true); } } }); installer = instance; setLayout(new GridLayout(3, false)); Label lblWeNeedTo = new Label(this, SWT.NONE); lblWeNeedTo.setForeground(SWTResourceManager.getColor(SWT.COLOR_WHITE)); lblWeNeedTo.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1)); lblWeNeedTo.setText("We need to check your system"); imageSequencer = new ImageSequencer(this, SWT.NONE, new Image[] { getImage(SampleToolBoxImageRegistry.IMG_INDICATOR_D_1), getImage(SampleToolBoxImageRegistry.IMG_INDICATOR_D_2), getImage(SampleToolBoxImageRegistry.IMG_INDICATOR_D_3), getImage(SampleToolBoxImageRegistry.IMG_INDICATOR_D_4), getImage(SampleToolBoxImageRegistry.IMG_INDICATOR_D_5), getImage(SampleToolBoxImageRegistry.IMG_INDICATOR_D_6), getImage(SampleToolBoxImageRegistry.IMG_INDICATOR_D_7), getImage(SampleToolBoxImageRegistry.IMG_INDICATOR_D_8), getImage(SampleToolBoxImageRegistry.IMG_INDICATOR_D_9), getImage(SampleToolBoxImageRegistry.IMG_INDICATOR_D_10), getImage(SampleToolBoxImageRegistry.IMG_INDICATOR_D_11), getImage(SampleToolBoxImageRegistry.IMG_INDICATOR_D_12), }, 75, true); new Label(this, SWT.NONE); lblPeaseWait = new Label(this, SWT.NONE); lblPeaseWait.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 2)); lblPeaseWait .setForeground(SWTResourceManager.getColor(SWT.COLOR_WHITE)); lblPeaseWait.setText("Please wait..."); label_1 = new Label(this, SWT.NONE); label_1.setVisible(false); label_1.setImage(SWTResourceManager.getImage(SystemTestPage.class, "/icons/done.gif")); new Label(this, SWT.NONE); text_1 = new Text(this, SWT.MULTI); text_1.setEditable(false); text_1.setForeground(SWTResourceManager.getColor(SWT.COLOR_WHITE)); text_1.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 3, 1)); } @Override protected void checkSubclass() { // Disable the check that prevents subclassing of SWT components } @Override public void run() { final Display display = Display.getCurrent(); new Thread() { public void run() { updateStatus(display, "Please wait...\nDetecting Proxy Settings"); detectProxy(); updateStatus(display, "Please wait...\nDetecting System"); detectSystem(); updateStatus(display, "Please wait...\nDetecting JDK"); detectJDK(); stopProgress(display); updateStatus(display, "Done"); } }.start(); } private void detectJDK() { ProcessBuilder b = new ProcessBuilder("javac.exe", "-version"); config.put("JDKInstalled", "true"); try { b.start(); } catch (IOException e1) { config.put("JDKInstalled", "false"); } try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } private void detectSystem() { config.put("OSName", System.getProperty("os.name")); config.put("OSArch", System.getProperty("os.arch")); try { Thread.sleep(1500); } catch (InterruptedException e) { e.printStackTrace(); } } private void detectProxy() { try { System.setProperty("java.net.useSystemProxies", "true"); List l = ProxySelector.getDefault().select( new URI("http://mineclipse.olympe.in")); for (Iterator iter = l.iterator(); iter.hasNext();) { Proxy proxy = (Proxy) iter.next(); InetSocketAddress addr = (InetSocketAddress) proxy.address(); if (addr == null) { config.put("Proxy", "false"); config.put("ProxyHost", ""); config.put("ProxyPort", ""); } else { config.put("ProxyHost", addr.getHostName()); config.put("ProxyPort", "" + addr.getPort()); } } } catch (Exception e) { e.printStackTrace(); } try { Thread.sleep(1500); } catch (InterruptedException e) { e.printStackTrace(); } } private void stopProgress(final Display display) { display.asyncExec(new Runnable() { public void run() { imageSequencer.stopSequence(); label_1.setVisible(true); label_1.moveBelow(imageSequencer); imageSequencer.setVisible(false); imageSequencer.dispose(); layout(); for (String key : config.keySet()) { text_1.setText(text_1.getText() + key + "=" + config.get(key) + text_1.getLineDelimiter()); } installer.config.putAll(config); } }); } private void updateStatus(final Display display, final String text) { display.asyncExec(new Runnable() { public void run() { lblPeaseWait.setText(text); } }); } }