Browse Source

所有依赖一起下载

master
Fangjie Hu 8 years ago
parent
commit
e1bbeb8a6b
  1. 16
      designer_base/src/com/fr/design/extra/PluginHelper.java
  2. 146
      designer_base/src/com/fr/design/extra/plugindependence/DownLoadDependenceUI.java
  3. 11
      designer_base/src/com/fr/design/extra/plugindependence/PluginDependenceUtils.java

16
designer_base/src/com/fr/design/extra/PluginHelper.java

@ -10,6 +10,7 @@ import com.fr.plugin.Plugin;
import com.fr.plugin.PluginLoader; import com.fr.plugin.PluginLoader;
import com.fr.plugin.PluginManagerHelper; import com.fr.plugin.PluginManagerHelper;
import com.fr.plugin.dependence.PluginDependence; import com.fr.plugin.dependence.PluginDependence;
import com.fr.plugin.dependence.PluginDependenceException;
import com.fr.plugin.dependence.PluginDependenceUnit; import com.fr.plugin.dependence.PluginDependenceUnit;
import com.fr.stable.ArrayUtils; import com.fr.stable.ArrayUtils;
import com.fr.stable.EncodeConstants; import com.fr.stable.EncodeConstants;
@ -21,6 +22,7 @@ import javax.swing.*;
import java.io.*; import java.io.*;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.URLDecoder; import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
@ -124,19 +126,29 @@ public class PluginHelper {
} }
//将所有未配置好的资源文件依赖准备好 //将所有未配置好的资源文件依赖准备好
private static void checkDependenceEnv(Plugin plugin) { private static void checkDependenceEnv(Plugin plugin) throws PluginDependenceException {
PluginDependence dependence = plugin.getDependence(); PluginDependence dependence = plugin.getDependence();
if (dependence == null){ if (dependence == null){
return; return;
} }
List<PluginDependenceUnit> needInstallDependence = new ArrayList<PluginDependenceUnit>();
String currentID = dependence.getCurrentPluginID(); String currentID = dependence.getCurrentPluginID();
List<PluginDependenceUnit> list = dependence.getDependPlugins(); List<PluginDependenceUnit> list = dependence.getDependPlugins();
for (int i = 0;list != null && i < list.size(); i++){ for (int i = 0;list != null && i < list.size(); i++){
PluginDependenceUnit dependenceUnit = list.get(i); PluginDependenceUnit dependenceUnit = list.get(i);
if (!dependenceUnit.checkFileEnv()){ if (!dependenceUnit.checkFileEnv()){
PluginDependenceUtils.installDependenceOnline(currentID, dependenceUnit.getDependenceID(), dependenceUnit.getDependenceDir()); needInstallDependence.add(dependenceUnit);
} }
} }
if (needInstallDependence.isEmpty()){
return;
}
//安装插件依赖
PluginDependenceUtils.installDependenceOnline(currentID, needInstallDependence);
} }
/** /**

146
designer_base/src/com/fr/design/extra/plugindependence/DownLoadDependenceUI.java

@ -8,6 +8,8 @@ import com.fr.general.IOUtils;
import com.fr.general.Inter; import com.fr.general.Inter;
import com.fr.general.SiteCenter; import com.fr.general.SiteCenter;
import com.fr.general.http.HttpClient; import com.fr.general.http.HttpClient;
import com.fr.plugin.dependence.PluginDependenceException;
import com.fr.plugin.dependence.PluginDependenceUnit;
import com.fr.stable.StableUtils; import com.fr.stable.StableUtils;
import com.fr.stable.StringUtils; import com.fr.stable.StringUtils;
@ -22,7 +24,8 @@ import java.io.File;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.InputStream; import java.io.InputStream;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.util.ArrayList;
import java.util.List;
/** /**
* Created by hufan on 2016/9/5. * Created by hufan on 2016/9/5.
*/ */
@ -44,8 +47,7 @@ public class DownLoadDependenceUI implements ActionListener {
//安装环境相关信息 //安装环境相关信息
private String currentID; private String currentID;
private String dependenceID; private List<PluginDependenceUnit> list = null;
private String dependenceDir;
//安装结果 //安装结果
private boolean result = false; private boolean result = false;
//链接服务器的客户端 //链接服务器的客户端
@ -57,10 +59,9 @@ public class DownLoadDependenceUI implements ActionListener {
public DownLoadDependenceUI() { public DownLoadDependenceUI() {
} }
public DownLoadDependenceUI(String currentID, String dependenceID, String dependenceDir) { public DownLoadDependenceUI(String currentID, List<PluginDependenceUnit> list) {
this.currentID = currentID; this.currentID = currentID;
this.dependenceID = dependenceID; this.list = list;
this.dependenceDir = dependenceDir;
this.totalSize = getFileLength(); this.totalSize = getFileLength();
init(); init();
} }
@ -89,7 +90,7 @@ public class DownLoadDependenceUI implements ActionListener {
timer = new Timer(100, this); timer = new Timer(100, this);
frame = new JDialog(DesignerContext.getDesignerFrame(), true); frame = new JDialog(DesignerContext.getDesignerFrame(), true);
frame.setTitle(Inter.getLocText("FR-Designer-Dependence_Install_Online") + dependenceID); frame.setTitle(Inter.getLocText("FR-Designer-Dependence_Install_Online"));
frame.setSize(LOAD_WIDTH, LOAD_HEIGHT); frame.setSize(LOAD_WIDTH, LOAD_HEIGHT);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
frame.setLocation(screenSize.width / 2 - LOAD_WIDTH / 2, screenSize.height / 2 - LOAD_HEIGHT / 2); frame.setLocation(screenSize.width / 2 - LOAD_WIDTH / 2, screenSize.height / 2 - LOAD_HEIGHT / 2);
@ -112,17 +113,29 @@ public class DownLoadDependenceUI implements ActionListener {
//是否可以连接服务器 //是否可以连接服务器
private boolean connectToServer() { private boolean connectToServer() {
httpClient = new HttpClient(SiteCenter.getInstance().acquireUrlByKind(dependenceID)); for (int i = 0; i < list.size(); i++) {
return httpClient.getResponseCode() == HttpURLConnection.HTTP_OK; PluginDependenceUnit dependenceUnit = list.get(i);
httpClient = new HttpClient(SiteCenter.getInstance().acquireUrlByKind(dependenceUnit.getDependenceID()));
if (httpClient.getResponseCode() != HttpURLConnection.HTTP_OK){
return false;
}
}
return true;
} }
//获取依赖文件大小 //获取依赖文件大小
private int getFileLength() { private int getFileLength(){
HttpClient httpClient = new HttpClient(SiteCenter.getInstance().acquireUrlByKind(dependenceID)); int size = 0;
if (httpClient.getResponseCode() == HttpURLConnection.HTTP_OK) { for (int i = 0; i < list.size(); i++) {
return httpClient.getContentLength(); PluginDependenceUnit dependenceUnit = list.get(i);
HttpClient httpClient = new HttpClient(SiteCenter.getInstance().acquireUrlByKind(dependenceUnit.getDependenceID()));
if (httpClient.getResponseCode() == HttpURLConnection.HTTP_OK) {
size += httpClient.getContentLength();
}else {
return -1;
}
} }
return -1; return size;
} }
//安装 //安装
@ -143,7 +156,7 @@ public class DownLoadDependenceUI implements ActionListener {
try { try {
thread.join(); thread.join();
} catch (InterruptedException e) { } catch (InterruptedException e) {
e.printStackTrace(); FRContext.getLogger().error(e.getMessage());
return false; return false;
} }
//停止时钟 //停止时钟
@ -151,57 +164,71 @@ public class DownLoadDependenceUI implements ActionListener {
return result; return result;
} }
private String downloadPluginDependenceFile() throws Exception { private List<String> downloadPluginDependenceFile() throws Exception {
httpClient = new HttpClient(SiteCenter.getInstance().acquireUrlByKind(dependenceID)); totalBytesRead = 0;
if (httpClient.getResponseCode() == HttpURLConnection.HTTP_OK) { List<String> pathList = new ArrayList<String>();
InputStream reader = httpClient.getResponseStream(); for (int i = 0; i < list.size(); i++) {
String temp = StableUtils.pathJoin(PluginHelper.DOWNLOAD_PATH, PluginHelper.TEMP_FILE); PluginDependenceUnit dependenceUnit = list.get(i);
StableUtils.makesureFileExist(new File(temp)); httpClient = new HttpClient(SiteCenter.getInstance().acquireUrlByKind(dependenceUnit.getDependenceID()));
FileOutputStream writer = new FileOutputStream(temp); if (httpClient.getResponseCode() == HttpURLConnection.HTTP_OK) {
byte[] buffer = new byte[PluginConstants.BYTES_NUM]; InputStream reader = httpClient.getResponseStream();
int bytesRead = 0; String temp = StableUtils.pathJoin(PluginHelper.DOWNLOAD_PATH, PluginHelper.TEMP_FILE);
totalBytesRead = 0; StableUtils.makesureFileExist(new File(temp));
FileOutputStream writer = new FileOutputStream(temp);
while ((bytesRead = reader.read(buffer)) > 0 && flag) { byte[] buffer = new byte[PluginConstants.BYTES_NUM];
writer.write(buffer, 0, bytesRead); int bytesRead = 0;
buffer = new byte[PluginConstants.BYTES_NUM]; while ((bytesRead = reader.read(buffer)) > 0 && flag) {
totalBytesRead += bytesRead; writer.write(buffer, 0, bytesRead);
} buffer = new byte[PluginConstants.BYTES_NUM];
reader.close(); totalBytesRead += bytesRead;
writer.flush(); }
writer.close(); reader.close();
writer.flush();
writer.close();
//下载被取消
if (flag == false) {
result = false;
throw new PluginDependenceException(Inter.getLocText("FR-Designer-Dependence_Install_Failed"));
}
pathList.add(temp);
//下载被取消 } else {
if (flag == false) {
result = false; result = false;
return StringUtils.EMPTY; throw new PluginDependenceException(Inter.getLocText("FR-Designer-Dependence_Install_Failed"));
} }
return temp;
} else {
result = false;
throw new com.fr.plugin.PluginVerifyException(Inter.getLocText("FR-Designer-Plugin_Connect_Server_Error"));
} }
return pathList;
} }
public void installDependenceOnline() { public void installDependenceOnline() {
try { try {
String filePath = downloadPluginDependenceFile(); List<String> filePathList = downloadPluginDependenceFile();
if (!StringUtils.EMPTY.equals(filePath)) { //安装文件
//安装文件 installPluginDependenceFile(filePathList);
installPluginDependenceFile(filePath);
result = true;
}
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); result = false;
FRContext.getLogger().error(e.getMessage());
} }
} }
//安装已经下载好的文件,如果是服务文件,则需要复制一份到安装目录下, //安装已经下载好的文件,如果是服务文件,则需要复制一份到安装目录下,
//以便切换远程时,使用本地的服务 //以便切换远程时,使用本地的服务
//如果是服务器环境,则只会安装一份 //如果是服务器环境,则只会安装一份
private void installPluginDependenceFile(String filePath){ private void installPluginDependenceFile(List<String> filePathList){
IOUtils.unzip(new File(filePath), FRContext.getCurrentEnv().getPath() + dependenceDir); if (filePathList.isEmpty()){
result = false;
return;
}
for(int i = 0; i < filePathList.size(); i++) {
if (StringUtils.EMPTY.equals(filePathList.get(i))){
result = false;
return;
}
PluginDependenceUnit dependenceUnit = list.get(i);
IOUtils.unzip(new File(filePathList.get(i)), FRContext.getCurrentEnv().getPath() + dependenceUnit.getDependenceDir());
result = true;
}
} }
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
@ -216,23 +243,22 @@ public class DownLoadDependenceUI implements ActionListener {
} }
} }
public boolean installOnline() { public void installOnline()throws PluginDependenceException {
int choose = JOptionPane.showConfirmDialog(null, Inter.getLocText("FR-Designer-Plugin_Plugin") + currentID + Inter.getLocText("FR-Designer-Need") + " " + dependenceID + " " + Inter.getLocText("FR-Designer-Support") + "," + Inter.getLocText("FR-Designer-Dependence_Need_Install") + " " + dependenceID + " " + "(" + showFileLength() + " m)?", "install tooltip", JOptionPane.YES_NO_OPTION); int choose = JOptionPane.showConfirmDialog(null, Inter.getLocText("FR-Designer-Plugin_Plugin") + Inter.getLocText("FR-Designer-Need") + Inter.getLocText("FR-Designer-Dependence") + Inter.getLocText("FR-Designer-Support") + "," + Inter.getLocText("FR-Designer-Dependence_Need_Install") + "(" + showFileLength() + " m)?", "install tooltip", JOptionPane.YES_NO_OPTION);
if (choose == 0) {//下载安装 if (choose == 0) {//下载安装
if (!connectToServer()) { if (!connectToServer()) {
JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Designer-Dependence_Connect_Server_Error"), "alert", JOptionPane.ERROR_MESSAGE); JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Designer-Dependence_Connect_Server_Error"), "alert", JOptionPane.ERROR_MESSAGE);
return false; throw new PluginDependenceException(Inter.getLocText("FR-Designer-Dependence_Connect_Server_Error"));
} }
//安装依赖环境 //安装依赖环境
if (install()) { if (install()) {
JOptionPane.showMessageDialog(null, dependenceID + Inter.getLocText("FR-Designer-Dependence_Install_Succeed") + "!!"); JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Designer-Dependence_Install_Succeed") + "!!");
return true;
} else { } else {
JOptionPane.showMessageDialog(null, dependenceID + Inter.getLocText("FR-Designer-Dependence_Install_Failed") + "!!", "alert", JOptionPane.ERROR_MESSAGE); JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Designer-Dependence_Install_Failed") + "!!", "alert", JOptionPane.ERROR_MESSAGE);
return false; throw new PluginDependenceException(Inter.getLocText("FR-Designer-Dependence_Install_Failed"));
} }
} else {//不安装。无需为用户准备环境 }else {//不选择下载,则不安装图标插件
return true; throw new PluginDependenceException(Inter.getLocText("FR-Designer-Dependence_Install_Failed"));
} }
} }

11
designer_base/src/com/fr/design/extra/plugindependence/PluginDependenceUtils.java

@ -1,14 +1,19 @@
package com.fr.design.extra.plugindependence; package com.fr.design.extra.plugindependence;
import com.fr.plugin.dependence.PluginDependenceException;
import com.fr.plugin.dependence.PluginDependenceUnit;
import java.util.List;
/** /**
* Created by hufan on 2016/8/31. * Created by hufan on 2016/8/31.
*/ */
public class PluginDependenceUtils { public class PluginDependenceUtils {
public static boolean installDependenceOnline(String currentID, String dependenceID, String dependenceDir) { public static void installDependenceOnline(String currentID, List<PluginDependenceUnit> list) throws PluginDependenceException{
DownLoadDependenceUI ui = new DownLoadDependenceUI(currentID, dependenceID, dependenceDir); DownLoadDependenceUI ui = new DownLoadDependenceUI(currentID, list);
return ui.installOnline(); ui.installOnline();
} }
} }

Loading…
Cancel
Save