diff --git a/pom.xml b/pom.xml
index 7208ef1..e4490fe 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
com.daxiang
agent
- 0.7.6
+ 0.7.8
jar
diff --git a/src/main/java/com/daxiang/action/AndroidAction.java b/src/main/java/com/daxiang/action/AndroidAction.java
index 726066b..c4f6d64 100644
--- a/src/main/java/com/daxiang/action/AndroidAction.java
+++ b/src/main/java/com/daxiang/action/AndroidAction.java
@@ -6,7 +6,6 @@
import com.daxiang.core.mobile.android.AndroidUtil;
import com.daxiang.core.mobile.android.IDeviceExecuteShellCommandException;
import lombok.extern.slf4j.Slf4j;
-import org.springframework.util.Assert;
/**
* Created by jiangyitao.
@@ -25,22 +24,16 @@ public AndroidAction(AndroidDevice androidDevice) {
@Action(id = 2000, name = "清除apk数据", platforms = 1)
public void clearApkData(@Param(description = "包名") String packageName) throws IDeviceExecuteShellCommandException {
- Assert.hasText(packageName, "包名不能为空");
-
AndroidUtil.clearApkData(androidDevice.getIDevice(), packageName);
}
@Action(id = 2001, name = "启动/重启apk", platforms = 1)
public void restartApk(@Param(description = "包名") String packageName, @Param(description = "启动Activity名") String launchActivity) throws IDeviceExecuteShellCommandException {
- Assert.hasText(packageName, "包名不能为空");
- Assert.hasText(launchActivity, "启动Activity不能为空");
-
AndroidUtil.restartApk(androidDevice.getIDevice(), packageName, launchActivity);
}
@Action(id = 2002, name = "执行adb shell命令", returnValueDesc = "命令返回信息", platforms = 1)
public String executeAdbShellCommand(@Param(description = "命令") String cmd) throws IDeviceExecuteShellCommandException {
- Assert.hasText(cmd, "命令不能为空");
return AndroidUtil.executeShellCommand(androidDevice.getIDevice(), cmd);
}
}
diff --git a/src/main/java/com/daxiang/controller/ActionController.java b/src/main/java/com/daxiang/controller/ActionController.java
index 007f815..40b9ff7 100644
--- a/src/main/java/com/daxiang/controller/ActionController.java
+++ b/src/main/java/com/daxiang/controller/ActionController.java
@@ -22,15 +22,4 @@ public class ActionController {
public Response debug(@Valid @RequestBody ActionDebugRequest request) {
return actionService.debug(request);
}
-
- /**
- * 给开发者调试专用
- *
- * @param code
- * @return
- */
- @PostMapping("/developer/debug")
- public Response developerDebug(String className, String code) {
- return actionService.compileAndDebug(className, code);
- }
}
diff --git a/src/main/java/com/daxiang/controller/AndroidController.java b/src/main/java/com/daxiang/controller/AndroidController.java
index 9f1351d..510b2ac 100644
--- a/src/main/java/com/daxiang/controller/AndroidController.java
+++ b/src/main/java/com/daxiang/controller/AndroidController.java
@@ -2,6 +2,7 @@
import com.daxiang.model.Response;
import com.daxiang.service.AndroidService;
+import com.google.common.collect.ImmutableMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -17,26 +18,30 @@ public class AndroidController {
@GetMapping("/{mobileId}/adbkit/start")
public Response startAdbKit(@PathVariable String mobileId) {
- return androidService.startAdbKit(mobileId);
+ int port = androidService.startAdbKit(mobileId);
+ return Response.success(ImmutableMap.of("port", port));
}
@GetMapping("/{mobileId}/adbkit/stop")
public Response stop(@PathVariable String mobileId) {
- return androidService.stopAdbKit(mobileId);
+ androidService.stopAdbKit(mobileId);
+ return Response.success("停止完成");
}
@PostMapping("/aaptDumpBadging")
public Response aaptDumpBadging(@RequestBody String apkDownloadUrl) {
- return androidService.aaptDumpBadging(apkDownloadUrl);
+ String res = androidService.aaptDumpBadging(apkDownloadUrl);
+ return Response.success("ok", res);
}
@GetMapping("{mobileId}/imeList")
public Response getImeList(@PathVariable String mobileId) {
- return androidService.getImeList(mobileId);
+ return Response.success(androidService.getImeList(mobileId));
}
@PostMapping("{mobileId}/ime")
public Response setIme(@PathVariable String mobileId, String ime) {
- return androidService.setIme(mobileId, ime);
+ androidService.setIme(mobileId, ime);
+ return Response.success("设置输入法成功");
}
}
\ No newline at end of file
diff --git a/src/main/java/com/daxiang/controller/BrowserController.java b/src/main/java/com/daxiang/controller/BrowserController.java
index b4dc617..fd2eb4a 100644
--- a/src/main/java/com/daxiang/controller/BrowserController.java
+++ b/src/main/java/com/daxiang/controller/BrowserController.java
@@ -20,6 +20,6 @@ public class BrowserController {
@GetMapping("/{browserId}")
public Response getBrowser(@PathVariable String browserId) {
- return browserService.getBrowser(browserId);
+ return Response.success(browserService.getBrowser(browserId));
}
}
diff --git a/src/main/java/com/daxiang/controller/DeviceController.java b/src/main/java/com/daxiang/controller/DeviceController.java
index afbba7f..d7a3848 100644
--- a/src/main/java/com/daxiang/controller/DeviceController.java
+++ b/src/main/java/com/daxiang/controller/DeviceController.java
@@ -17,12 +17,12 @@ public class DeviceController {
@GetMapping("/{deviceId}/dump")
public Response dump(@PathVariable String deviceId) {
- return deviceService.dump(deviceId);
+ return Response.success(deviceService.dump(deviceId));
}
@GetMapping("/{deviceId}/screenshot")
public Response screenshot(@PathVariable String deviceId) {
- return deviceService.screenshot(deviceId);
+ return Response.success(deviceService.screenshot(deviceId));
}
}
diff --git a/src/main/java/com/daxiang/controller/MobileController.java b/src/main/java/com/daxiang/controller/MobileController.java
index a67d40d..e8ffac3 100644
--- a/src/main/java/com/daxiang/controller/MobileController.java
+++ b/src/main/java/com/daxiang/controller/MobileController.java
@@ -18,11 +18,12 @@ public class MobileController {
@PostMapping("/{mobileId}/installApp")
public Response installApp(MultipartFile app, @PathVariable String mobileId) {
- return mobileService.installApp(app, mobileId);
+ mobileService.installApp(app, mobileId);
+ return Response.success("安装成功");
}
@GetMapping("/{mobileId}")
public Response getMobile(@PathVariable String mobileId) {
- return mobileService.getMobile(mobileId);
+ return Response.success(mobileService.getMobile(mobileId));
}
}
diff --git a/src/main/java/com/daxiang/core/mobile/android/ADB.java b/src/main/java/com/daxiang/core/mobile/android/ADB.java
index 365b530..48d3636 100644
--- a/src/main/java/com/daxiang/core/mobile/android/ADB.java
+++ b/src/main/java/com/daxiang/core/mobile/android/ADB.java
@@ -7,6 +7,8 @@
import java.io.File;
import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
/**
* Created by jiangyitao.
@@ -28,26 +30,22 @@ public static void startServer() throws IOException {
Terminal.execute("adb start-server");
}
- /**
- * 获取adb路径
- *
- * @return
- */
private static String getPath() {
String androidHome = System.getenv("ANDROID_HOME");
- log.info("环境变量ANDROID_HOME: {}", androidHome);
+ log.info("ANDROID_HOME: {}", androidHome);
if (StringUtils.isEmpty(androidHome)) {
- throw new RuntimeException("未获取到ANDROID_HOME,请配置ANDROID_HOME环境变量");
+ throw new IllegalStateException("环境变量缺少ANDROID_HOME");
}
- String adbPath = androidHome + File.separator + "platform-tools" + File.separator;
- if (Terminal.IS_WINDOWS) {
- adbPath = adbPath + "adb.exe";
- } else {
- adbPath = adbPath + "adb";
- }
+ String adbPrefixPath = androidHome + File.separator + "platform-tools" + File.separator;
+ String adbPath = Terminal.IS_WINDOWS ? adbPrefixPath + "adb.exe" : adbPrefixPath + "adb";
log.info("adb路径: {}", adbPath);
+
+ if (!Files.exists(Paths.get(adbPath))) {
+ throw new IllegalStateException(adbPath + "文件不存在");
+ }
+
return adbPath;
}
}
\ No newline at end of file
diff --git a/src/main/java/com/daxiang/core/mobile/android/AndroidUtil.java b/src/main/java/com/daxiang/core/mobile/android/AndroidUtil.java
index 22e061b..bc807bb 100644
--- a/src/main/java/com/daxiang/core/mobile/android/AndroidUtil.java
+++ b/src/main/java/com/daxiang/core/mobile/android/AndroidUtil.java
@@ -55,7 +55,9 @@ public static String getMemSize(IDevice iDevice) throws IDeviceExecuteShellComma
}
public static String getDeviceName(IDevice iDevice) {
- return String.format("[%s] %s", iDevice.getProperty("ro.product.brand"), iDevice.getProperty("ro.product.model"));
+ String brand = iDevice.getProperty("ro.product.brand");
+ String model = iDevice.getProperty("ro.product.model");
+ return String.format("[%s] %s", brand, model);
}
public static String getAndroidVersion(Integer sdkVerison) {
@@ -134,10 +136,14 @@ public static String aaptDumpBadging(String apkPath) throws IOException {
}
public static void clearApkData(IDevice iDevice, String packageName) throws IDeviceExecuteShellCommandException {
+ Assert.hasText(packageName, "packageName must has text");
executeShellCommand(iDevice, "pm clear " + packageName);
}
public static void restartApk(IDevice iDevice, String packageName, String launchActivity) throws IDeviceExecuteShellCommandException {
+ Assert.hasText(packageName, "packageName must has text");
+ Assert.hasText(launchActivity, "launchActivity must has text");
+
executeShellCommand(iDevice, "am start -S -n " + packageName + "/" + launchActivity);
}
@@ -168,6 +174,7 @@ public static List getImeList(IDevice iDevice) throws IDeviceExecuteShel
}
public static void setIme(IDevice iDevice, String ime) throws IDeviceExecuteShellCommandException {
+ Assert.hasText(ime, "ime must has text");
executeShellCommand(iDevice, "ime set " + ime);
}
diff --git a/src/main/java/com/daxiang/core/testng/TestNGRunner.java b/src/main/java/com/daxiang/core/testng/TestNGRunner.java
index 80ae798..a34b314 100644
--- a/src/main/java/com/daxiang/core/testng/TestNGRunner.java
+++ b/src/main/java/com/daxiang/core/testng/TestNGRunner.java
@@ -1,6 +1,6 @@
package com.daxiang.core.testng;
-import com.daxiang.model.Response;
+import com.daxiang.exception.ActionDebugException;
import org.springframework.util.CollectionUtils;
import org.testng.ITestNGListener;
import org.testng.TestNG;
@@ -21,18 +21,18 @@ public static void runTestCases(Class[] classes, Integer failRetryCount) {
}
}
- public static Response debugAction(Class clazz) {
+ public static String debugAction(Class clazz) throws ActionDebugException {
TestNG testNG = run(new Class[]{clazz}, Arrays.asList(DebugActionTestListener.class));
if (testNG.getStatus() != 0) { // 运行有错误
- return Response.fail(DebugActionTestListener.getFailMsg());
- } else { // 运行成功
- List printMsgList = DebugActionTestListener.getPrintMsgList();
- if (CollectionUtils.isEmpty(printMsgList)) {
- printMsgList = Arrays.asList("执行成功");
- }
-
- return Response.success(String.join("\n", printMsgList));
+ throw new ActionDebugException(DebugActionTestListener.getFailMsg());
}
+
+ List printMsgList = DebugActionTestListener.getPrintMsgList();
+ if (CollectionUtils.isEmpty(printMsgList)) {
+ printMsgList = Arrays.asList("执行成功");
+ }
+
+ return String.join("\n", printMsgList);
}
private static TestNG run(Class[] testClasses, List> listenerClasses) {
diff --git a/src/main/java/com/daxiang/exception/ActionDebugException.java b/src/main/java/com/daxiang/exception/ActionDebugException.java
new file mode 100644
index 0000000..32f5dd5
--- /dev/null
+++ b/src/main/java/com/daxiang/exception/ActionDebugException.java
@@ -0,0 +1,10 @@
+package com.daxiang.exception;
+
+/**
+ * Created by jiangyitao.
+ */
+public class ActionDebugException extends Exception {
+ public ActionDebugException(String msg) {
+ super(msg);
+ }
+}
diff --git a/src/main/java/com/daxiang/model/Response.java b/src/main/java/com/daxiang/model/Response.java
index 9b107a3..3ad8a93 100644
--- a/src/main/java/com/daxiang/model/Response.java
+++ b/src/main/java/com/daxiang/model/Response.java
@@ -17,8 +17,8 @@ public class Response {
private String msg;
private T data;
- private static Response buildResponse(Integer status, String msg, T data) {
- Response response = new Response();
+ private static Response createResponse(Integer status, String msg, T data) {
+ Response response = new Response<>();
response.setStatus(status);
response.setMsg(msg);
response.setData(data);
@@ -27,35 +27,35 @@ private static Response buildResponse(Integer status, String msg, T data)
@JsonIgnore
public boolean isSuccess() {
- return status == SUCCESS;
+ return SUCCESS.equals(status);
}
public static Response success() {
- return buildResponse(SUCCESS, "success", null);
+ return createResponse(SUCCESS, "success", null);
}
public static Response success(T data) {
- return buildResponse(SUCCESS, "success", data);
+ return createResponse(SUCCESS, "success", data);
}
public static Response success(String msg) {
- return buildResponse(SUCCESS, msg, null);
+ return createResponse(SUCCESS, msg, null);
}
public static Response success(String msg, T data) {
- return buildResponse(SUCCESS, msg, data);
+ return createResponse(SUCCESS, msg, data);
}
public static Response fail(String msg) {
- return buildResponse(FAIL, msg, null);
+ return createResponse(FAIL, msg, null);
}
public static Response fail(String msg, T data) {
- return buildResponse(FAIL, msg, data);
+ return createResponse(FAIL, msg, data);
}
public static Response error(String msg) {
- return buildResponse(ERROR, msg, null);
+ return createResponse(ERROR, msg, null);
}
}
diff --git a/src/main/java/com/daxiang/service/ActionService.java b/src/main/java/com/daxiang/service/ActionService.java
index 8bb4f32..997cca3 100644
--- a/src/main/java/com/daxiang/service/ActionService.java
+++ b/src/main/java/com/daxiang/service/ActionService.java
@@ -11,7 +11,6 @@
import com.daxiang.utils.UUIDUtil;
import com.google.common.collect.ImmutableMap;
import lombok.extern.slf4j.Slf4j;
-import org.dvare.dynamic.exceptions.DynamicCompilerException;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
@@ -24,12 +23,6 @@
@Service
public class ActionService {
- /**
- * 调试action
- *
- * @param request
- * @return
- */
public Response debug(ActionDebugRequest request) {
DeviceTestTask deviceTestTask = new DeviceTestTask();
BeanUtils.copyProperties(request, deviceTestTask);
@@ -48,21 +41,13 @@ public Response debug(ActionDebugRequest request) {
return Response.fail(e.getMessage());
}
- Response response = compileAndDebug(className, code);
- response.setData(ImmutableMap.of("code", code));
- return response;
- }
-
- /**
- * 编译调试运行
- */
- public Response compileAndDebug(String className, String code) {
try {
Class clazz = JavaCompiler.compile(className, code);
- return TestNGRunner.debugAction(clazz);
- } catch (DynamicCompilerException e) {
- log.error("编译{}失败: {}", className, e.getMessage());
- return Response.fail(e.getMessage());
+ String printInfo = TestNGRunner.debugAction(clazz);
+ return Response.success(printInfo, ImmutableMap.of("code", code));
+ } catch (Exception e) {
+ log.error("[{}]err msg: {}, code: {} ", request.getDeviceId(), e.getMessage(), code);
+ return Response.fail(e.getMessage(), ImmutableMap.of("code", code));
}
}
diff --git a/src/main/java/com/daxiang/service/AndroidService.java b/src/main/java/com/daxiang/service/AndroidService.java
index 9ec0152..73fccdb 100644
--- a/src/main/java/com/daxiang/service/AndroidService.java
+++ b/src/main/java/com/daxiang/service/AndroidService.java
@@ -6,15 +6,15 @@
import com.daxiang.core.mobile.android.AndroidDevice;
import com.daxiang.core.mobile.android.AndroidUtil;
import com.daxiang.core.mobile.android.IDeviceExecuteShellCommandException;
-import com.daxiang.model.Response;
+import com.daxiang.exception.AgentException;
import com.daxiang.utils.HttpUtil;
-import com.google.common.collect.ImmutableMap;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.springframework.stereotype.Service;
import java.io.File;
import java.io.IOException;
+import java.util.List;
/**
* Created by jiangyitao.
@@ -23,74 +23,70 @@
@Service
public class AndroidService {
- public Response startAdbKit(String mobileId) {
+ public int startAdbKit(String mobileId) {
Device device = DeviceHolder.getConnectedDevice(mobileId);
if (device == null) {
- return Response.fail(mobileId + "未连接");
+ throw new AgentException(mobileId + "未连接");
}
try {
- int port = ((AndroidDevice) device).getAdbKit().start();
- return Response.success(ImmutableMap.of("port", port));
+ return ((AndroidDevice) device).getAdbKit().start();
} catch (IOException e) {
- log.error("[{}]启动adbkit失败", device.getId(), e);
- return Response.fail(e.getMessage());
+ log.error("[{}]启动adbkit失败", mobileId, e);
+ throw new AgentException(e.getMessage());
}
}
- public Response stopAdbKit(String mobileId) {
+ public void stopAdbKit(String mobileId) {
Device device = DeviceHolder.getConnectedDevice(mobileId);
if (device == null) {
- return Response.fail(mobileId + "未连接");
+ throw new AgentException(mobileId + "未连接");
}
((AndroidDevice) device).getAdbKit().stop();
- return Response.success("停止完成");
}
- public Response aaptDumpBadging(String apkDownloadUrl) {
+ public String aaptDumpBadging(String apkDownloadUrl) {
File apkFile = null;
try {
apkFile = HttpUtil.downloadFile(apkDownloadUrl);
- String result = AndroidUtil.aaptDumpBadging(apkFile.getAbsolutePath());
- return Response.success("ok", result);
+ return AndroidUtil.aaptDumpBadging(apkFile.getAbsolutePath());
} catch (IOException e) {
- log.error("io error", e);
- return Response.fail(e.getMessage());
+ log.error(e.getMessage(), e);
+ throw new AgentException(e.getMessage());
} finally {
FileUtils.deleteQuietly(apkFile);
}
}
- public Response getImeList(String mobileId) {
+ public List getImeList(String mobileId) {
Device device = DeviceHolder.getConnectedDevice(mobileId);
if (device == null) {
- return Response.fail(mobileId + "未连接");
+ throw new AgentException(mobileId + "未连接");
}
try {
IDevice iDevice = ((AndroidDevice) device).getIDevice();
- return Response.success(AndroidUtil.getImeList(iDevice));
+ return AndroidUtil.getImeList(iDevice);
} catch (IDeviceExecuteShellCommandException e) {
- log.error("[{}]获取输入法失败", device.getId(), e);
- return Response.fail(e.getMessage());
+ log.error("[{}]获取输入法失败", mobileId, e);
+ throw new AgentException(e.getMessage());
}
}
- public Response setIme(String mobileId, String ime) {
+ public void setIme(String mobileId, String ime) {
Device device = DeviceHolder.getConnectedDevice(mobileId);
if (device == null) {
- return Response.fail(mobileId + "未连接");
+ throw new AgentException(mobileId + "未连接");
}
try {
IDevice iDevice = ((AndroidDevice) device).getIDevice();
AndroidUtil.setIme(iDevice, ime);
- return Response.success("设置输入法成功");
} catch (IDeviceExecuteShellCommandException e) {
- log.error("[{}]设置输入法失败", device.getId(), e);
- return Response.fail(e.getMessage());
+ log.error("[{}]设置输入法失败", mobileId, e);
+ throw new AgentException(e.getMessage());
}
}
}
\ No newline at end of file
diff --git a/src/main/java/com/daxiang/service/BrowserService.java b/src/main/java/com/daxiang/service/BrowserService.java
index c65a628..3ac9ba3 100644
--- a/src/main/java/com/daxiang/service/BrowserService.java
+++ b/src/main/java/com/daxiang/service/BrowserService.java
@@ -2,8 +2,9 @@
import com.daxiang.core.Device;
import com.daxiang.core.DeviceHolder;
+import com.daxiang.core.pc.web.Browser;
import com.daxiang.core.pc.web.BrowserDevice;
-import com.daxiang.model.Response;
+import com.daxiang.exception.AgentException;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
@@ -13,18 +14,13 @@
@Service
public class BrowserService {
- public Response getBrowser(String browserId) {
+ public Browser getBrowser(String browserId) {
if (StringUtils.isEmpty(browserId)) {
- return Response.fail("browserId不能为空");
+ throw new AgentException("browserId不能为空");
}
Device device = DeviceHolder.get(browserId);
- if (device == null) {
- return Response.success();
- } else {
- BrowserDevice browserDevice = (BrowserDevice) device;
- return Response.success(browserDevice.getBrowser());
- }
+ return device == null ? null : ((BrowserDevice) device).getBrowser();
}
}
diff --git a/src/main/java/com/daxiang/service/DeviceService.java b/src/main/java/com/daxiang/service/DeviceService.java
index bbeb456..5071abb 100644
--- a/src/main/java/com/daxiang/service/DeviceService.java
+++ b/src/main/java/com/daxiang/service/DeviceService.java
@@ -1,16 +1,18 @@
package com.daxiang.service;
-import com.alibaba.fastjson.JSONObject;
import com.daxiang.core.Device;
import com.daxiang.core.DeviceHolder;
import com.daxiang.core.mobile.MobileDevice;
-import com.daxiang.model.Response;
+import com.daxiang.exception.AgentException;
import com.daxiang.model.UploadFile;
import io.appium.java_client.AppiumDriver;
import lombok.extern.slf4j.Slf4j;
import org.openqa.selenium.Dimension;
import org.springframework.stereotype.Service;
+import java.util.HashMap;
+import java.util.Map;
+
/**
* Created by jiangyitao.
*/
@@ -18,17 +20,17 @@
@Service
public class DeviceService {
- public Response screenshot(String deviceId) {
+ public Map screenshot(String deviceId) {
Device device = DeviceHolder.getConnectedDevice(deviceId);
if (device == null) {
- return Response.fail(deviceId + "未连接");
+ throw new AgentException(deviceId + "未连接");
}
UploadFile uploadFile = device.screenshotThenUploadToServer();
- JSONObject response = new JSONObject();
- response.put("imgUrl", uploadFile.getDownloadUrl());
- response.put("imgPath", uploadFile.getFilePath());
+ Map res = new HashMap<>();
+ res.put("imgUrl", uploadFile.getDownloadUrl());
+ res.put("imgPath", uploadFile.getFilePath());
if (device instanceof MobileDevice) {
MobileDevice mobileDevice = (MobileDevice) device;
@@ -37,21 +39,21 @@ public Response screenshot(String deviceId) {
// 在竖/横屏时,若android截图有虚拟按键,这里window的高度/宽度不包含虚拟按键
AppiumDriver driver = (AppiumDriver) mobileDevice.getDriver();
Dimension window = driver.manage().window().getSize();
- response.put("windowHeight", window.getHeight());
- response.put("windowWidth", window.getWidth());
- response.put("windowOrientation", driver.getOrientation().value());
+ res.put("windowHeight", window.getHeight());
+ res.put("windowWidth", window.getWidth());
+ res.put("windowOrientation", driver.getOrientation().value());
}
}
- return Response.success(response);
+ return res;
}
- public Response dump(String deviceId) {
+ public Map dump(String deviceId) {
Device device = DeviceHolder.getConnectedDevice(deviceId);
if (device == null) {
- return Response.fail(deviceId + "未连接");
+ throw new AgentException(deviceId + "未连接");
}
- return Response.success(device.dump());
+ return device.dump();
}
}
diff --git a/src/main/java/com/daxiang/service/MobileService.java b/src/main/java/com/daxiang/service/MobileService.java
index a16447c..d9461c1 100644
--- a/src/main/java/com/daxiang/service/MobileService.java
+++ b/src/main/java/com/daxiang/service/MobileService.java
@@ -1,9 +1,10 @@
package com.daxiang.service;
import com.daxiang.core.Device;
+import com.daxiang.core.mobile.Mobile;
import com.daxiang.core.mobile.MobileDevice;
import com.daxiang.core.DeviceHolder;
-import com.daxiang.model.Response;
+import com.daxiang.exception.AgentException;
import com.daxiang.utils.UUIDUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
@@ -20,43 +21,33 @@
@Service
public class MobileService {
- public Response installApp(MultipartFile app, String mobileId) {
+ public void installApp(MultipartFile app, String mobileId) {
Device device = DeviceHolder.getConnectedDevice(mobileId);
if (device == null) {
- return Response.fail(mobileId + "未连接");
+ throw new AgentException(mobileId + "未连接");
}
String fileName = app.getOriginalFilename();
- if (fileName.contains(".")) {
- fileName = UUIDUtil.getUUID() + "." + StringUtils.unqualify(fileName);
- } else {
- fileName = UUIDUtil.getUUID();
- }
-
+ fileName = UUIDUtil.getUUIDFilename(fileName);
File appFile = new File(fileName);
+
try {
FileUtils.copyInputStreamToFile(app.getInputStream(), appFile);
((MobileDevice) device).installApp(appFile);
- return Response.success("安装成功");
} catch (Exception e) {
log.error("[{}]安装app失败", mobileId, e);
- return Response.fail(e.getMessage());
+ throw new AgentException(e.getMessage());
} finally {
FileUtils.deleteQuietly(appFile);
}
}
- public Response getMobile(String mobileId) {
+ public Mobile getMobile(String mobileId) {
if (StringUtils.isEmpty(mobileId)) {
- return Response.fail("mobileId不能为空");
+ throw new AgentException("mobileId不能为空");
}
Device device = DeviceHolder.get(mobileId);
- if (device == null) {
- return Response.success();
- } else {
- MobileDevice mobileDevice = (MobileDevice) device;
- return Response.success(mobileDevice.getMobile());
- }
+ return device == null ? null : ((MobileDevice) device).getMobile();
}
}
diff --git a/src/main/java/com/daxiang/utils/HttpUtil.java b/src/main/java/com/daxiang/utils/HttpUtil.java
index 796936d..872a0cf 100644
--- a/src/main/java/com/daxiang/utils/HttpUtil.java
+++ b/src/main/java/com/daxiang/utils/HttpUtil.java
@@ -2,7 +2,6 @@
import com.daxiang.App;
import org.apache.commons.io.FileUtils;
-import org.springframework.util.StringUtils;
import org.springframework.web.client.RestTemplate;
import java.io.File;
@@ -25,11 +24,7 @@ public static File downloadFile(String url) throws IOException {
public static File downloadFile(String url, boolean renameFile) throws IOException {
String fileName = url.substring(url.lastIndexOf("/") + 1);
if (renameFile) {
- if (fileName.contains(".")) {
- fileName = UUIDUtil.getUUID() + "." + StringUtils.unqualify(fileName);
- } else {
- fileName = UUIDUtil.getUUID();
- }
+ fileName = UUIDUtil.getUUIDFilename(fileName);
}
File file = new File(fileName);
diff --git a/src/main/java/com/daxiang/utils/UUIDUtil.java b/src/main/java/com/daxiang/utils/UUIDUtil.java
index 29492ea..f89bbf1 100644
--- a/src/main/java/com/daxiang/utils/UUIDUtil.java
+++ b/src/main/java/com/daxiang/utils/UUIDUtil.java
@@ -1,12 +1,21 @@
package com.daxiang.utils;
+import org.springframework.util.Assert;
+import org.springframework.util.StringUtils;
+
import java.util.UUID;
/**
* Created by jiangyitao.
*/
public class UUIDUtil {
+
public static String getUUID() {
return UUID.randomUUID().toString().replace("-", "").toLowerCase();
}
+
+ public static String getUUIDFilename(String filename) {
+ Assert.hasText(filename, "filename不能为空");
+ return filename.contains(".") ? getUUID() + "." + StringUtils.unqualify(filename) : getUUID();
+ }
}