package charactermanaj.model;\r
\r
+import java.sql.Timestamp;\r
import java.util.AbstractCollection;\r
import java.util.ArrayList;\r
import java.util.Collection;\r
* パーツ識別子のかわりに、パーツキーを用いる.<br>\r
* パーツキーは、CategoryIdがnullであることを許可している.<br>\r
* カテゴリを省略し、パーツ名だけでパーツ管理情報を検索できるようにするためのもの.<br>\r
+ * \r
* @author seraphy\r
*/\r
public class PartsManageData extends AbstractCollection<PartsManageData.PartsKey> {\r
/**\r
* パーツキー.<br>\r
* パーツ識別子 {@link PartsIdentifier} とほぼ同等であるが、カテゴリがnullであることを許可している点が異なる.<br>\r
+ * \r
* @author seraphy\r
*/\r
public static final class PartsKey implements Comparable<PartsKey> {\r
\r
/**\r
* パーツごとのバージョンとダウンロードURL情報を保持するホルダークラス.<br>\r
+ * \r
* @author seraphy\r
*/\r
public static final class PartsVersionInfo {\r
\r
private String downloadURL;\r
\r
+ private Timestamp lastModified;\r
+\r
public PartsVersionInfo() {\r
super();\r
}\r
\r
public PartsVersionInfo(double version, String downloadURL) {\r
+ this(version, downloadURL, null);\r
+ }\r
+ \r
+ public PartsVersionInfo(double version, String downloadURL,\r
+ Timestamp lastModified) {\r
this.version = version;\r
this.downloadURL = downloadURL;\r
+ this.lastModified = lastModified;\r
}\r
- \r
+\r
public double getVersion() {\r
return version;\r
}\r
public void setDownloadURL(String downloadURL) {\r
this.downloadURL = downloadURL;\r
}\r
+\r
+ public Timestamp getLastModified() {\r
+ return lastModified;\r
+ }\r
+\r
+ public void setLastModified(Timestamp lastModified) {\r
+ this.lastModified = lastModified;\r
+ }\r
}\r
\r
\r
\r
/**\r
* パーツキーに結びつく、各種情報を登録する.<br>\r
- * @param partsKey パーツキー\r
- * @param localizedName ローカライズ名(なければnull)\r
- * @param partsAuthorInfo 作者情報 (なければnull)\r
- * @param versionInfo バージョン情報 (なければnull)\r
+ * \r
+ * @param partsKey\r
+ * パーツキー\r
+ * @param localizedName\r
+ * ローカライズ名(なければnull)\r
+ * @param partsAuthorInfo\r
+ * 作者情報 (なければnull)\r
+ * @param versionInfo\r
+ * バージョン情報 (なければnull)\r
*/\r
public void putPartsInfo(PartsKey partsKey, String localizedName, PartsAuthorInfo partsAuthorInfo, PartsVersionInfo versionInfo) {\r
if (partsKey == null) {\r
/**\r
* パーツキーを指定して該当する作者情報を取得する.<br>\r
* 完全に一致する作者情報がない場合は、カテゴリを無視して、パーツキーのパーツ名(ID)の一致する、いずれかの作者情報を返す.<br>\r
- * @param partsKey パーツキー\r
+ * \r
+ * @param partsKey\r
+ * パーツキー\r
* @return 作者情報、完全に一致するものがなく、且つ、パーツ名(ID)に一致する情報もない場合はnull\r
*/\r
public PartsAuthorInfo getPartsAuthorInfo(PartsKey partsKey) {\r
/**\r
* パーツキーと完全に一致する作者情報を取得する.<br>\r
* 存在しない場合はnullを返す.<br>\r
- * @param partsKey パーツキー\r
+ * \r
+ * @param partsKey\r
+ * パーツキー\r
* @return 作者情報、もしくはnull\r
*/\r
public PartsAuthorInfo getPartsAuthorInfoStrict(PartsKey partsKey) {\r
/**\r
* パーツキーを指定して該当するバージョン情報を取得する.<br>\r
* 完全に一致するバージョン情報がない場合は、カテゴリを無視して、パーツキーのパーツ名(ID)の一致する、いずれかのバージョン情報を返す.<br>\r
- * @param partsKey パーツキー\r
+ * \r
+ * @param partsKey\r
+ * パーツキー\r
* @return バージョン情報、完全に一致するものがなく、且つ、パーツ名(ID)に一致する情報もない場合はnull\r
*/\r
public PartsVersionInfo getVersion(PartsKey partsKey) {\r
/**\r
* パーツキーを指定して該当するローカライズ名を取得する.<br>\r
* 完全に一致するバージョン情報がない場合は、カテゴリを無視して、パーツキーのパーツ名(ID)の一致する、いずれかのローカライズ名を返す.<br>\r
- * @param partsKey パーツキー\r
+ * \r
+ * @param partsKey\r
+ * パーツキー\r
* @return バージョン情報、完全に一致するものがなく、且つ、パーツ名(ID)に一致する情報もない場合はnull\r
*/\r
public String getLocalizedName(PartsKey partsKey) {\r
\r
/**\r
* パーツキーと完全に一致するバージョン情報を取得する.<br>\r
- * @param partsKey パーツキー\r
+ * \r
+ * @param partsKey\r
+ * パーツキー\r
* @return パーツキーに完全に一致するバージョン情報、該当がなければnull\r
*/\r
public PartsVersionInfo getVersionStrict(PartsKey partsKey) {\r
\r
/**\r
* パーツキーと完全に一致するローカライズ名を取得する.<br>\r
- * @param partsKey パーツキー\r
+ * \r
+ * @param partsKey\r
+ * パーツキー\r
* @return パーツキーに完全に一致するローカライズ名、該当がなければnull\r
*/\r
public String getLocalizedNameStrict(PartsKey partsKey) {\r
\r
/**\r
* すべての作者情報を返す.<br>\r
+ * \r
* @return 作者情報のコレクション\r
*/\r
public Collection<PartsAuthorInfo> getAuthorInfos() {\r
\r
/**\r
* 指定した作者に該当する登録されているパーツキーの一覧を返す.<Br>\r
- * @param author 作者\r
+ * \r
+ * @param author\r
+ * 作者\r
* @return 作者に該当するパーツキー\r
*/\r
public Collection<PartsKey> getPartsKeysByAuthor(String author) {\r
\r
import java.awt.BorderLayout;\r
import java.awt.Color;\r
+import java.awt.Component;\r
import java.awt.Container;\r
import java.awt.GridBagConstraints;\r
import java.awt.GridBagLayout;\r
import javax.swing.JPopupMenu;\r
import javax.swing.JRootPane;\r
import javax.swing.JScrollPane;\r
+import javax.swing.JSeparator;\r
import javax.swing.JTable;\r
import javax.swing.JTextField;\r
import javax.swing.KeyStroke;\r
import javax.swing.event.ListSelectionListener;\r
import javax.swing.event.TableModelEvent;\r
import javax.swing.event.TableModelListener;\r
+import javax.swing.table.TableCellRenderer;\r
import javax.swing.table.TableColumnModel;\r
\r
import charactermanaj.Main;\r
import charactermanaj.model.PartsCategory;\r
import charactermanaj.model.PartsIdentifier;\r
import charactermanaj.model.PartsManageData;\r
+import charactermanaj.model.PartsManageData.PartsKey;\r
+import charactermanaj.model.PartsManageData.PartsVersionInfo;\r
import charactermanaj.model.PartsSpec;\r
+import charactermanaj.model.io.PartsInfoXMLReader;\r
import charactermanaj.model.io.PartsInfoXMLWriter;\r
import charactermanaj.ui.model.AbstractTableModelWithComboBoxModel;\r
import charactermanaj.util.DesktopUtilities;\r
partsListPanel.setLayout(partsListPanelLayout);\r
\r
partsManageTableModel = new PartsManageTableModel();\r
- partsManageTable = new JTable(partsManageTableModel);\r
+ partsManageTable = new JTable(partsManageTableModel) {\r
+ private static final long serialVersionUID = 1L;\r
+\r
+ @Override\r
+ public Component prepareRenderer(TableCellRenderer renderer,\r
+ int rowIdx, int columnIdx) {\r
+ PartsManageTableModel.Columns column = PartsManageTableModel.Columns\r
+ .values()[columnIdx];\r
+ Component comp = super.prepareRenderer(renderer, rowIdx, columnIdx);\r
+ PartsManageTableRow row = partsManageTableModel.getRow(rowIdx);\r
+\r
+ Timestamp current = row.getTimestamp();\r
+ Timestamp lastModified = row.getLastModified();\r
+\r
+ boolean warnings = false;\r
+\r
+ if (current != null && !current.equals(lastModified)) {\r
+ // 現在のパーツの最終更新日と、パーツ管理情報の作成時のパーツの最終更新日が不一致の場合\r
+ warnings = true;\r
+ }\r
+\r
+ // 背景色、警告行は赤色に\r
+ if (warnings && column == PartsManageTableModel.Columns.LastModified) {\r
+ AppConfig appConfig = AppConfig.getInstance();\r
+ Color invalidBgColor = appConfig.getInvalidBgColor();\r
+ comp.setBackground(invalidBgColor);\r
+ } else {\r
+ if (isCellSelected(rowIdx, columnIdx)) {\r
+ comp.setBackground(getSelectionBackground());\r
+ } else {\r
+ comp.setBackground(getBackground());\r
+ }\r
+ }\r
+\r
+ return comp;\r
+ }\r
+ };\r
partsManageTable.setShowGrid(true);\r
partsManageTable.setGridColor(AppConfig.getInstance().getGridColor());\r
partsManageTableModel.adjustColumnModel(partsManageTable.getColumnModel());\r
\r
// テーブルのコンテキストメニュー\r
final JPopupMenu popupMenu = new JPopupMenu();\r
+ Action actApplyAllLastModified = new AbstractAction(strings.getProperty("applyAllLastModified")) {\r
+ private static final long serialVersionUID = 1L;\r
+ public void actionPerformed(ActionEvent e) {\r
+ onApplyAllLastModified();\r
+ }\r
+ };\r
Action actApplyAllDownloadURL = new AbstractAction(strings.getProperty("applyAllDownloadURL")) {\r
private static final long serialVersionUID = 1L;\r
public void actionPerformed(ActionEvent e) {\r
onApplyAllVersion();\r
}\r
};\r
+ popupMenu.add(actApplyAllLastModified);\r
+ popupMenu.add(new JSeparator());\r
popupMenu.add(actApplyAllVersion);\r
popupMenu.add(actApplyAllDownloadURL);\r
\r
onChangeSelection();\r
}\r
\r
+ protected void onApplyAllLastModified() {\r
+ int[] selRows = partsManageTable.getSelectedRows();\r
+ if (selRows.length == 0) {\r
+ Toolkit tk = Toolkit.getDefaultToolkit();\r
+ tk.beep();\r
+ return;\r
+ }\r
+ Arrays.sort(selRows);\r
+\r
+ for (int selRow : selRows) {\r
+ PartsManageTableRow row = partsManageTableModel.getRow(selRow);\r
+ Timestamp dt = row.getTimestamp();\r
+ row.setLastModified(dt);\r
+ }\r
+ partsManageTableModel.fireTableRowsUpdated(selRows[0],\r
+ selRows[selRows.length - 1]);\r
+ }\r
+\r
protected void onApplyAllDownloadURL() {\r
int[] selRows = partsManageTable.getSelectedRows();\r
if (selRows.length == 0) {\r
for (int selRow : selRows) {\r
PartsManageTableRow row = partsManageTableModel.getRow(selRow);\r
row.setDownloadURL(downloadURL_new);\r
+\r
+ Timestamp dt = row.getTimestamp();\r
+ row.setLastModified(dt);\r
}\r
partsManageTableModel.fireTableRowsUpdated(selRows[0], selRows[selRows.length - 1]);\r
}\r
for (int selRow : selRows) {\r
PartsManageTableRow row = partsManageTableModel.getRow(selRow);\r
row.setVersion(version_new);\r
+\r
+ Timestamp dt = row.getTimestamp();\r
+ row.setLastModified(dt);\r
}\r
partsManageTableModel.fireTableRowsUpdated(selRows[0], selRows[selRows.length - 1]);\r
}\r
String oldValue = row.getAuthor();\r
if (oldValue == null || !oldValue.equals(author)) {\r
row.setAuthor(author);\r
+\r
+ Timestamp dt = row.getTimestamp();\r
+ row.setLastModified(dt);\r
+\r
firstRow = Math.max(firstRow, selRow);\r
lastRow = Math.min(lastRow, selRow);\r
}\r
double version = row.getVersion();\r
String downloadURL = row.getDownloadURL();\r
String localizedName = row.getLocalizedName();\r
+ Timestamp lastModified = row.getLastModified();\r
\r
+ PartsManageData.PartsVersionInfo versionInfo = new PartsManageData.PartsVersionInfo();\r
+ versionInfo.setVersion(version);\r
+ versionInfo.setDownloadURL(downloadURL);\r
+ versionInfo.setLastModified(lastModified);\r
+\r
PartsIdentifier partsIdentifier = row.getPartsIdentifier();\r
\r
PartsManageData.PartsKey partsKey = new PartsManageData.PartsKey(partsIdentifier);\r
- partsManageData.putPartsInfo(partsKey,\r
- localizedName,\r
- partsAuthorInfo,\r
- new PartsManageData.PartsVersionInfo(version, downloadURL));\r
+ partsManageData.putPartsInfo(partsKey, localizedName,\r
+ partsAuthorInfo, versionInfo);\r
}\r
\r
// パーツ管理情報を書き込む.\r
\r
private double version;\r
\r
- public PartsManageTableRow(PartsIdentifier partsIdentifier, PartsSpec partsSpec) {\r
+ private Timestamp lastModified;\r
+\r
+ public PartsManageTableRow(PartsIdentifier partsIdentifier,\r
+ PartsSpec partsSpec, Timestamp lastModified) {\r
if (partsIdentifier == null || partsSpec == null) {\r
throw new IllegalArgumentException();\r
}\r
this.partsIdentifier = partsIdentifier;\r
this.localizedName = partsIdentifier.getLocalizedPartsName();\r
+\r
this.timestamp = new Timestamp(partsSpec.getPartsFiles().lastModified());\r
\r
+ this.lastModified = lastModified;\r
+ \r
PartsAuthorInfo autherInfo = partsSpec.getAuthorInfo();\r
if (autherInfo != null) {\r
author = autherInfo.getAuthor();\r
this.homepage = homepage;\r
}\r
\r
+ public Timestamp getLastModified() {\r
+ return lastModified;\r
+ }\r
+\r
+ public void setLastModified(Timestamp lastModified) {\r
+ this.lastModified = lastModified;\r
+ }\r
}\r
\r
class PartsManageTableModel extends AbstractTableModelWithComboBoxModel<PartsManageTableRow> {\r
\r
private static final long serialVersionUID = 1L;\r
\r
- private static final String[] COLUMN_NAMES;\r
- \r
- private static final int[] COLUMN_WIDTHS;\r
+ private static final Logger logger = Logger\r
+ .getLogger(PartsManageTableModel.class.getName());\r
\r
- static {\r
- Properties strings = LocalizedResourcePropertyLoader.getInstance()\r
- .getLocalizedProperties(PartsManageDialog.STRINGS_RESOURCE);\r
-\r
- COLUMN_NAMES = new String[] {\r
- strings.getProperty("column.partsid"),\r
- strings.getProperty("column.lastmodified"),\r
- strings.getProperty("column.category"),\r
- strings.getProperty("column.partsname"),\r
- strings.getProperty("column.author"),\r
- strings.getProperty("column.version"),\r
- strings.getProperty("column.downloadURL"),\r
- };\r
- \r
- COLUMN_WIDTHS = new int[] {\r
- Integer.parseInt(strings.getProperty("column.partsid.width")),\r
- Integer.parseInt(strings.getProperty("column.lastmodified.width")),\r
- Integer.parseInt(strings.getProperty("column.category.width")),\r
- Integer.parseInt(strings.getProperty("column.partsname.width")),\r
- Integer.parseInt(strings.getProperty("column.author.width")),\r
- Integer.parseInt(strings.getProperty("column.version.width")),\r
- Integer.parseInt(strings.getProperty("column.downloadURL.width")),\r
- };\r
- \r
- }\r
- \r
- public int getColumnCount() {\r
- return COLUMN_NAMES.length;\r
- }\r
- \r
- @Override\r
- public String getColumnName(int column) {\r
- return COLUMN_NAMES[column];\r
- }\r
- \r
- public void adjustColumnModel(TableColumnModel columnModel) {\r
- for (int idx = 0; idx < COLUMN_WIDTHS.length; idx++) {\r
- columnModel.getColumn(idx).setPreferredWidth(COLUMN_WIDTHS[idx]);\r
- }\r
- }\r
+ private static Properties strings = LocalizedResourcePropertyLoader\r
+ .getInstance().getLocalizedProperties(\r
+ PartsManageDialog.STRINGS_RESOURCE);\r
\r
- public Object getValueAt(int rowIndex, int columnIndex) {\r
- PartsManageTableRow row = getRow(rowIndex);\r
- switch (columnIndex) {\r
- case 0:\r
- return row.getPartsIdentifier().getPartsName();\r
- case 1:\r
- return row.getTimestamp().toString();\r
- case 2:\r
- return row.getPartsIdentifier().getPartsCategory().getLocalizedCategoryName();\r
- case 3:\r
- return row.getLocalizedName();\r
- case 4:\r
- return row.getAuthor();\r
- case 5:\r
- return row.getVersion() > 0 ? row.getVersion() : null;\r
- case 6:\r
- return row.getDownloadURL();\r
- }\r
- return "";\r
- }\r
- \r
- @Override\r
- public void setValueAt(Object aValue, int rowIndex, int columnIndex) {\r
- PartsManageTableRow row = getRow(rowIndex);\r
- switch (columnIndex) {\r
- case 0:\r
- return;\r
- case 1:\r
- return;\r
- case 2:\r
- return;\r
- case 3:\r
- {\r
- String localizedName = (String) aValue;\r
+ /**\r
+ * カラムの定義\r
+ */\r
+ public enum Columns {\r
+ PartsID("column.partsid", false, String.class) {\r
+ @Override\r
+ public Object getValue(PartsManageTableRow row) {\r
+ return row.getPartsIdentifier().getPartsName();\r
+ }\r
+ },\r
+ LastModified("column.lastmodified", false, String.class) {\r
+ @Override\r
+ public Object getValue(PartsManageTableRow row) {\r
+ return row.getTimestamp().toString();\r
+ }\r
+ },\r
+ Category("column.category", false, String.class) {\r
+ @Override\r
+ public Object getValue(PartsManageTableRow row) {\r
+ return row.getPartsIdentifier().getPartsCategory()\r
+ .getLocalizedCategoryName();\r
+ }\r
+ },\r
+ PartsName("column.partsname", true, String.class) {\r
+ @Override\r
+ public Object getValue(PartsManageTableRow row) {\r
+ return row.getLocalizedName();\r
+ }\r
+ @Override\r
+ public void setValue(PartsManageTableRow row, Object value) {\r
+ String localizedName = (String) value;\r
if (localizedName != null && localizedName.trim().length() > 0) {\r
String oldValue = row.getLocalizedName();\r
if (oldValue != null && oldValue.equals(localizedName)) {\r
row.setLocalizedName(localizedName);\r
}\r
}\r
- break;\r
- case 4:\r
- {\r
- String author = (String) aValue;\r
+ },\r
+ Author("column.author", true, String.class) {\r
+ @Override\r
+ public Object getValue(PartsManageTableRow row) {\r
+ return row.getAuthor();\r
+ }\r
+ @Override\r
+ public void setValue(PartsManageTableRow row, Object value) {\r
+ String author = (String) value;\r
if (author == null) {\r
author = "";\r
}\r
}\r
row.setAuthor(author);\r
}\r
- break;\r
- case 5:\r
- {\r
- Double version = (Double) aValue;\r
+ },\r
+ Version("column.version", true, Double.class) {\r
+ @Override\r
+ public Object getValue(PartsManageTableRow row) {\r
+ return row.getVersion() > 0 ? row.getVersion() : null;\r
+ }\r
+ @Override\r
+ public void setValue(PartsManageTableRow row, Object value) {\r
+ Double version = (Double) value;\r
if (version == null || version.doubleValue() <= 0) {\r
version = Double.valueOf(0.);\r
}\r
}\r
row.setVersion(version);\r
}\r
- break;\r
- case 6:\r
- {\r
- String downloadURL = (String) aValue;\r
+ },\r
+ DownloadURL("column.downloadURL", true, String.class) {\r
+ @Override\r
+ public Object getValue(PartsManageTableRow row) {\r
+ return row.getDownloadURL();\r
+ }\r
+ @Override\r
+ public void setValue(PartsManageTableRow row, Object value) {\r
+ String downloadURL = (String) value;\r
if (downloadURL == null) {\r
downloadURL = "";\r
}\r
}\r
row.setDownloadURL(downloadURL);\r
}\r
- break;\r
- default:\r
+ };\r
+\r
+ private final Class<?> columnClass;\r
+\r
+ private final boolean editable;\r
+\r
+ private final String columnName;\r
+\r
+ private String displayName;\r
+\r
+ private int width;\r
+\r
+ private Columns(String columnName, boolean editable,\r
+ Class<?> columnClass) {\r
+ this.columnName = columnName;\r
+ this.editable = editable;\r
+ this.columnClass = columnClass;\r
+ }\r
+\r
+ public abstract Object getValue(PartsManageTableRow row);\r
+\r
+ public boolean isEditable() {\r
+ return editable;\r
+ }\r
+\r
+ public Class<?> getColumnClass() {\r
+ return columnClass;\r
+ }\r
+\r
+ public String getDisplayName() {\r
+ init();\r
+ return displayName;\r
+ }\r
+\r
+ public int getWidth() {\r
+ init();\r
+ return width;\r
+ }\r
+\r
+ public void setValue(PartsManageTableRow row, Object value) {\r
+ // 何もしない.\r
+ }\r
+\r
+ private void init() {\r
+ if (displayName != null) {\r
+ return;\r
+ }\r
+ displayName = strings.getProperty(columnName);\r
+ width = Integer\r
+ .parseInt(strings.getProperty(columnName + ".width"));\r
+ }\r
+ }\r
+\r
+ \r
+ public int getColumnCount() {\r
+ return Columns.values().length;\r
+ }\r
+ \r
+ @Override\r
+ public String getColumnName(int column) {\r
+ return Columns.values()[column].getDisplayName();\r
+ }\r
+ \r
+ public void adjustColumnModel(TableColumnModel columnModel) {\r
+ Columns[] columns = Columns.values();\r
+ for (int idx = 0; idx < columns.length; idx++) {\r
+ columnModel.getColumn(idx).setPreferredWidth(\r
+ columns[idx].getWidth());\r
+ }\r
+ }\r
+\r
+ public Object getValueAt(int rowIndex, int columnIndex) {\r
+ PartsManageTableRow row = getRow(rowIndex);\r
+ Columns column = Columns.values()[columnIndex];\r
+ return column.getValue(row);\r
+ }\r
+ \r
+ @Override\r
+ public void setValueAt(Object aValue, int rowIndex, int columnIndex) {\r
+ PartsManageTableRow row = getRow(rowIndex);\r
+ Columns column = Columns.values()[columnIndex];\r
+ if (!column.isEditable()) {\r
return;\r
}\r
+ column.setValue(row, aValue);\r
+\r
+ // 更新日を最新にする\r
+ Timestamp dt = row.getTimestamp();\r
+ row.setLastModified(dt);\r
+\r
// 変更通知\r
fireTableRowsUpdated(rowIndex, columnIndex);\r
}\r
\r
@Override\r
public Class<?> getColumnClass(int columnIndex) {\r
- switch (columnIndex) {\r
- case 0:\r
- return String.class;\r
- case 1:\r
- return String.class;\r
- case 2:\r
- return String.class;\r
- case 3:\r
- return String.class;\r
- case 4:\r
- return String.class;\r
- case 5:\r
- return Double.class;\r
- case 6:\r
- return String.class;\r
- }\r
- return String.class;\r
+ Columns column = Columns.values()[columnIndex];\r
+ return column.getColumnClass();\r
}\r
\r
@Override\r
public boolean isCellEditable(int rowIndex, int columnIndex) {\r
- if (columnIndex == 0 || columnIndex == 1 || columnIndex == 2) {\r
- // PARTS ID/Timetsmap/CATEGORYは変更不可\r
- return false;\r
- }\r
- return true;\r
+ Columns column = Columns.values()[columnIndex];\r
+ return column.isEditable();\r
}\r
\r
public void initModel(CharacterData characterData) {\r
}\r
clear();\r
\r
+ // 既存のパーツ管理情報ファイルがあれば読み込む\r
+ URI docBase = characterData.getDocBase();\r
+ PartsManageData partsManageData = null;\r
+ if (docBase != null) {\r
+ try {\r
+ PartsInfoXMLReader reader = new PartsInfoXMLReader();\r
+ partsManageData = reader.loadPartsManageData(docBase);\r
+\r
+ } catch (Exception ex) {\r
+ logger.log(Level.WARNING, ex.toString(), ex);\r
+ }\r
+ }\r
+ if (partsManageData == null) {\r
+ partsManageData = new PartsManageData();\r
+ }\r
+\r
for (PartsCategory partsCategory : characterData.getPartsCategories()) {\r
for (Map.Entry<PartsIdentifier, PartsSpec> entry : characterData\r
.getPartsSpecMap(partsCategory).entrySet()) {\r
PartsIdentifier partsIdentifier = entry.getKey();\r
PartsSpec partsSpec = entry.getValue();\r
\r
- PartsManageTableRow row = new PartsManageTableRow(partsIdentifier, partsSpec);\r
+ // パーツ管理情報ファイルから、パーツ管理情報を設定した時点の\r
+ // ファイルサイズや更新日時などを読み取る.\r
+ PartsKey partsKey = new PartsKey(partsIdentifier);\r
+ PartsVersionInfo versionInfo = partsManageData\r
+ .getVersion(partsKey);\r
+\r
+ Timestamp lastModified = null;\r
+\r
+ if (versionInfo != null) {\r
+ lastModified = versionInfo.getLastModified();\r
+ }\r
+\r
+ PartsManageTableRow row = new PartsManageTableRow(\r
+ partsIdentifier, partsSpec, lastModified);\r
addRow(row);\r
}\r
}\r