From fef8c6686c8c18691f3fa3bb3bb6ae8a8f36efed Mon Sep 17 00:00:00 2001
From: neil <459208047@qq.com>
Date: Fri, 26 Apr 2019 15:40:38 +0800
Subject: [PATCH] ct
---
.../com/fr/design/DesignerEnvManager.java | 53 +-
.../design/actions/file/PreferencePane.java | 120 +--
.../ui/dialog/UpdateMainDialog.java | 825 ++++++++++++++++++
.../main/java/com/fr/design/ui/Assistant.java | 1 +
.../com/fr/design/ui/EmbProtocolHandler.java | 34 +-
.../java/com/fr/design/ui/ModernUIPane.java | 82 +-
.../com/fr/design/ui/InitNameSpace.js | 6 +-
.../java/com/fr/design/ui/FineUIDemo.java | 6 +-
.../com/fr/design/ui/ModernUIPaneTest.java | 9 +-
.../test/resources/com/fr/design/ui/demo.html | 6 +
.../mainframe/InformationCollector.java | 282 +++++-
.../src/main/java/com/fr/start/Designer.java | 61 +-
12 files changed, 1238 insertions(+), 247 deletions(-)
create mode 100644 designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java
diff --git a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java
index bd464d77e0..66a516554f 100644
--- a/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java
+++ b/designer-base/src/main/java/com/fr/design/DesignerEnvManager.java
@@ -14,8 +14,6 @@ import com.fr.design.env.DesignerWorkspaceType;
import com.fr.design.env.LocalDesignerWorkspaceInfo;
import com.fr.design.env.RemoteDesignerWorkspaceInfo;
import com.fr.design.file.HistoryTemplateListPane;
-import com.fr.design.mainframe.vcs.VcsConfigManager;
-import com.fr.design.update.push.DesignerPushUpdateConfigManager;
import com.fr.design.style.color.ColorSelectConfigManager;
import com.fr.design.utils.DesignUtils;
import com.fr.file.FILEFactory;
@@ -148,9 +146,6 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter {
*/
private AlphaFineConfigManager alphaFineConfigManager = new AlphaFineConfigManager();
- private DesignerPushUpdateConfigManager designerPushUpdateConfigManager = DesignerPushUpdateConfigManager.getInstance();
-
- private VcsConfigManager vcsConfigManager = VcsConfigManager.getInstance();
public static final String CAS_CERTIFICATE_PATH = "certificatePath";
@@ -182,6 +177,8 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter {
public static DesignerEnvManager getEnvManager(boolean needCheckEnv) {
if (designerEnvManager == null) {
designerEnvManager = new DesignerEnvManager();
+ //REPORT-15332有一个国际化调用比较早,需要在这边就设置好locale,由于后台GeneralContext默认是China
+ GeneralContext.setLocale(designerEnvManager.getLanguage());
try {
XMLTools.readFileXML(designerEnvManager, designerEnvManager.getDesignerEnvFile());
} catch (Exception e) {
@@ -696,14 +693,6 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter {
this.joinProductImprove = joinProductImprove;
}
- public boolean isAutoPushUpdateEnabled() {
- return designerPushUpdateConfigManager.isAutoPushUpdateEnabled();
- }
-
- public void setAutoPushUpdateEnabled(boolean autoPushUpdateEnabled) {
- designerPushUpdateConfigManager.setAutoPushUpdateEnabled(autoPushUpdateEnabled);
- }
-
/**
* 是否磁盘空间参数
*
@@ -1344,7 +1333,6 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter {
}
}
-
private void readJettyPort(XMLableReader reader) {
String tmpVal;
if ((tmpVal = reader.getElementValue()) != null) {
@@ -1489,18 +1477,14 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter {
readUUID(reader);
} else if ("status".equals(name)) {
readActiveStatus(reader);
- } else if (ComparatorUtils.equals(CAS_PARAS, name)) {
+ } else if (CAS_PARAS.equals(name)) {
readHttpsParas(reader);
- } else if (name.equals("AlphaFineConfigManager")) {
+ } else if ("AlphaFineConfigManager".equals(name)) {
readAlphaFineAttr(reader);
- } else if (name.equals("RecentColors")) {
+ } else if ("RecentColors".equals(name)) {
readRecentColor(reader);
} else if ("OpenDebug".equals(name)) {
readOpenDebug(reader);
- } else if (name.equals(DesignerPushUpdateConfigManager.XML_TAG)) {
- readDesignerPushUpdateAttr(reader);
- } else if (name.equals(vcsConfigManager.XML_TAG)) {
- readVcsAttr(reader);
} else {
readLayout(reader, name);
}
@@ -1683,14 +1667,6 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter {
checkRecentOpenedFileNum();
}
- private void readDesignerPushUpdateAttr(XMLableReader reader) {
- reader.readXMLObject(designerPushUpdateConfigManager);
- }
-
- private void readVcsAttr(XMLableReader reader) {
- reader.readXMLObject(vcsConfigManager);
- }
-
/**
* Write XML.
* The method will be invoked when save data to XML file.
@@ -1714,8 +1690,6 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter {
writeAlphaFineAttr(writer);
writeRecentColor(writer);
writeOpenDebug(writer);
- writeDesignerPushUpdateAttr(writer);
- writeVcsAttr(writer);
writer.end();
}
@@ -1739,6 +1713,7 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter {
}
}
+
//写入uuid
private void writeUUID(XMLPrintWriter writer) {
writer.startTAG("uuid");
@@ -1954,20 +1929,4 @@ public class DesignerEnvManager implements XMLReadable, XMLWriter {
.end();
}
- private void writeDesignerPushUpdateAttr(XMLPrintWriter writer) {
- this.designerPushUpdateConfigManager.writeXML(writer);
- }
-
- private void writeVcsAttr(XMLPrintWriter writer) {
- this.vcsConfigManager.writeXML(writer);
- }
-
-
- public VcsConfigManager getVcsConfigManager() {
- return vcsConfigManager;
- }
-
- public void setVcsConfigManager(VcsConfigManager vcsConfigManager) {
- this.vcsConfigManager = vcsConfigManager;
- }
}
diff --git a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java
index 9293500812..ae6ba4c250 100644
--- a/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java
+++ b/designer-base/src/main/java/com/fr/design/actions/file/PreferencePane.java
@@ -2,6 +2,7 @@ package com.fr.design.actions.file;
import com.fr.base.BaseUtils;
import com.fr.config.Configuration;
+import com.fr.config.ServerPreferenceConfig;
import com.fr.design.DesignerEnvManager;
import com.fr.design.RestartHelper;
import com.fr.design.dialog.BasicDialog;
@@ -23,9 +24,6 @@ import com.fr.design.layout.FRGUIPaneFactory;
import com.fr.design.layout.TableLayout;
import com.fr.design.layout.TableLayoutHelper;
import com.fr.design.mainframe.DesignerContext;
-import com.fr.design.mainframe.vcs.VcsConfigManager;
-import com.fr.design.mainframe.vcs.common.VcsHelper;
-import com.fr.design.update.push.DesignerPushUpdateManager;
import com.fr.design.utils.gui.GUICoreUtils;
import com.fr.design.widget.FRWidgetFactory;
import com.fr.general.ComparatorUtils;
@@ -43,8 +41,6 @@ import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.KeyStroke;
import javax.swing.SwingUtilities;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
@@ -122,6 +118,7 @@ public class PreferencePane extends BasicPane {
private KeyStroke shortCutKeyStore = null;
private UIColorButton gridLineColorTBButton;
+
private UIColorButton paginationLineColorTBButton;
private UICheckBox supportCellEditorDefCheckBox;
@@ -136,16 +133,8 @@ public class PreferencePane extends BasicPane {
private UICheckBox oracleSpace;
private UISpinner cachingTemplateSpinner;
private UICheckBox openDebugComboBox;
- private UICheckBox joinProductImproveCheckBox;
- private UICheckBox autoPushUpdateCheckBox;
-
- private UICheckBox vcsEnableCheckBox;
- private UICheckBox saveCommitCheckBox;
- private UICheckBox useIntervalCheckBox;
- private IntegerEditor saveIntervalEditor;
- private UILabel remindVcsLabel;
-
-
+ private UICheckBox useOptimizedUPMCheckbox;
+ private UICheckBox joinProductImprove;
public PreferencePane() {
this.initComponents();
@@ -163,11 +152,11 @@ public class PreferencePane extends BasicPane {
jtabPane.addTab(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Advanced"), advancePane);
contentPane.add(jtabPane, BorderLayout.NORTH);
+
createFunctionPane(generalPane);
createEditPane(generalPane);
createGuiOfGridPane(generalPane);
createColorSettingPane(generalPane);
- createVcsSettingPane(generalPane);
// ConfPane
JPanel confLocationPane = FRGUIPaneFactory.createX_AXISBoxInnerContainer_S_Pane();
@@ -190,14 +179,15 @@ public class PreferencePane extends BasicPane {
debuggerPane.add(openDebugComboBox, BorderLayout.CENTER);
advancePane.add(debuggerPane);
- JPanel improvePane = FRGUIPaneFactory.createVerticalTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Product_Improve"));
- joinProductImproveCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Join_Product_Improve"));
- improvePane.add(joinProductImproveCheckBox);
+ JPanel upmSelectorPane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Update_Plugin_Manager"));
+ useOptimizedUPMCheckbox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Use_New_Update_Plugin_Manager"));
+ upmSelectorPane.add(useOptimizedUPMCheckbox);
+ advancePane.add(upmSelectorPane);
- if (DesignerPushUpdateManager.getInstance().isAutoPushUpdateSupported()) {
- autoPushUpdateCheckBox = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Automatic_Push_Update"));
- improvePane.add(autoPushUpdateCheckBox);
- }
+
+ JPanel improvePane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Product_Improve"));
+ joinProductImprove = new UICheckBox(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Join_Product_Improve"));
+ improvePane.add(joinProductImprove);
JPanel spaceUpPane = FRGUIPaneFactory.createBorderLayout_S_Pane();
spaceUpPane.add(oraclePane, BorderLayout.NORTH);
@@ -206,45 +196,6 @@ public class PreferencePane extends BasicPane {
advancePane.add(spaceUpPane);
}
- private void createVcsSettingPane(JPanel generalPane) {
- JPanel vcsPane = FRGUIPaneFactory.createVerticalTitledBorderPane(Toolkit.i18nText("Fine-Design_Vcs_Title"));
- generalPane.add(vcsPane);
- remindVcsLabel = new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Remind"));
- remindVcsLabel.setVisible(!VcsHelper.needInit());
- vcsEnableCheckBox = new UICheckBox(Toolkit.i18nText("Fine-Design_Vcs_SaveAuto"));
- saveCommitCheckBox = new UICheckBox(Toolkit.i18nText("Fine-Design_Vcs_No_Delete"));
- saveIntervalEditor = new IntegerEditor(60);
- useIntervalCheckBox = new UICheckBox();
- JPanel enableVcsPanel = new JPanel(FRGUIPaneFactory.createLeftZeroLayout());
- enableVcsPanel.add(vcsEnableCheckBox);
- enableVcsPanel.add(remindVcsLabel);
- JPanel intervalPanel = new JPanel(FRGUIPaneFactory.createLeftZeroLayout());
- UILabel everyLabel = new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Every"));
- UILabel delayLabel = new UILabel(Toolkit.i18nText("Fine-Design_Vcs_Delay"));
- intervalPanel.add(useIntervalCheckBox);
- intervalPanel.add(everyLabel);
- intervalPanel.add(saveIntervalEditor);
- intervalPanel.add(delayLabel);
- vcsEnableCheckBox.addChangeListener(new ChangeListener() {
- @Override
- public void stateChanged(ChangeEvent e) {
- boolean selected = vcsEnableCheckBox.isSelected();
- if (selected) {
- saveCommitCheckBox.setEnabled(true);
- saveIntervalEditor.setEnabled(true);
- useIntervalCheckBox.setEnabled(true);
- } else {
- saveCommitCheckBox.setEnabled(false);
- saveIntervalEditor.setEnabled(false);
- useIntervalCheckBox.setEnabled(false);
- }
- }
- });
- vcsPane.add(enableVcsPanel);
- vcsPane.add(intervalPanel);
- vcsPane.add(saveCommitCheckBox);
- }
-
private void createFunctionPane(JPanel generalPane) {
JPanel functionPane = FRGUIPaneFactory.createTitledBorderPane(com.fr.design.i18n.Toolkit.i18nText("Fine-Design_Basic_Preference_Function"));
generalPane.add(functionPane);
@@ -594,22 +545,6 @@ public class PreferencePane extends BasicPane {
defaultStringToFormulaBox.setEnabled(false);
defaultStringToFormulaBox.setSelected(false);
}
- VcsConfigManager vcsConfigManager = designerEnvManager.getVcsConfigManager();
- if (VcsHelper.needInit()) {
- vcsEnableCheckBox.setSelected(vcsConfigManager.isVcsEnable());
- } else {
- vcsEnableCheckBox.setEnabled(false);
- vcsEnableCheckBox.setSelected(false);
- }
- if (!vcsEnableCheckBox.isSelected()) {
- saveCommitCheckBox.setEnabled(false);
- saveIntervalEditor.setEnabled(false);
- useIntervalCheckBox.setEnabled(false);
- }
-
- saveIntervalEditor.setValue(vcsConfigManager.getSaveInterval());
- saveCommitCheckBox.setSelected(vcsConfigManager.isSaveCommit());
- useIntervalCheckBox.setSelected(vcsConfigManager.isUseInterval());
supportCellEditorDefCheckBox.setSelected(designerEnvManager.isSupportCellEditorDef());
@@ -631,13 +566,11 @@ public class PreferencePane extends BasicPane {
openDebugComboBox.setSelected(designerEnvManager.isOpenDebug());
+ useOptimizedUPMCheckbox.setSelected(ServerPreferenceConfig.getInstance().isUseOptimizedUPM());
+
this.oracleSpace.setSelected(designerEnvManager.isOracleSystemSpace());
this.cachingTemplateSpinner.setValue(designerEnvManager.getCachingTemplateLimit());
- this.joinProductImproveCheckBox.setSelected(designerEnvManager.isJoinProductImprove());
-
- if (this.autoPushUpdateCheckBox != null) {
- this.autoPushUpdateCheckBox.setSelected(designerEnvManager.isAutoPushUpdateEnabled());
- }
+ this.joinProductImprove.setSelected(designerEnvManager.isJoinProductImprove());
}
private int chooseCase(int sign) {
@@ -698,15 +631,7 @@ public class PreferencePane extends BasicPane {
designerEnvManager.setOracleSystemSpace(this.oracleSpace.isSelected());
designerEnvManager.setCachingTemplateLimit((int) this.cachingTemplateSpinner.getValue());
- designerEnvManager.setJoinProductImprove(this.joinProductImproveCheckBox.isSelected());
- VcsConfigManager vcsConfigManager = designerEnvManager.getVcsConfigManager();
- vcsConfigManager.setSaveInterval(this.saveIntervalEditor.getValue());
- vcsConfigManager.setVcsEnable(this.vcsEnableCheckBox.isSelected());
- vcsConfigManager.setSaveCommit(this.saveCommitCheckBox.isSelected());
- vcsConfigManager.setUseInterval(this.useIntervalCheckBox.isSelected());
- if (this.autoPushUpdateCheckBox != null) {
- designerEnvManager.setAutoPushUpdateEnabled(this.autoPushUpdateCheckBox.isSelected());
- }
+ designerEnvManager.setJoinProductImprove(this.joinProductImprove.isSelected());
designerEnvManager.setUndoLimit(maxUndoLimit.getSelectedIndex() * SELECTED_INDEX_5);
if (maxUndoLimit.getSelectedIndex() == SELECTED_INDEX_5) {
@@ -724,6 +649,17 @@ public class PreferencePane extends BasicPane {
return new Class[]{Log4jConfig.class};
}
});
+ Configurations.update(new Worker() {
+ @Override
+ public void run() {
+ ServerPreferenceConfig.getInstance().setUseOptimizedUPM(useOptimizedUPMCheckbox.isSelected());
+ }
+
+ @Override
+ public Class extends Configuration>[] targets() {
+ return new Class[] {ServerPreferenceConfig.class};
+ }
+ });
}
diff --git a/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java
new file mode 100644
index 0000000000..9438df33be
--- /dev/null
+++ b/designer-base/src/main/java/com/fr/design/onlineupdate/ui/dialog/UpdateMainDialog.java
@@ -0,0 +1,825 @@
+package com.fr.design.onlineupdate.ui.dialog;
+
+import com.fr.design.RestartHelper;
+import com.fr.design.constants.LayoutConstants;
+import com.fr.design.dialog.UIDialog;
+import com.fr.design.gui.ibutton.UIButton;
+import com.fr.design.gui.icontainer.UIScrollPane;
+import com.fr.design.gui.ilable.UILabel;
+import com.fr.design.gui.itextfield.UITextField;
+import com.fr.design.layout.TableLayout;
+import com.fr.design.layout.TableLayoutHelper;
+import com.fr.design.mainframe.DesignerContext;
+import com.fr.design.onlineupdate.actions.FileDownloader;
+import com.fr.design.onlineupdate.domain.DownloadItem;
+import com.fr.design.onlineupdate.domain.UpdateConstants;
+import com.fr.design.onlineupdate.domain.UpdateInfoCachePropertyManager;
+import com.fr.design.onlineupdate.factory.DirectoryOperationFactory;
+import com.fr.design.onlineupdate.ui.widget.LoadingLabel;
+import com.fr.design.onlineupdate.ui.widget.UpdateActionLabel;
+import com.fr.design.onlineupdate.ui.widget.UpdateInfoTable;
+import com.fr.design.onlineupdate.ui.widget.UpdateInfoTableCellRender;
+import com.fr.design.onlineupdate.ui.widget.UpdateInfoTableModel;
+import com.fr.design.onlineupdate.ui.widget.UpdateInfoTextAreaCellRender;
+import com.fr.design.utils.gui.GUICoreUtils;
+import com.fr.general.ComparatorUtils;
+import com.fr.general.DateUtils;
+import com.fr.general.GeneralContext;
+import com.fr.general.GeneralUtils;
+import com.fr.general.IOUtils;
+import com.fr.general.SiteCenter;
+import com.fr.general.http.HttpClient;
+import com.fr.json.JSONArray;
+import com.fr.json.JSONObject;
+import com.fr.log.FineLoggerFactory;
+import com.fr.stable.ArrayUtils;
+import com.fr.stable.ProductConstants;
+import com.fr.stable.StableUtils;
+import com.fr.stable.StringUtils;
+import com.fr.stable.project.ProjectConstants;
+import com.fr.workspace.WorkContext;
+import com.sun.java.swing.plaf.motif.MotifProgressBarUI;
+
+import javax.swing.BorderFactory;
+import javax.swing.JPanel;
+import javax.swing.JProgressBar;
+import javax.swing.RowSorter;
+import javax.swing.SortOrder;
+import javax.swing.SwingConstants;
+import javax.swing.SwingWorker;
+import javax.swing.event.DocumentEvent;
+import javax.swing.event.DocumentListener;
+import javax.swing.table.TableRowSorter;
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dialog;
+import java.awt.Dimension;
+import java.awt.Frame;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.*;
+import java.text.ParsePosition;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ExecutionException;
+
+/**
+ * Created by XINZAI on 2018/8/21.
+ */
+public class UpdateMainDialog extends UIDialog {
+ public static final Dimension DEFAULT = new Dimension(660, 620);
+
+ private static final Dimension PROGRESSBAR = new Dimension(120, 15);
+ private static final Dimension UPDATE_BUTTON = new Dimension(80, 24);
+ private static final int UPDATE_PANE_ROW_SIZE = 30;
+ private static final int UPDATE_CONTENT_PANE_ROW_SIZE = 10;
+ private static final int UPDATE_CONTENT_PANE_COLUMN_SIZE = 10;
+ private static final int UPDATE_CONTENT_PANE_LABEL_COLUMN_SIZE = 100;
+ private static final int SEARCH_PANE_ROW_SIZE = 50;
+ private static final int SEARCH_PANE_TEXT_COLUMN = 130;
+ private static final int SEARCH_PANE_COLUMN_GAP = 3;
+ private static final int UPDATE_INFO_TABLE_HEADER_TIME_WIDTH = 120;
+ private static final int UPDATE_CONTENT_PANE_BORDER_COLOR = 0xCCCCCC;
+ private static final int RESTORE_LABEL_COLOR = 0x3384F0;
+
+ private static final String UPDATE_CACHE_STATE_FAIL = "fail";
+ private static final String UPDATE_CACHE_STATE_SUCCESS = "success";
+
+ private static final SimpleDateFormat CHANGELOG_FORMAT = new SimpleDateFormat("M/d/y, h:m:s a", Locale.ENGLISH);
+ private static final SimpleDateFormat UPDATE_INFO_TABLE_FORMAT = new SimpleDateFormat("yyyy.MM.dd");
+
+ private Set downloadItems = new HashSet();
+ private JSONObject downloadFileConfig;
+ //最新版本标签
+ private LoadingLabel loadingLabel;
+ //更新按钮
+ private UIButton updateButton;
+ //有新版本提示标签
+ private UILabel updateLabel;
+
+ //jar包版本信息面板,包括当前版本和最新版本
+ private JPanel jarVersionInfoPane;
+ //jar包更新信息面板,包括每个版本更新的信息
+ private JPanel jarUpdateInfoPane;
+ //jar包更新操作面板,包括更新重启按钮和进度条
+ private JPanel updateActionPane;
+ //进度条
+ private JProgressBar progressBar;
+ //更新版本提示面板
+ private JPanel updateVersionReminderPane;
+ //jar包版本标签
+ private UILabel jarCurrentLabel;
+ //jar包还原标签
+ private UILabel jarRestoreLabel;
+ //更新信息搜索按钮
+ private UIButton searchUpdateInfoBtn;
+ //搜索更新信息关键词文本框
+ private UITextField searchUpdateInfoKeyword;
+
+ private boolean updateSuccessful;
+
+ private UpdateInfoTable updateInfoTable;
+
+ private ArrayList