package bs.util.tool.commongui.plugins;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
import java.io.IOException;
import java.net.URISyntaxException;
import java.util.Properties;
import javax.swing.JCheckBox;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import bs.util.io.PropertiesUtils;
import bs.util.tool.commongui.GuiJPanel;
import bs.util.tool.commongui.GuiUtils;
import bs.util.web.tool.eclipse.ProjectPropertiesDeal;
import bs.util.web.tool.eclipse.ProjectPropertiesDealInterface;
/**
* Auto Build Ant构建脚本.
*/
public class AntScriptAutoBuild extends GuiJPanel {
private static final long serialVersionUID = 1L;
/**
* Project路径表单.
*/
private JTextField projectPathTextField = new JTextField();
/**
* Project路径选择.
*/
private JFileChooser projectPath_Chooser = new JFileChooser();
/**
* 是否备份已存在的同名构建属性脚本及脚本.
*/
private boolean isBak = true;
/**
* Ant 任务.
*/
private String taskNames = "";
/**
* 运行日志输出文本域.
*/
private JTextArea runLogTextArea = createJTextArea(GuiUtils.font14_un);
public AntScriptAutoBuild() {
// 主面板:边界布局,分North、Center两部分,North用于放置条件控件,Center放置运行日志输出
setLayout(new BorderLayout());
// 输入条件/操作
JPanel inputPanel = new JPanel(new BorderLayout());
// Project路径选择/填写
JPanel fileChooPanel = new JPanel(new BorderLayout());
addJLabel(fileChooPanel, " Project路径: ", GuiUtils.font14_cn, BorderLayout.WEST);
JPanel pathPanel = new JPanel(new BorderLayout());
pathPanel.add(new JPanel(), BorderLayout.NORTH);
addJTextField(pathPanel, projectPathTextField, GuiUtils.font14_un, BorderLayout.CENTER);
pathPanel.add(new JPanel(), BorderLayout.SOUTH);
fileChooPanel.add(pathPanel, BorderLayout.CENTER);
JPanel buttonFlowPanel = new JPanel(new FlowLayout(FlowLayout.LEADING));
addJButton(buttonFlowPanel, "浏览", "", GuiUtils.font12_cn,
buttonBrowseListener(projectPath_Chooser, projectPathTextField));
addJCheckBox(buttonFlowPanel, "备份已存在脚本", true, GuiUtils.font12_cn, new ActionListener() {
public void actionPerformed(ActionEvent event) {
isBak = ((JCheckBox) event.getSource()).isSelected();
}
});
// 按钮
addJButton(buttonFlowPanel, "Build", "", GuiUtils.font14b_cn, new MouseListener() {
public void mouseReleased(MouseEvent event) {
String projectPath = projectPathTextField.getText().trim();
if (!new File(projectPath).exists()) {
showMessage("Project路径不存在!", "警告", JOptionPane.WARNING_MESSAGE);
return;
}
try {
bs.util.tool.ant.AntScriptAutoBuild build = new bs.util.tool.ant.AntScriptAutoBuild();
build.setIsBak(isBak);
ProjectPropertiesDealInterface propertiesDeal = new ProjectPropertiesDeal();
if (!propertiesDeal.isJavaOrJavaWebEclipseProject(projectPath)) {
runLogTextArea.append("Error: The Path \'" + projectPath
+ "\' not has a Eclipse Java Project, Dynamic Web Project or MyEclipse Web Project.");
return;
}
propertiesDeal.setRunLogTextArea(runLogTextArea);
propertiesDeal.deal(projectPath);
build.setRunLogTextArea(runLogTextArea);
build.autoBuild(projectPath, propertiesDeal, taskNames);
} catch (IOException e) {
showExceptionMessage(e);
} catch (URISyntaxException e) {
showExceptionMessage(e);
}
}
public void mousePressed(MouseEvent e) {
runLogTextArea.setText("");
}
public void mouseExited(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseClicked(MouseEvent e) {
}
});
// Project路径选择控件
projectPath_Chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); // 仅可选择文件夹
fileChooPanel.add(buttonFlowPanel, BorderLayout.EAST);
inputPanel.add(fileChooPanel, BorderLayout.NORTH);
int gridRow = 5;
int gridCol = 6;
// Ant Task任务JPanel
JPanel taskGridPanel = new JPanel(new GridLayout(gridRow, gridCol));
String antTaskPropsFile = "conf/AntScriptAutoBuild/conf.properties";
try {
Properties taskConfProperties = PropertiesUtils.getProperties(GuiUtils.getActualPath(antTaskPropsFile));
String baseTask = taskConfProperties.getProperty("baseTask").trim();
String javaTask = taskConfProperties.getProperty("javaTask").trim();
String javaWebTask = taskConfProperties.getProperty("javaWebTask").trim();
String generalTask = taskConfProperties.getProperty("generalTask").trim();
String specialTask = taskConfProperties.getProperty("specialTask").trim();
addTaskCheckBox(taskGridPanel, " Java Base", baseTask + "," + javaTask, baseTask, gridCol);
addTaskCheckBox(taskGridPanel, " Java Web ", javaWebTask, baseTask, gridCol);
addTaskCheckBox(taskGridPanel, " General ", generalTask, baseTask, gridCol);
addTaskCheckBox(taskGridPanel, " Special ", specialTask, baseTask, gridCol);
} catch (IOException e) {
logLoadPropertiesException(antTaskPropsFile, e);
}
inputPanel.add(taskGridPanel, BorderLayout.CENTER);
add(inputPanel, BorderLayout.NORTH);
add(new JScrollPane(runLogTextArea), BorderLayout.CENTER);
}
/**
* 添加Ant Task JCheckBox选择框.
*/
private void addTaskCheckBox(JPanel taskGridPanel, String labelName, String taskNames, String baseTask, int gridCol) {
addJLabel(taskGridPanel, labelName + " 任务:", GuiUtils.font14_cn);
String[] tasks = taskNames.split(",");
int row = tasks.length / (gridCol - 1);
row = row * (gridCol - 1) == tasks.length ? row : row + 1;
int num = row * gridCol - 1;
for (int i = 0; i < num; i++) {
String title = "";
if (i < tasks.length + i / (gridCol - 1) && !(i % (gridCol - 1) == 0 && i != 0)) {
title = tasks[i - i / (gridCol - 1)];
}
if (title.equals("")) {
addJLabel(taskGridPanel, title, GuiUtils.font14_cn);
} else {
boolean isSelected = false;
if (("," + baseTask + ",").contains("," + title + ",") || "jar".equals(title)) {
isSelected = true;
}
JCheckBox taskBox = createJCheckBox(title, isSelected, GuiUtils.font16, new ActionListener() {
public void actionPerformed(ActionEvent event) {
JCheckBox checkBox = (JCheckBox) event.getSource();
setTaskNames(checkBox.getText(), checkBox.isSelected());
}
});
if (isSelected) {
if ("base".equals(title)) {
taskBox.setEnabled(false);
}
this.taskNames += "," + title;
}
taskGridPanel.add(taskBox);
}
}
}
/**
* 设置被选择的Ant任务.
*/
private void setTaskNames(String taskName, boolean add) {
if (("," + this.taskNames + ",").contains("," + taskName + ",")) {
if (!add) {
this.taskNames = ("," + this.taskNames + ",").replace("," + taskName + ",", "");
}
} else {
if (add) {
this.taskNames = this.taskNames + "," + taskName;
}
}
if (this.taskNames.startsWith(",")) {
this.taskNames = this.taskNames.substring(1);
}
}
}