forked from fanruan/design
Browse Source
* commit '661fcbe959eb4d84b8605937b6e4fe7b600165a2': (92 commits) 1 1 1 ct ct 只开放给部分客户测试,工具栏上先屏蔽绝对布局 update update 插件依赖中文乱码问题 REPORT-341:表单下边距设置比较大的时候, 会导致二分出来效果不对. 将“轻量重输出”写成插件,去掉原来的菜单项 日文设计器,报表Web属性_填报页面设置排版问题,把最后一排按钮遮住了,现设置水平滚动条 ip部分 sitecenter加了一下 防止初始化的时候没有值,在调用的时候去取值 update update 异步生成模型数据 bugfix:从插件管理里面登录,用户名显示不了 网址部分修改 update ...master
neil
8 years ago
33 changed files with 1459 additions and 126 deletions
@ -0,0 +1,36 @@ |
|||||||
|
/** |
||||||
|
* modal-dialog.css |
||||||
|
* place in same directory as WebViewConfirm.java |
||||||
|
* ensure your build system copies the file to your build output directory |
||||||
|
*/ |
||||||
|
|
||||||
|
.root { |
||||||
|
-fx-glass-color: white; |
||||||
|
} |
||||||
|
|
||||||
|
.modal-dialog { |
||||||
|
-fx-padding: 20; |
||||||
|
-fx-spacing: 10; |
||||||
|
-fx-alignment: center; |
||||||
|
-fx-font-size: 14; |
||||||
|
-fx-background-color: linear-gradient(to bottom, derive(-fx-glass-color, 20%), -fx-glass-color); |
||||||
|
-fx-border-color: derive(-fx-glass-color, -20%); |
||||||
|
-fx-border-width: 5; |
||||||
|
-fx-background-insets: 12; |
||||||
|
-fx-border-insets: 10; |
||||||
|
-fx-border-radius: 6; |
||||||
|
-fx-background-radius: 6; |
||||||
|
} |
||||||
|
|
||||||
|
.modal-dialog:pressed { |
||||||
|
-fx-cursor: move; |
||||||
|
} |
||||||
|
|
||||||
|
.modal-dialog .button:pressed { |
||||||
|
-fx-cursor: default; |
||||||
|
} |
||||||
|
|
||||||
|
.confirmation-results { |
||||||
|
-fx-background-color: cornsilk; |
||||||
|
-fx-padding: 5; |
||||||
|
} |
@ -0,0 +1,271 @@ |
|||||||
|
package com.fr.design.extra.plugindependence; |
||||||
|
|
||||||
|
import com.fr.base.FRContext; |
||||||
|
import com.fr.design.extra.PluginConstants; |
||||||
|
import com.fr.design.extra.PluginHelper; |
||||||
|
import com.fr.design.mainframe.DesignerContext; |
||||||
|
import com.fr.general.IOUtils; |
||||||
|
import com.fr.general.Inter; |
||||||
|
import com.fr.general.SiteCenter; |
||||||
|
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.StringUtils; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import java.awt.*; |
||||||
|
import java.awt.event.ActionEvent; |
||||||
|
import java.awt.event.ActionListener; |
||||||
|
import java.awt.event.WindowAdapter; |
||||||
|
import java.awt.event.WindowEvent; |
||||||
|
import java.awt.image.BufferedImage; |
||||||
|
import java.io.*; |
||||||
|
import java.net.HttpURLConnection; |
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by hufan on 2016/9/5. |
||||||
|
*/ |
||||||
|
public class DownLoadDependenceUI implements ActionListener { |
||||||
|
//进度显示界面
|
||||||
|
private JDialog frame = null; |
||||||
|
//进度条
|
||||||
|
private JProgressBar progressbar; |
||||||
|
//进度信息
|
||||||
|
private JLabel label; |
||||||
|
//进度条更新时钟
|
||||||
|
private Timer timer; |
||||||
|
//是否继续下载
|
||||||
|
private boolean flag = true; |
||||||
|
|
||||||
|
// 定义加载窗口大小
|
||||||
|
private final int LOAD_WIDTH = 455; |
||||||
|
private final int LOAD_HEIGHT = 295; |
||||||
|
|
||||||
|
//安装环境相关信息
|
||||||
|
private String currentID; |
||||||
|
private List<PluginDependenceUnit> list = null; |
||||||
|
//安装结果
|
||||||
|
private boolean result = false; |
||||||
|
//链接服务器的客户端
|
||||||
|
private HttpClient httpClient; |
||||||
|
//已读文件字节数
|
||||||
|
private int totalBytesRead = 0; |
||||||
|
//文件总长度
|
||||||
|
private int totalSize = 0; |
||||||
|
|
||||||
|
public DownLoadDependenceUI() { |
||||||
|
} |
||||||
|
public DownLoadDependenceUI(String currentID, List<PluginDependenceUnit> list) { |
||||||
|
this.currentID = currentID; |
||||||
|
this.list = list; |
||||||
|
this.totalSize = getFileLength(); |
||||||
|
init(); |
||||||
|
} |
||||||
|
|
||||||
|
private void init() { |
||||||
|
// 创建标签,并在标签上放置一张图片
|
||||||
|
BufferedImage image = IOUtils.readImage("/com/fr/design/extra/plugindependence/image/background.png"); |
||||||
|
ImageIcon imageIcon = new ImageIcon(image); |
||||||
|
label = new JLabel(imageIcon); |
||||||
|
label.setBounds(0, 0, LOAD_WIDTH, LOAD_HEIGHT - 15); |
||||||
|
|
||||||
|
progressbar = new JProgressBar(); |
||||||
|
// 显示当前进度值信息
|
||||||
|
progressbar.setStringPainted(true); |
||||||
|
// 设置进度条边框不显示
|
||||||
|
progressbar.setBorderPainted(false); |
||||||
|
// 设置进度条的前景色
|
||||||
|
progressbar.setForeground(new Color(0x38aef5)); |
||||||
|
// 设置进度条的背景色
|
||||||
|
progressbar.setBackground(new Color(188, 190, 194)); |
||||||
|
progressbar.setBounds(0, LOAD_HEIGHT - 15, LOAD_WIDTH, 15); |
||||||
|
progressbar.setMinimum(0); |
||||||
|
progressbar.setMaximum(totalSize); |
||||||
|
progressbar.setValue(0); |
||||||
|
|
||||||
|
timer = new Timer(100, this); |
||||||
|
|
||||||
|
frame = new JDialog(DesignerContext.getDesignerFrame(), true); |
||||||
|
frame.setTitle(Inter.getLocText("FR-Designer-Dependence_Install_Online")); |
||||||
|
frame.setSize(LOAD_WIDTH, LOAD_HEIGHT); |
||||||
|
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); |
||||||
|
frame.setLocation(screenSize.width / 2 - LOAD_WIDTH / 2, screenSize.height / 2 - LOAD_HEIGHT / 2); |
||||||
|
frame.setResizable(false); |
||||||
|
// 设置布局为空
|
||||||
|
frame.setLayout(new BorderLayout(0, 0)); |
||||||
|
frame.getContentPane().add(label, BorderLayout.CENTER); |
||||||
|
frame.getContentPane().add(progressbar, BorderLayout.SOUTH); |
||||||
|
|
||||||
|
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); |
||||||
|
frame.addWindowListener(new WindowAdapter() { |
||||||
|
public void windowClosing(WindowEvent e) { |
||||||
|
//取消下载
|
||||||
|
flag = false; |
||||||
|
frame.dispose(); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
//是否可以连接服务器
|
||||||
|
private boolean connectToServer() { |
||||||
|
for (int i = 0; i < list.size(); i++) { |
||||||
|
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(){ |
||||||
|
int size = 0; |
||||||
|
for (int i = 0; i < list.size(); i++) { |
||||||
|
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 size; |
||||||
|
} |
||||||
|
|
||||||
|
//安装
|
||||||
|
private boolean install() { |
||||||
|
//开始时钟
|
||||||
|
timer.start(); |
||||||
|
//开始下载
|
||||||
|
Thread thread = new Thread(new Runnable() { |
||||||
|
@Override |
||||||
|
public void run() { |
||||||
|
installDependenceOnline(); |
||||||
|
} |
||||||
|
}); |
||||||
|
thread.start(); |
||||||
|
|
||||||
|
frame.setVisible(true); |
||||||
|
//等待下载线程处理结束
|
||||||
|
try { |
||||||
|
thread.join(); |
||||||
|
} catch (InterruptedException e) { |
||||||
|
FRContext.getLogger().error(e.getMessage()); |
||||||
|
return false; |
||||||
|
} |
||||||
|
//停止时钟
|
||||||
|
timer.stop(); |
||||||
|
return result; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 下载和安装不分开是因为,本地如果只安装好了一个依赖,下次就不需要重复下载了 |
||||||
|
* 如果下载依赖后不安装,则后面的插件会把前面的插件覆盖,故而下载好了一个安装一个 |
||||||
|
* @return |
||||||
|
* @throws Exception |
||||||
|
*/ |
||||||
|
private void downloadAndInstallPluginDependenceFile() throws Exception { |
||||||
|
totalBytesRead = 0; |
||||||
|
for (int i = 0; i < list.size(); i++) { |
||||||
|
PluginDependenceUnit dependenceUnit = list.get(i); |
||||||
|
httpClient = new HttpClient(SiteCenter.getInstance().acquireUrlByKind(dependenceUnit.getDependenceID())); |
||||||
|
if (httpClient.getResponseCode() == HttpURLConnection.HTTP_OK) { |
||||||
|
InputStream reader = httpClient.getResponseStream(); |
||||||
|
String temp = StableUtils.pathJoin(PluginHelper.DEPENDENCE_DOWNLOAD_PATH, PluginHelper.TEMP_FILE); |
||||||
|
StableUtils.makesureFileExist(new File(temp)); |
||||||
|
FileOutputStream writer = new FileOutputStream(temp); |
||||||
|
byte[] buffer = new byte[PluginConstants.BYTES_NUM]; |
||||||
|
int bytesRead = 0; |
||||||
|
while ((bytesRead = reader.read(buffer)) > 0 && flag) { |
||||||
|
writer.write(buffer, 0, bytesRead); |
||||||
|
buffer = new byte[PluginConstants.BYTES_NUM]; |
||||||
|
totalBytesRead += bytesRead; |
||||||
|
} |
||||||
|
reader.close(); |
||||||
|
writer.flush(); |
||||||
|
writer.close(); |
||||||
|
|
||||||
|
//下载被取消
|
||||||
|
if (flag == false) { |
||||||
|
result = false; |
||||||
|
throw new PluginDependenceException(Inter.getLocText("FR-Designer-Dependence_Install_Failed")); |
||||||
|
} |
||||||
|
|
||||||
|
//安装文件
|
||||||
|
IOUtils.unZipFilesGBK(temp, FRContext.getCurrentEnv().getPath() + dependenceUnit.getDependenceDir()); |
||||||
|
|
||||||
|
} else { |
||||||
|
result = false; |
||||||
|
throw new PluginDependenceException(Inter.getLocText("FR-Designer-Dependence_Install_Failed")); |
||||||
|
} |
||||||
|
} |
||||||
|
//所有依赖都正常安装下载完毕,则结果为true
|
||||||
|
result = true; |
||||||
|
} |
||||||
|
|
||||||
|
public void installDependenceOnline() { |
||||||
|
try { |
||||||
|
//下载并安装文件
|
||||||
|
downloadAndInstallPluginDependenceFile(); |
||||||
|
} catch (Exception e) { |
||||||
|
result = false; |
||||||
|
FRContext.getLogger().error(e.getMessage()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
//安装已经下载好的文件,如果是服务文件,则需要复制一份到安装目录下,
|
||||||
|
//以便切换远程时,使用本地的服务
|
||||||
|
//如果是服务器环境,则只会安装一份
|
||||||
|
private void installPluginDependenceFile(List<String> filePathList){ |
||||||
|
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) { |
||||||
|
if (e.getSource() == timer) { |
||||||
|
int value = progressbar.getValue(); |
||||||
|
if (value < totalSize) { |
||||||
|
progressbar.setValue(totalBytesRead); |
||||||
|
} else { |
||||||
|
timer.stop(); |
||||||
|
frame.dispose(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public void installOnline()throws PluginDependenceException { |
||||||
|
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 (!connectToServer()) { |
||||||
|
throw new PluginDependenceException(Inter.getLocText("FR-Designer-Dependence_Connect_Server_Error")); |
||||||
|
} |
||||||
|
//安装依赖环境
|
||||||
|
if (install()) { |
||||||
|
JOptionPane.showMessageDialog(null, Inter.getLocText("FR-Designer-Dependence_Install_Succeed") + "!!"); |
||||||
|
} else { |
||||||
|
throw new PluginDependenceException(Inter.getLocText("FR-Designer-Dependence_Install_Failed")); |
||||||
|
} |
||||||
|
}else {//不选择下载,则不安装图标插件
|
||||||
|
throw new PluginDependenceException(Inter.getLocText("FR-Designer-Dependence_Install_Failed")); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private String showFileLength() { |
||||||
|
return totalSize == -1 ? "NAN" : totalSize / Math.pow(10, 6) + ""; |
||||||
|
} |
||||||
|
} |
After Width: | Height: | Size: 105 KiB |
@ -0,0 +1,257 @@ |
|||||||
|
package com.fr.design.extra.ucenter; |
||||||
|
|
||||||
|
import com.fr.base.FRContext; |
||||||
|
import com.fr.general.SiteCenter; |
||||||
|
|
||||||
|
import java.io.BufferedReader; |
||||||
|
import java.io.IOException; |
||||||
|
import java.io.InputStream; |
||||||
|
import java.io.InputStreamReader; |
||||||
|
import java.io.OutputStream; |
||||||
|
import java.net.Socket; |
||||||
|
import java.net.URL; |
||||||
|
import java.util.HashMap; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by lp on 2016/9/9. |
||||||
|
*/ |
||||||
|
public class Client extends PHPFunctions{ |
||||||
|
|
||||||
|
public static String UC_IP = ""; |
||||||
|
public static String UC_API = ""; |
||||||
|
public static String UC_CONNECT = ""; |
||||||
|
public static String UC_KEY = "Rc85U37411p4zdvcedm8D4t4D3l9Sa42H0kd98Gbd82aA99a61S2Z5LbQ9u430M0"; |
||||||
|
public static String UC_APPID = "4"; |
||||||
|
public static String UC_CLIENT_RELEASE = "20090212"; |
||||||
|
public static String UC_ROOT = ""; |
||||||
|
public static String UC_API_FUNC = UC_CONNECT.equals("mysql") ? "uc_api_mysql" : "uc_api_post"; |
||||||
|
|
||||||
|
public String uc_user_login(String username, String password) { |
||||||
|
return uc_user_login(username, password, 0, 0); |
||||||
|
} |
||||||
|
|
||||||
|
public String uc_user_login(String username, String password, int isuid, int checkques) { |
||||||
|
return uc_user_login(username, password, isuid, checkques, "", ""); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 用户登录 |
||||||
|
* @param username 用户名 |
||||||
|
* @param password 密码 |
||||||
|
* @param isuid 是否为uid |
||||||
|
* @param checkques 是否使用安全问题 |
||||||
|
* @param questionid 安全提问 |
||||||
|
* @param answer 安全提问答案 |
||||||
|
* @return array (uid/status, username, password, email) |
||||||
|
*/ |
||||||
|
public String uc_user_login(String username, String password, int isuid, int checkques, String questionid, String answer) { |
||||||
|
Map<String, Object> args = new HashMap<>(); |
||||||
|
args.put("username", username); |
||||||
|
args.put("password", password); |
||||||
|
args.put("isuid", isuid); |
||||||
|
args.put("checkques", checkques); |
||||||
|
args.put("questionid", questionid); |
||||||
|
args.put("answer", answer); |
||||||
|
String $return = call_user_func(UC_API_FUNC, "user", "login", args); |
||||||
|
return UC_CONNECT.equals("mysql") ? $return : $return; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 拼接发送的post请求 |
||||||
|
* @param module 模块 |
||||||
|
* @param action 操作模式 |
||||||
|
* @param arg 参数 |
||||||
|
* @return 发送的请求加密内容 |
||||||
|
*/ |
||||||
|
public String uc_api_post(String module, String action, Map<String, Object> arg) { |
||||||
|
StringBuffer str = new StringBuffer(); |
||||||
|
String sep = ""; |
||||||
|
for (String k : arg.keySet()) { |
||||||
|
Object v = arg.get(k); |
||||||
|
k = urlencode(k); |
||||||
|
if (v.getClass().isAssignableFrom(Map.class)) { |
||||||
|
String s2 = ""; |
||||||
|
String sep2 = ""; |
||||||
|
for (String k2 : ((Map<String, Object>) v).keySet()) { |
||||||
|
Object v2 = ((Map<String, Object>) v).get(k2); |
||||||
|
k2 = urlencode(k2); |
||||||
|
s2 += sep2 + "{" + k + "}[" + k2 + "]=" + urlencode(String.valueOf(v2)); |
||||||
|
sep2 = "&"; |
||||||
|
} |
||||||
|
str.append(sep).append(s2); |
||||||
|
} else { |
||||||
|
str.append(sep).append(k).append("=").append(urlencode(String.valueOf(v), "GBK")); |
||||||
|
} |
||||||
|
sep = "&"; |
||||||
|
} |
||||||
|
String $postdata = uc_api_requestdata(module, action, str.toString(), ""); |
||||||
|
UC_API = SiteCenter.getInstance().acquireUrlByKind("bbs.ucapi"); |
||||||
|
UC_IP = SiteCenter.getInstance().acquireUrlByKind("bbs.ip"); |
||||||
|
return uc_fopen2(UC_API + "/index.php", 500000, $postdata, "", true, UC_IP, 20, true); |
||||||
|
} |
||||||
|
|
||||||
|
public String uc_api_mysql(String model, String action, Map args) { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
|
||||||
|
public String uc_api_input(String data) { |
||||||
|
String str = urlencode(uc_authcode(data + "&agent=" + md5("") + "&time=" + time(), "ENCODE", UC_KEY), "GBK"); |
||||||
|
return str; |
||||||
|
} |
||||||
|
|
||||||
|
protected String uc_api_requestdata(String module, String action, String arg, String extra) { |
||||||
|
String input = uc_api_input(arg); |
||||||
|
String post = "m=" + module + "&a=" + action + "&inajax=2&release=" + UC_CLIENT_RELEASE + "&input=" + input + "&appid=" + UC_APPID + extra; |
||||||
|
return post; |
||||||
|
} |
||||||
|
|
||||||
|
public String uc_authcode(String string, String operation, String key) { |
||||||
|
return uc_authcode(string, operation, key, 0); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 内容加密 |
||||||
|
* @param string 原文 |
||||||
|
* @param operation decode或者encode |
||||||
|
* @param key 密钥 |
||||||
|
* @param expiry 密文有效时限 |
||||||
|
* @return 加密之后的原文 |
||||||
|
*/ |
||||||
|
public String uc_authcode(String string, String operation, String key, int expiry) { |
||||||
|
int ckey_length = 4; |
||||||
|
key = md5(key != null ? key : UC_KEY); |
||||||
|
String keya = md5(substr(key, 0, 16)); |
||||||
|
String keyb = md5(substr(key, 16, 16)); |
||||||
|
String keyc = ckey_length > 0 ? (operation.equals("DECODE") ? substr(string, 0, ckey_length) : substr(md5(microtime()), - ckey_length)) : ""; |
||||||
|
String cryptkey = keya + md5(keya + keyc); |
||||||
|
int key_length = cryptkey.length(); |
||||||
|
string = operation.equals("DECODE") ? base64_decode(substr(string, ckey_length)) : sprintf("%010d", expiry > 0 ? expiry + time() : 0) + substr(md5(string + keyb), 0, 16) + string; |
||||||
|
int string_length = string.length(); |
||||||
|
StringBuffer result1 = new StringBuffer(); |
||||||
|
int[] box = new int[256]; |
||||||
|
for (int i = 0; i < 256; i++) { |
||||||
|
box[i] = i; |
||||||
|
} |
||||||
|
int[] rndkey = new int[256]; |
||||||
|
for (int i = 0; i <= 255; i++) { |
||||||
|
rndkey[i] = (int) cryptkey.charAt(i % key_length); |
||||||
|
} |
||||||
|
int j = 0; |
||||||
|
for (int i = 0; i < 256; i++) { |
||||||
|
j = (j + box[i] + rndkey[i]) % 256; |
||||||
|
int tmp = box[i]; |
||||||
|
box[i] = box[j]; |
||||||
|
box[j] = tmp; |
||||||
|
} |
||||||
|
j = 0; |
||||||
|
int a = 0; |
||||||
|
for (int i = 0; i < string_length; i++) { |
||||||
|
a = (a + 1) % 256; |
||||||
|
j = (j + box[a]) % 256; |
||||||
|
int tmp = box[a]; |
||||||
|
box[a] = box[j]; |
||||||
|
box[j] = tmp; |
||||||
|
result1.append((char) (((int) string.charAt(i)) ^ (box[(box[a] + box[j]) % 256]))); |
||||||
|
} |
||||||
|
if (operation.equals("DECODE")) { |
||||||
|
String result = result1.toString(); |
||||||
|
try { |
||||||
|
result = new String(result.getBytes("iso-8859-1"), "gbk"); |
||||||
|
} catch (Exception e) { |
||||||
|
result = result1.substring(0, result1.length()); |
||||||
|
} |
||||||
|
if ((Integer.parseInt(substr(result.toString(), 0, 10)) == 0 || Long.parseLong(substr(result.toString(), 0, 10)) - time() > 0) && substr(result.toString(), 10, 16).equals(substr(md5(substr(result.toString(), 26) + keyb), 0, 16))) { |
||||||
|
return substr(result.toString(), 26); |
||||||
|
} else { |
||||||
|
return ""; |
||||||
|
} |
||||||
|
} else { |
||||||
|
return keyc + base64_encode(result1.toString()).replaceAll("=", ""); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
protected String uc_fopen2(String url, int limit, String post, String cookie, boolean bysocket, String ip, int timeout, boolean block) { |
||||||
|
url += url.indexOf("?") > 0 ? "&" : "?" + "__times__=1"; |
||||||
|
return uc_fopen(url, limit, post, cookie, bysocket, ip, timeout, block); |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* 本地模网络请求取数据 |
||||||
|
* @param url 打开的url |
||||||
|
* @param limit 取返回的数据的长度 |
||||||
|
* @param post 要发送的 POST 数据,如uid=1&password=1234 |
||||||
|
* @param cookie 要模拟的 COOKIE 数据,如uid=123&auth=a2323sd2323 |
||||||
|
* @param bysocket TRUE/FALSE 是否通过SOCKET打开 |
||||||
|
* @param ip IP地址 |
||||||
|
* @param timeout 连接超时时间 |
||||||
|
* @param block 是否为阻塞模式 defaul valuet:true |
||||||
|
* @return 取到的字符串 |
||||||
|
*/ |
||||||
|
protected String uc_fopen(String url, int limit, String post, String cookie, boolean bysocket, String ip, int timeout, boolean block) { |
||||||
|
String result = ""; |
||||||
|
URL matches; |
||||||
|
String host = ""; |
||||||
|
String path = ""; |
||||||
|
int port = 80; |
||||||
|
try { |
||||||
|
matches = new URL(url); |
||||||
|
host = matches.getHost(); |
||||||
|
path = matches.getPath() != null ? matches.getPath() + (matches.getQuery() != null ? "?" + matches.getQuery() : "") : "/"; |
||||||
|
if (matches.getPort() > 0) port = matches.getPort(); |
||||||
|
} catch (Exception e1) { |
||||||
|
FRContext.getLogger().info(e1.getMessage()); |
||||||
|
} |
||||||
|
StringBuffer out = new StringBuffer(); |
||||||
|
if (post != null && post.length() > 0) { |
||||||
|
out.append("POST ").append(path).append(" HTTP/1.0\r\n"); |
||||||
|
out.append("Accept: */*\r\n"); |
||||||
|
out.append("Accept-Language: zh-cn\r\n"); |
||||||
|
out.append("Content-Type: application/x-www-form-urlencoded\r\n"); |
||||||
|
out.append("User-Agent: \r\n"); |
||||||
|
out.append("Host: ").append(host).append("\r\n"); |
||||||
|
out.append("Content-Length: ").append(post.length()).append("\r\n"); |
||||||
|
out.append("Connection: Close\r\n"); |
||||||
|
out.append("Cache-Control: no-cache\r\n"); |
||||||
|
out.append("Cookie: \r\n\r\n"); |
||||||
|
out.append(post); |
||||||
|
} else { |
||||||
|
out.append("GET $path HTTP/1.0\r\n"); |
||||||
|
out.append("Accept: */*\r\n"); |
||||||
|
out.append("Accept-Language: zh-cn\r\n"); |
||||||
|
out.append("User-Agent: Java/1.5.0_01\r\n"); |
||||||
|
out.append("Host: $host\r\n"); |
||||||
|
out.append("Connection: Close\r\n"); |
||||||
|
out.append("Cookie: $cookie\r\n\r\n"); |
||||||
|
} |
||||||
|
try { |
||||||
|
Socket fp = new Socket(ip != null && ip.length() > 10 ? ip : host, port); |
||||||
|
if (!fp.isConnected()) { |
||||||
|
return ""; |
||||||
|
} else { |
||||||
|
OutputStream os = fp.getOutputStream(); |
||||||
|
os.write(out.toString().getBytes()); |
||||||
|
InputStream ins = fp.getInputStream(); |
||||||
|
BufferedReader reader = new BufferedReader(new InputStreamReader(ins, "iso-8859-1")); |
||||||
|
while (true) { |
||||||
|
String header = reader.readLine(); |
||||||
|
if (header == null || header.equals("") || header == "\r\n" || header == "\n") { |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
while (true) { |
||||||
|
String data = reader.readLine(); |
||||||
|
if (data == null || data.equals("")) { |
||||||
|
break; |
||||||
|
} else { |
||||||
|
result += data; |
||||||
|
} |
||||||
|
} |
||||||
|
fp.close(); |
||||||
|
} |
||||||
|
} catch (IOException e) { |
||||||
|
FRContext.getLogger().info(e.getMessage()); |
||||||
|
} |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,113 @@ |
|||||||
|
package com.fr.design.extra.ucenter; |
||||||
|
|
||||||
|
import java.io.UnsupportedEncodingException; |
||||||
|
import java.net.URLEncoder; |
||||||
|
import java.security.MessageDigest; |
||||||
|
import java.security.NoSuchAlgorithmException; |
||||||
|
import java.util.Map; |
||||||
|
import com.fr.base.Base64; |
||||||
|
import com.fr.base.FRContext; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by lp on 2016/9/9. |
||||||
|
*/ |
||||||
|
public abstract class PHPFunctions { |
||||||
|
|
||||||
|
protected String urlencode(String value){ |
||||||
|
return URLEncoder.encode(value); |
||||||
|
} |
||||||
|
|
||||||
|
protected String md5(String input){ |
||||||
|
MessageDigest md; |
||||||
|
try { |
||||||
|
md = MessageDigest.getInstance("MD5"); |
||||||
|
} catch (NoSuchAlgorithmException e) { |
||||||
|
FRContext.getLogger().info(e.getMessage()); |
||||||
|
return ""; |
||||||
|
} |
||||||
|
return byte2hex(md.digest(input.getBytes())); |
||||||
|
} |
||||||
|
|
||||||
|
protected String md5(long input){ |
||||||
|
return md5(String.valueOf(input)); |
||||||
|
} |
||||||
|
|
||||||
|
protected String base64_decode(String input){ |
||||||
|
try { |
||||||
|
return new String(Base64.decode(input)); |
||||||
|
} catch (Exception e) { |
||||||
|
FRContext.getLogger().info(e.getMessage()); |
||||||
|
return ""; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
protected String base64_encode(String input){ |
||||||
|
try { |
||||||
|
return new String(Base64.encode(input.getBytes("iso-8859-1"))); |
||||||
|
} catch (Exception e) { |
||||||
|
FRContext.getLogger().info(e.getMessage()); |
||||||
|
return ""; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
protected String byte2hex(byte[] b) { |
||||||
|
StringBuffer hs = new StringBuffer(); |
||||||
|
String stmp = ""; |
||||||
|
for (int n = 0; n < b.length; n++) { |
||||||
|
stmp = (java.lang.Integer.toHexString(b[n] & 0XFF)); |
||||||
|
if (stmp.length() == 1) |
||||||
|
hs.append("0").append(stmp); |
||||||
|
else |
||||||
|
hs.append(stmp); |
||||||
|
} |
||||||
|
return hs.toString(); |
||||||
|
} |
||||||
|
|
||||||
|
protected String substr(String input,int begin, int length){ |
||||||
|
return input.substring(begin, begin+length); |
||||||
|
} |
||||||
|
|
||||||
|
protected String substr(String input,int begin){ |
||||||
|
if(begin > 0){ |
||||||
|
return input.substring(begin); |
||||||
|
}else{ |
||||||
|
return input.substring(input.length()+ begin); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
protected long microtime(){ |
||||||
|
return System.currentTimeMillis(); |
||||||
|
} |
||||||
|
|
||||||
|
protected long time(){ |
||||||
|
return System.currentTimeMillis()/1000; |
||||||
|
} |
||||||
|
|
||||||
|
protected String sprintf(String format, long input){ |
||||||
|
String temp = "0000000000"+input; |
||||||
|
return temp.substring(temp.length()-10); |
||||||
|
} |
||||||
|
|
||||||
|
protected String call_user_func(String function, String model, String action, Map<String,Object> args){ |
||||||
|
if("uc_api_mysql".equals(function)){ |
||||||
|
return this.uc_api_mysql(model, action, args); |
||||||
|
} |
||||||
|
if("uc_api_post".equals(function)){ |
||||||
|
return this.uc_api_post(model, action, args); |
||||||
|
} |
||||||
|
return ""; |
||||||
|
} |
||||||
|
|
||||||
|
public abstract String uc_api_post(String $module, String $action, Map<String,Object> $arg ); |
||||||
|
|
||||||
|
public abstract String uc_api_mysql(String $model, String $action, Map $args); |
||||||
|
|
||||||
|
protected String urlencode(String value,String code){ |
||||||
|
try { |
||||||
|
return URLEncoder.encode(value,code); |
||||||
|
} catch (UnsupportedEncodingException e) { |
||||||
|
FRContext.getLogger().info(e.getMessage()); |
||||||
|
} |
||||||
|
return ""; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,39 @@ |
|||||||
|
package com.fr.design.extra.ucenter; |
||||||
|
|
||||||
|
import com.fr.base.FRContext; |
||||||
|
import com.sun.org.apache.xerces.internal.parsers.DOMParser; |
||||||
|
import org.w3c.dom.Document; |
||||||
|
import org.w3c.dom.NodeList; |
||||||
|
import org.xml.sax.InputSource; |
||||||
|
import org.xml.sax.SAXException; |
||||||
|
|
||||||
|
import java.io.IOException; |
||||||
|
import java.io.StringReader; |
||||||
|
import java.util.LinkedList; |
||||||
|
|
||||||
|
/** |
||||||
|
* Created by lp on 2016/9/9. |
||||||
|
*/ |
||||||
|
public class XMLHelper { |
||||||
|
|
||||||
|
public static LinkedList<String> uc_unserialize(String input){ |
||||||
|
|
||||||
|
LinkedList<String> result = new LinkedList<String>(); |
||||||
|
DOMParser parser = new DOMParser(); |
||||||
|
try { |
||||||
|
parser.parse(new InputSource(new StringReader(input))); |
||||||
|
Document doc = parser.getDocument(); |
||||||
|
NodeList nl = doc.getChildNodes().item(0).getChildNodes(); |
||||||
|
int length = nl.getLength(); |
||||||
|
for(int i=0;i<length;i++){ |
||||||
|
if(nl.item(i).getNodeType()==Document.ELEMENT_NODE) |
||||||
|
result.add(nl.item(i).getTextContent()); |
||||||
|
} |
||||||
|
} catch (SAXException e) { |
||||||
|
FRContext.getLogger().info(e.getMessage()); |
||||||
|
} catch (IOException e1) { |
||||||
|
FRContext.getLogger().info(e1.getLocalizedMessage()); |
||||||
|
} |
||||||
|
return result; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,68 @@ |
|||||||
|
package com.fr.design.gui.itableeditorpane; |
||||||
|
|
||||||
|
import com.fr.design.editor.ValueEditorPane; |
||||||
|
import com.fr.design.editor.ValueEditorPaneFactory; |
||||||
|
|
||||||
|
import javax.swing.*; |
||||||
|
import javax.swing.event.CellEditorListener; |
||||||
|
import javax.swing.event.ChangeEvent; |
||||||
|
import javax.swing.table.TableCellEditor; |
||||||
|
import java.awt.*; |
||||||
|
|
||||||
|
/** |
||||||
|
* 全部是公式编辑的model |
||||||
|
* Coder: zack |
||||||
|
* Date: 2016/8/31 |
||||||
|
* Time: 18:58 |
||||||
|
*/ |
||||||
|
public class UIArrayFormulaTableModel extends UIArrayTableModel { |
||||||
|
public UIArrayFormulaTableModel(String[] s, int[] array) { |
||||||
|
super(s, array); |
||||||
|
setDefaultEditors(); |
||||||
|
} |
||||||
|
|
||||||
|
public void setDefaultEditors() { |
||||||
|
for (int i = 0; i < getColumnCount(); i++) { |
||||||
|
setDefaultEditor(Object.class, new FormulaValueEditor()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private class FormulaValueEditor extends AbstractCellEditor implements TableCellEditor { |
||||||
|
private static final long serialVersionUID = 1L; |
||||||
|
private ValueEditorPane editor; |
||||||
|
|
||||||
|
public FormulaValueEditor() { |
||||||
|
|
||||||
|
editor = ValueEditorPaneFactory.createFormulaValueEditorPane(); |
||||||
|
|
||||||
|
this.addCellEditorListener(new CellEditorListener() { |
||||||
|
|
||||||
|
@Override |
||||||
|
public void editingCanceled(ChangeEvent e) { |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public void editingStopped(ChangeEvent e) { |
||||||
|
if (table.getSelectedRow() == -1 || table.getSelectedColumn() == -1) { |
||||||
|
return; |
||||||
|
} |
||||||
|
Object[] para = getList().get(table.getSelectedRow()); |
||||||
|
para[table.getSelectedColumn()] = getCellEditorValue(); |
||||||
|
fireTableDataChanged(); |
||||||
|
} |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { |
||||||
|
editor.clearComponentsData(); |
||||||
|
editor.populate(value == null ? "" : value); |
||||||
|
return editor; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
public Object getCellEditorValue() { |
||||||
|
return editor.update(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue