import org.eclipse.swt.widgets.Shell;
import org.tizen.emulator.manager.console.Action;
import org.tizen.emulator.manager.console.CommandLineParser;
+import org.tizen.emulator.manager.job.CheckAbout;
import org.tizen.emulator.manager.job.CheckGPU;
import org.tizen.emulator.manager.job.CheckSDCard;
import org.tizen.emulator.manager.job.CheckVT;
-import org.tizen.emulator.manager.job.InitAboutContents;
+import org.tizen.emulator.manager.job.CheckWebcam;
import org.tizen.emulator.manager.job.Overseer;
import org.tizen.emulator.manager.logging.EMLogger;
import org.tizen.emulator.manager.resources.FilePathResources;
}
//
Runtime.getRuntime().addShutdownHook(new Thread(new EMShutdownHook()));
+
+
//
try{
- checkConsoleMode(args);
+ checkConsoleMode(args);
- if (isConsoleMode) {
- EMLogger.getInstance().initLogger();
- /*
- try {
- FileLock lock = randomAccessFile.getChannel().tryLock();
- if (lock == null) {
+ Overseer startupPreparations = Overseer.newOverseer("StartupPreparations", //$NON-NLS-1$
+ CheckAbout.class);
+ startupPreparations.startWork();
+
+ if (isConsoleMode) {
+ EMLogger.getInstance().initLogger();
+ /*
+ try {
+ FileLock lock = randomAccessFile.getChannel().tryLock();
+ if (lock == null) {
+ EMLogger.getLogger().log(Level.WARNING, "Can not launch Emulator Manager."
+ + StringResources.NEW_LINE
+ + "Another one with the same user name is running now."
+ + StringResources.NEW_LINE);
+ System.out.println("Can not launch Emulator Manager."
+ + StringResources.NEW_LINE
+ + "Another Emulator Manager is running now.");
+ exitEmulatorManager(1);
+ }
+ } catch (IOException e) {
EMLogger.getLogger().log(Level.WARNING, "Can not launch Emulator Manager."
- + StringResources.NEW_LINE
- + "Another one with the same user name is running now."
- + StringResources.NEW_LINE);
- System.out.println("Can not launch Emulator Manager."
- + StringResources.NEW_LINE
- + "Another Emulator Manager is running now.");
+ + StringResources.NEW_LINE +e.getMessage() + StringResources.NEW_LINE);
exitEmulatorManager(1);
}
- } catch (IOException e) {
- EMLogger.getLogger().log(Level.WARNING, "Can not launch Emulator Manager."
- + StringResources.NEW_LINE +e.getMessage() + StringResources.NEW_LINE);
- exitEmulatorManager(1);
- }
- */
-
- processor = new CommandLineParser();
- processor.parseArgs(args);
+ */
- } else {
+ processor = new CommandLineParser();
+ processor.parseArgs(args);
- if (isMac()) {
- System.setProperty("apple.laf.useScreenMenuBar", "true"); //$NON-NLS-1$ //$NON-NLS-2$
- System.setProperty("com.apple.mrj.application.apple.menu.about.name", "Emulator Manager"); //$NON-NLS-1$ //$NON-NLS-2$
- Display display = Display.getDefault();
- display.syncExec(new Runnable() {
- @Override
- public void run() {
- new CocoaUtil().removeTopMenuItems();
- }
- });
- }
+ } else {
- parseArgs(args);
+ if (isMac()) {
+ System.setProperty("apple.laf.useScreenMenuBar", "true"); //$NON-NLS-1$ //$NON-NLS-2$
+ System.setProperty("com.apple.mrj.application.apple.menu.about.name", "Emulator Manager"); //$NON-NLS-1$ //$NON-NLS-2$
+ Display display = Display.getDefault();
+ display.syncExec(new Runnable() {
+ @Override
+ public void run() {
+ new CocoaUtil().removeTopMenuItems();
+ }
+ });
+ }
- EMLogger.getInstance().initLogger();
+ parseArgs(args);
- MessageDialog msg = new MessageDialog(new Shell(Display.getCurrent()));
+ EMLogger.getInstance().initLogger();
- try {
- randomAccessFile = new RandomAccessFile(new File(FilePathResources.getToolEmulatorBinPath()
- + File.separator + "." +System.getProperty("user.name"))+ ".lock", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- "rw"); //$NON-NLS-1$
- } catch (FileNotFoundException e) {
- msg.openInfoDialog(Messages.getString("EmulatorManager.StartError.2") //$NON-NLS-1$
- + StringResources.NEW_LINE + e.getMessage());
- exitEmulatorManager(1);
- }
+ MessageDialog msg = new MessageDialog(new Shell(Display.getCurrent()));
- try {
- FileLock lock = randomAccessFile.getChannel().tryLock();
- if (lock == null) {
- msg.openInfoDialog(Messages.getString("EmulatorManager.StartError.0") + StringResources.NEW_LINE + //$NON-NLS-1$
- Messages.getString("EmulatorManager.StartError.1")); //$NON-NLS-1$
- exitEmulatorManager(0);
+ try {
+ randomAccessFile = new RandomAccessFile(new File(FilePathResources.getToolEmulatorBinPath()
+ + File.separator + "." +System.getProperty("user.name"))+ ".lock", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ "rw"); //$NON-NLS-1$
+ } catch (FileNotFoundException e) {
+ msg.openInfoDialog(Messages.getString("EmulatorManager.StartError.2") //$NON-NLS-1$
+ + StringResources.NEW_LINE + e.getMessage());
+ exitEmulatorManager(1);
}
- } catch (IOException e) {
- msg.openInfoDialog(Messages.getString("EmulatorManager.StartError.2") //$NON-NLS-1$
- + StringResources.NEW_LINE + e.getMessage());
- exitEmulatorManager(1);
- }
- }
+ try {
+ FileLock lock = randomAccessFile.getChannel().tryLock();
+ if (lock == null) {
+ msg.openInfoDialog(Messages.getString("EmulatorManager.StartError.0") + StringResources.NEW_LINE + //$NON-NLS-1$
+ Messages.getString("EmulatorManager.StartError.1")); //$NON-NLS-1$
+ exitEmulatorManager(0);
+ }
+ } catch (IOException e) {
+ msg.openInfoDialog(Messages.getString("EmulatorManager.StartError.2") //$NON-NLS-1$
+ + StringResources.NEW_LINE + e.getMessage());
+ exitEmulatorManager(1);
+ }
+ Overseer checkers = Overseer.newOverseer("Checkers", //$NON-NLS-1$
+ CheckVT.class, CheckGPU.class, CheckSDCard.class, CheckWebcam.class);
+ checkers.startWork();
- if (!SettingInfoFile.setMACaddr()) {
- exitEmulatorManager(1);
- }
+ }
- Overseer startupPreparations = Overseer.newOverseer("StartupPreparations", //$NON-NLS-1$
- InitAboutContents.class);
- startupPreparations.startWork();
- Overseer checkers = Overseer.newOverseer("Checkers", //$NON-NLS-1$
- CheckVT.class, CheckGPU.class, CheckSDCard.class);
- checkers.startWork();
+ if (!SettingInfoFile.setMACaddr()) {
+ exitEmulatorManager(1);
+ }
- // FIXME: we should not join overseer thread.
- // but now we are not ready for asynchronous actions.
- startupPreparations.join();
- checkers.join();
- if (isConsoleMode) {
- EmulatorManager.startConsoleProcessor();
- } else {
- EMLogger.getLogger().log(Level.INFO, "Start Emulator Manager!!"); //$NON-NLS-1$
+ if (isConsoleMode) {
+ EmulatorManager.startConsoleProcessor();
+ } else {
+ EMLogger.getLogger().log(Level.INFO, "Start Emulator Manager!!"); //$NON-NLS-1$
- EmulatorManager.preare();
- EmulatorManager.draw();
- EmulatorManager.dispose();
- }
+ EmulatorManager.preare();
+ EmulatorManager.draw();
+ EmulatorManager.dispose();
+ }
} catch (Throwable e) {
e.printStackTrace();
import java.util.ArrayList;
import java.util.logging.Level;
+import org.tizen.emulator.manager.job.CheckAbout;
import org.tizen.emulator.manager.logging.EMLogger;
import org.tizen.emulator.manager.platform.BaseImage;
import org.tizen.emulator.manager.platform.Profile;
import org.tizen.emulator.manager.platform.ProfileList;
import org.tizen.emulator.manager.resources.FilePathResources;
import org.tizen.emulator.manager.resources.StringResources;
-import org.tizen.emulator.manager.tool.About;
import org.tizen.emulator.manager.vms.VMProperty;
import org.tizen.emulator.manager.vms.helper.HelperClass;
import org.tizen.emulator.manager.vms.helper.VMWorkerException;
public String getAboutInfo() {
return "Emulator Manager" + StringResources.NEW_LINE + //$NON-NLS-1$
- About.getInstance().getContents();
+ CheckAbout.getAboutInstance().getContents();
}
public String getDetailInfoOfVM(VMProperty prop) {
import org.tizen.emulator.manager.tool.About;
-public class InitAboutContents implements Job {
+public class CheckAbout extends Job {
+
+ public static About getAboutInstance() {
+ waitJob(CheckAbout.class);
+ return About.getInstance();
+ }
@Override
public void work() {
About.initAboutContents();
import org.tizen.emulator.manager.vms.helper.HelperClass;
import org.tizen.emulator.manager.vms.helper.ProcessResult;
-public class CheckGPU implements Job {
+public class CheckGPU extends Job {
private static final String GPU_CHECKER;
private static boolean isGPUSupported = false;
}
public static boolean isGPUSupported() {
+ waitJob(CheckGPU.class);
return isGPUSupported;
}
public static boolean isGallium() {
+ waitJob(CheckGPU.class);
return isGallium;
}
import org.tizen.emulator.manager.resources.FilePathResources;
import org.tizen.emulator.manager.resources.StringResources;
-public class CheckSDCard implements Job {
+public class CheckSDCard extends Job {
+
+ public static void isSDCardChecked() {
+ waitJob(CheckSDCard.class);
+ }
+
@Override
public void work() {
File dir = new File(FilePathResources.getSDCardPath());
import org.tizen.emulator.manager.vms.helper.HelperClass;
import org.tizen.emulator.manager.vms.helper.ProcessResult;
-public class CheckVT implements Job {
+public class CheckVT extends Job {
private static final String HAX_CHECKER;
private static final String ENABLE_HAX = "-enable-hax"; //$NON-NLS-1$
private static final String ENABLE_KVM = "-enable-kvm"; //$NON-NLS-1$
private static boolean isVTSupported = false;
private static boolean isNonUG = false; // for HAXM, non-UG CPU
+ private static CheckVT instance;
+
static {
HAX_CHECKER = EmulatorManager.isWin() ? "check-hax.exe" : "check-hax"; //$NON-NLS-1$ //$NON-NLS-2$
}
return ENABLE_KVM;
}
+
public static boolean isVTSupported() {
+ waitJob(CheckVT.class);
return isVTSupported;
}
// for HAXM
public static boolean isNonUG() {
+ waitJob(CheckVT.class);
return isNonUG;
}
@Override
public void work() {
+
if (EmulatorManager.isWin() || EmulatorManager.isMac()) {
List<String> cmd = new ArrayList<String>();
cmd.add(FilePathResources.getEmulatorCheckToolPath() + File.separator + HAX_CHECKER);
}
}
+
EMLogger.getLogger().log(Level.INFO, "Support HW virtualization: " //$NON-NLS-1$
+ Boolean.toString(isVTSupported));
EMLogger.getLogger().log(Level.INFO, "non-UG: " //$NON-NLS-1$
--- /dev/null
+/*
+ * Emulator Manager
+ *
+ * Copyright (C) 2015 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact:
+ * SeokYeon Hwang <syeon.hwang@samsung.com>
+ * JiHye Kim <jihye424.kim@samsung.com>
+ * MinKee Lee <minkee.lee@samsung.com>
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributors:
+ * - S-Core Co., Ltd
+ *
+ */
+
+
+package org.tizen.emulator.manager.job;
+
+import java.util.Arrays;
+
+import org.tizen.emulator.manager.logging.EMLogger;
+import org.tizen.emulator.manager.resources.FilePathResources;
+import org.tizen.emulator.manager.vms.helper.HelperClass;
+import org.tizen.emulator.manager.vms.helper.ProcessResult;
+
+public class CheckWebcam extends Job {
+
+ private static boolean isWebcamSupport = false;
+
+ public static boolean isWebcamSupport() {
+ waitJob(CheckWebcam.class);
+ return isWebcamSupport;
+ }
+
+ @Override
+ public void work() {
+ ProcessResult res = HelperClass.runProcess(Arrays
+ .asList(FilePathResources.getCheckCamPath()));
+ int result = res.getExitValue();
+ if (result == 1) {
+ isWebcamSupport = true;
+ }
+
+ EMLogger.getLogger().info("Support webcam : " + isWebcamSupport);
+ }
+
+}
package org.tizen.emulator.manager.job;
-interface Job {
- public void work();
+import java.util.HashMap;
+import java.util.Map;
+
+import org.tizen.emulator.manager.logging.EMLogger;
+
+abstract class Job {
+
+ private static Map<Class<? extends Job>, Job> instanceMap
+ = new HashMap<Class<? extends Job>, Job>();
+
+ private Thread thread;
+
+ public void setThread(Thread thread) {
+ this.thread = thread;
+ }
+
+ public Thread getThread() {
+ return thread;
+ }
+
+ public static Job createInstance(Class<? extends Job> jobCls) {
+ Job instance = null;
+ try {
+ instance = jobCls.newInstance();
+ instanceMap.put(jobCls, instance);
+
+ } catch (InstantiationException | IllegalAccessException e) {
+ EMLogger.getLogger().warning(e.getMessage());
+ }
+ return instance;
+ }
+
+ public static Job getInstance(Class<? extends Job> jobCls) {
+ Job job = instanceMap.get(jobCls);
+
+ if (job == null) {
+ // for console mode
+ job = createInstance(jobCls);
+ }
+ return job;
+ }
+
+
+ public static void waitJob(Class<? extends Job> jobCls) {
+ Job job = getInstance(jobCls);
+ Thread thread = job.getThread();
+
+ if (thread == null) {
+ // for console mode
+ job.work();
+ return;
+ }
+
+ if (thread.isAlive()) {
+ try {
+ EMLogger.getLogger().info(jobCls + " is waiting for job complete.");
+ thread.join();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ public abstract void work();
}
return overseer;
}
}
-
return null;
}
- protected void startWorkInternal() throws InterruptedException {
- doneSignal = new CountDownLatch(jobClasses.size());
-
+ private void startAllJobs() throws InterruptedException {
for (Class<? extends Job> jobCls : jobClasses) {
- new Thread(new JobRunnable(doneSignal, jobCls)).start();
+ Job job = Job.getInstance(jobCls);
+ Thread thread = new Thread(new JobRunnable(doneSignal, job));
+ job.setThread(thread);
+ thread.start();
}
-
- doneSignal.await();
}
+
public void registerJob(Class<? extends Job> jobCls) {
jobClasses.add(jobCls);
}
for (Class<? extends Job> jobCls: jobClasses) {
overseer.registerJob(jobCls);
+ Job.createInstance(jobCls);
}
overseers.add(overseer);
-
return overseer;
}
+
public void startWork() throws InterruptedException {
if (overseerThread != null) {
// already started
assert false : "Overseer [" + name + "] already started !!!"; // for debugging... //$NON-NLS-1$ //$NON-NLS-2$
-
return;
}
+ EMLogger.getLogger().log(Level.INFO, "Overseer [" + name + "] is starting..."); //$NON-NLS-1$ //$NON-NLS-2$
+
+ doneSignal = new CountDownLatch(jobClasses.size());
+ startAllJobs();
+
+ // overseerThread waits all jobs.
+ // If you want to wait until all jobs are finished, call join()
overseerThread = new Thread(new Runnable() {
@Override
public void run() {
try {
- EMLogger.getLogger().log(Level.INFO, "Overseer [" + name + "] is starting..."); //$NON-NLS-1$ //$NON-NLS-2$
- Overseer.this.startWorkInternal();
+ doneSignal.await();
EMLogger.getLogger().log(Level.INFO, "Overseer [" + name + "] is done..."); //$NON-NLS-1$ //$NON-NLS-2$
} catch (InterruptedException e) {
e.printStackTrace();
});
overseerThread.start();
-
}
public void join() throws InterruptedException {
if (overseerThread.isAlive()) {
overseerThread.join();
-
return;
}
}
}
+
class JobRunnable implements Runnable {
private final CountDownLatch doneSignal;
- private final Class<? extends Job> jobCls;
+ private final Job job;
- JobRunnable(CountDownLatch doneSignal, Class<? extends Job> jobCls) {
+ JobRunnable(CountDownLatch doneSignal, Job job) {
this.doneSignal = doneSignal;
- this.jobCls = jobCls;
+ this.job = job;
}
@Override
public void run() {
- Job job = null;
- try {
- job = jobCls.newInstance();
- job.work();
- doneSignal.countDown();
- } catch (InstantiationException | IllegalAccessException e) {
- e.printStackTrace();
- }
+ job.work();
+ doneSignal.countDown();
}
-}
+}
\ No newline at end of file
// called from AboutDialog();
public static void initAboutContents() {
- if (about != null) {
- return;
- }
-
about = new About();
}
public static About getInstance() {
- if (about == null) {
- about = new About();
- }
return about;
}
Properties props = new Properties();
props.load(fis);
ver = props.getProperty(StringResources.TIZEN_SDK_VERSION);
-
+
} catch (FileNotFoundException e){
EMLogger.getLogger().log(Level.SEVERE, e.getMessage());
} catch (Exception e) {
package org.tizen.emulator.manager.ui.detail.item.property;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
-import org.tizen.emulator.manager.resources.FilePathResources;
+import org.tizen.emulator.manager.job.CheckWebcam;
import org.tizen.emulator.manager.ui.detail.item.LineLabelViewItem;
import org.tizen.emulator.manager.ui.detail.item.template.DetailSubViewItem;
import org.tizen.emulator.manager.ui.detail.item.template.LabelViewItem;
import org.tizen.emulator.manager.vms.VMPropertyValue;
-import org.tizen.emulator.manager.vms.helper.HelperClass;
-import org.tizen.emulator.manager.vms.helper.ProcessResult;
import org.tizen.emulator.manager.vms.xml.template.Item;
public class CameraViewItem extends LabelViewItem {
public static final String VALUE_WEBCAM = "Webcam"; //$NON-NLS-1$
public static final String VALUE_VIRTUAL = "Virtual"; //$NON-NLS-1$
- public static Boolean webcamSupport = null;
-
public CameraViewItem(Item template, LineLabelViewItem lineLabelViewItem) {
super(template, lineLabelViewItem);
}
}
}
- private static boolean checkWebcam() {
- ProcessResult res = HelperClass.runProcess(Arrays
- .asList(FilePathResources.getCheckCamPath()));
- int result = res.getExitValue();
- if (result == 1) {
- return true;
- } else {
- return false;
- }
- }
public static boolean isWebcamSupport() {
- if (webcamSupport == null) {
- webcamSupport = checkWebcam();
- }
- return webcamSupport;
+ return CheckWebcam.isWebcamSupport();
}
@Override
package org.tizen.emulator.manager.ui.dialog;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Link;
import org.eclipse.swt.widgets.Shell;
import org.tizen.emulator.manager.EmulatorManager;
+import org.tizen.emulator.manager.job.CheckAbout;
import org.tizen.emulator.manager.logging.EMLogger;
import org.tizen.emulator.manager.resources.FilePathResources;
import org.tizen.emulator.manager.resources.ImageResources;
import org.tizen.emulator.manager.resources.StringResources;
-import org.tizen.emulator.manager.tool.About;
import org.tizen.emulator.manager.ui.MainDialog;
import org.tizen.emulator.manager.ui.Messages;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
public class AboutDialog {
private static Shell dialog = null;
private static int width = 436; //149 + 287
private static int height = 290; // 180 + 110
static {
- About.initAboutContents();
textContents = StringResources.NEW_LINE
+ Messages.getString("AboutDialog.0") //$NON-NLS-1$
+ StringResources.NEW_LINE + StringResources.NEW_LINE
- + Messages.getString("AboutDialog.2") + About.getInstance().getAboutVersion() //$NON-NLS-1$
+ + Messages.getString("AboutDialog.2") + CheckAbout.getAboutInstance().getAboutVersion() //$NON-NLS-1$
+ StringResources.NEW_LINE
- + Messages.getString("AboutDialog.3") + About.getInstance().getBuildTime(); //$NON-NLS-1$
+ + Messages.getString("AboutDialog.3") + CheckAbout.getAboutInstance().getBuildTime(); //$NON-NLS-1$
}
okButton.setText(StringResources.OK);
okButton.setFocus();
okButton.addSelectionListener(new SelectionListener() {
+ @Override
public void widgetSelected(SelectionEvent e) {
dialog.close();
}
+ @Override
public void widgetDefaultSelected(SelectionEvent e) {
}
});
"<a>" + FilePathResources.getTizenVmsPath() + "</a>"); //$NON-NLS-1$ //$NON-NLS-2$
workspace.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
workspace.addSelectionListener(new SelectionListener(){
+ @Override
public void widgetDefaultSelected(SelectionEvent arg0) {
}
+ @Override
public void widgetSelected(SelectionEvent arg0) {
try {
org.eclipse.swt.program.Program.launch(FilePathResources.getTizenVmsPath());
Messages.getString("AboutDialog.8")); //$NON-NLS-1$
visit.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
visit.addSelectionListener(new SelectionListener(){
+ @Override
public void widgetDefaultSelected(SelectionEvent arg0) {
}
+ @Override
public void widgetSelected(SelectionEvent arg0) {
try {
String url = Messages.getString("AboutDialog.9"); //$NON-NLS-1$
import org.eclipse.swt.widgets.Shell;
import org.tizen.emulator.manager.EmulatorManager;
import org.tizen.emulator.manager.Messages;
+import org.tizen.emulator.manager.job.CheckSDCard;
import org.tizen.emulator.manager.logging.EMLogger;
import org.tizen.emulator.manager.resources.FilePathResources;
import org.tizen.emulator.manager.resources.StringResources;
checkPortNumber();
checkDiskImage(property);
+ CheckSDCard.isSDCardChecked();
List<String> cmd = getCommand(property);