// ============================================================ // <T>执行监视器的逻辑。</T> // // @return 处理结果 // ============================================================ @Override public boolean onExecute() { // 检查文件集合 if (_files.isEmpty()) { return false; } // 检查变更的文件 FFileInfos removes = null; int count = _files.count(); for (int n = 0; n < count; n++) { FFileInfo info = _files.value(n); if (onFilter(info)) { if (info.exists()) { if (info.storeTest(_storeInterval)) { // 响应存储的文件 try { doFileSave(info); } catch (Exception e) { _logger.error(e, "File save event error (file={1})", info.fileName()); } info.stored(); } else if (info.isModified()) { // 响应变更的文件 try { doFileChange(info); } catch (Exception e) { _logger.error(e, "File change event error (file={1})", info.fileName()); } info.refresh(); } } else { // 响应被删除的文件 try { doFileRemove(info); } catch (Exception e) { _logger.error(e, "File remove event error (file={1})", info.fileName()); } if (null == removes) { removes = new FFileInfos(); } removes.push(info); } } } // 移除文件集合 if (null != removes) { for (FFileInfo info : removes.values()) { _files.remove(info.fileName()); } } return true; }
protected void innerBuildCodeList(FXmlNodes config, String name, ISqlConnect connect) { // 去数据库去CodeList if (_logger.debugAble()) { _logger.debug(this, "buildItemNodes", "Find item nodes. (codelist={0})", name); } FSqlQuery sql = new FSqlQuery(connect, getClass(), SQL_CODE_LIST); sql.bindString("name", name); FDataset dataset = sql.fetchDataset(); for (FRow row : dataset) { FXmlNode itemNode = config.create(XListItem.NAME); itemNode.set(XListItem.PTY_VALUE, row.get(XListItem.PTY_VALUE)); itemNode.set(XListItem.PTY_LABEL, row.get(XListItem.PTY_LABEL)); } }
// ============================================================ // <T>解包处理。</T> // // @param pack 打包字符串 // ============================================================ public void unpack(String pack) { if (!RString.isEmpty(pack)) { try { // 解压数据 FAttributes map = new FAttributes(); map.unpack(pack); // 获得内容 _catalog = map.get("catalog", null); _date = map.get("date", null); _code = map.get("code", null); _name = map.get("name", null); _origin = map.get("origin", null); _mime = map.get("mime", null); _size = map.getInt("size"); } catch (Throwable throwable) { _catalog = null; _date = null; _code = null; _name = null; _origin = null; _mime = null; _size = 0; _logger.error(this, "unpack", throwable); } } }
// ============================================================ // <T>向监视器中增加一个监视文件。</T> // // @param fileName 文件名称 // ============================================================ public void push(String filename) { File file = new File(filename); if (file.isFile()) { _files.push(new FFileInfo(file)); } else { _logger.warn(this, "push", "File is not exists (file={1})", filename); } }
// ============================================================ // <T>存储所有变更的文件。</T> // ============================================================ public synchronized void storeAll() { // 检查变更的文件 if (!_files.isEmpty()) { int count = _files.count(); for (int n = 0; n < count; n++) { FFileInfo info = _files.value(n); if (onFilter(info)) { if (info.exists() && info.storeTest(0)) { // 响应存储的文件 try { doFileSave(info); } catch (Exception e) { _logger.error(e, "File save event error (file={1})", info.fileName()); } info.stored(); } } } } }
// ============================================================ // <T>设置网络地址。</T> // // @param url 网络地址 // ============================================================ public void loadFile(String fileName) { // 检查文件存在性 if (!RFile.exists(fileName)) { throw new FFatalError("File is not exists. (file_name={1})", fileName); } // 设置名称 if (RString.isEmpty(_name)) { _name = RFile.name(fileName); } // 设置扩展 if (RString.isEmpty(_extension)) { _extension = RFile.extension(fileName); } // 加载文件 try (FByteFile file = new FByteFile(fileName)) { _data = file.toArray(); _size = _data.length; } catch (Exception exception) { _logger.error(this, "loadFile", exception); } }
// ============================================================ // <T>响应被保存的文档。</T> // // @param info 文件信息 // ============================================================ public void doFileSave(FFileInfo info) { if (_logger.debugAble()) { _logger.debug(this, "doFileSave", "File save (file={1})", info.fileName()); } }
// ============================================================ // <T>响应初始化文档。</T> // // @param filename 文件名称 // ============================================================ public void doInitializeFile(FFileInfo info) { if (_logger.debugAble()) { _logger.debug(this, "doInitializeFile", "File initialize (file={1})", info.fileName()); } }