public void setSiteIDTableMaxNo(String tableName, DataRow dr, boolean newIDFlag) { try { if (dr.getDataColumn("SiteID") != null) dr.set("SiteID", getIDMapping("ZCSite", String.valueOf(this.siteID))); } catch (Throwable t) { t.printStackTrace(); LogUtil.warn(tableName); } for (int i = 0; i < this.NoRelas.length; ++i) { SiteTableRela.NoType nr = this.NoRelas[i]; if (nr.TableCode.equalsIgnoreCase(tableName)) { String id = dr.getString(nr.FieldName); if (newIDFlag) { if ((nr.TableCode.equals("ZCCatalog")) && (nr.FieldName.equals("InnerCode"))) if (id.length() == 6) { id = CatalogUtil.createCatalogInnerCode(null); } else { String parent = id.substring(0, id.length() - 6); parent = getIDMapping(nr.TableCode + "." + nr.FieldName, parent); id = CatalogUtil.createCatalogInnerCode(parent); } else { id = String.valueOf(NoUtil.getMaxID(nr.NoType)); } } String type = nr.TableCode; if ((((type.equals("ZCArticle")) || (type.equals("ZCAttachment")) || (type.equals("ZCImage")) || (type.equals("ZCAudio")) || (type.equals("ZCVideo")))) && (nr.NoType.equals("DocID"))) { type = "Document"; } addIDMapping(type + "." + nr.FieldName, dr.getString(nr.FieldName), id); dr.set(nr.FieldName, id); } } for (int i = 0; i < this.TableRelas.length; ++i) if (this.TableRelas[i].TableCode.equals(tableName)) { String type = this.TableRelas[i].RelaTable; if ((((type.equals("ZCArticle")) || (type.equals("ZCAttachment")) || (type.equals("ZCImage")) || (type.equals("ZCAudio")) || (type.equals("ZCVideo")))) && (this.TableRelas[i].RelaField.equals("ID"))) { type = "Document"; } String id = getIDMapping( type + "." + this.TableRelas[i].RelaField, dr.getString(this.TableRelas[i].KeyField)); if (StringUtil.isNotEmpty(id)) dr.set(this.TableRelas[i].KeyField, id); } }
public void dataBindSpecifiedColumns(DataListAction dla) { ZCCustomTableSchema table = new ZCCustomTableSchema(); table.setSiteID($V("SiteID")); table.setCode($V("TableCode")); ZCCustomTableSet set = table.query(); if ((set == null) || (set.size() < 1)) { LogUtil.warn("ID为" + table.getSiteID() + "的站点下没有代码为" + table.getCode() + "的表!"); return; } table = set.get(0); if (!"Y".equals(table.getAllowView())) { LogUtil.warn("ID为" + table.getSiteID() + "的站点下代码为" + table.getCode() + "的表不允许前台查看!"); return; } DataTable dt = CustomTableUtil.getData(set.get(0), null, dla.getPageSize(), dla.getPageIndex()); dla.setTotal(CustomTableUtil.getTotal(table, "where 1=1")); dla.bindData(dt); }
public void dataBindAllColumns(DataListAction dla) { ZCCustomTableSchema table = new ZCCustomTableSchema(); table.setSiteID($V("SiteID")); table.setCode($V("TableCode")); ZCCustomTableSet set = table.query(); if ((set == null) || (set.size() < 1)) { LogUtil.warn("ID为" + table.getSiteID() + "的站点下没有代码为" + table.getCode() + "的表!"); return; } table = set.get(0); if (!"Y".equals(table.getAllowView())) { LogUtil.warn("ID为" + table.getSiteID() + "的站点下代码为" + table.getCode() + "的表不允许前台查看!"); return; } DataTable dt = CustomTableUtil.getData(set.get(0), null, dla.getPageSize(), dla.getPageIndex()); ZCCustomTableColumnSet cset = new ZCCustomTableColumnSchema().query(new QueryBuilder("where TableID=?", table.getID())); HtmlTR tr = new HtmlTR(); ArrayList list = new ArrayList(); for (int i = 0; i < cset.size(); ++i) { HtmlTD td = new HtmlTD(); td.setInnerHTML(cset.get(i).getName()); tr.addTD(td); } list.add(tr); for (int i = 0; i < dt.getRowCount(); ++i) { tr = new HtmlTR(); for (int j = 0; j < dt.getColCount(); ++j) { HtmlTD td = new HtmlTD(); td.setInnerHTML(dt.getString(i, j)); tr.addTD(td); } list.add(tr); } dt = new DataTable(); dt.insertColumn("RowHTML"); for (int i = 0; i < list.size(); ++i) { tr = (HtmlTR) list.get(i); dt.insertRow(new Object[] {tr.getOuterHtml()}); } dla.setTotal(CustomTableUtil.getTotal(table, "where 1=1")); dla.bindData(dt); }
public String getIDMapping(String type, String oldID) { Object obj = this.idMap.get(type); if (StringUtil.isEmpty(oldID)) { return null; } if (obj == null) { LogUtil.info("站点导入时未找到ID映射关系:Type=" + type + ",OldID=" + oldID); return null; } Mapx map = (Mapx) obj; return map.getString(oldID); }
public static void loadConfig() { if (map == null) { map = new Mapx(); String path = Config.getContextRealPath() + "WEB-INF/classes/framework.xml"; if (!(new File(path).exists())) { return; } SAXReader reader = new SAXReader(false); try { Document doc = reader.read(new File(path)); Element root = doc.getRootElement(); Element extend = root.element("extend"); if (extend != null) { List types = extend.elements("action"); for (int i = 0; i < types.size(); ++i) { Element type = (Element) types.get(i); String className = type.attributeValue("class"); try { Object obj = Class.forName(className).newInstance(); if (!(obj instanceof IExtendAction)) { LogUtil.getLogger().warn("类" + className + "必须继承IExtendAction!"); } IExtendAction action = (IExtendAction) obj; ArrayList list = (ArrayList) map.get(action.getTarget()); if (list == null) { list = new ArrayList(); } list.add(action); map.put(action.getTarget(), list); } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } } } } catch (DocumentException e) { e.printStackTrace(); } } }
public void writeArticle() { prepareList(); if (this.config.getType() == 1) { QueryBuilder imageQB = new QueryBuilder("select id from zccatalog where type=4 and siteid=?", CatalogUtil.getSiteID(this.config.getCatalogID())); String imageCatalogID = imageQB.executeString(); if (StringUtil.isEmpty(CatalogUtil.getSiteID(this.config.getCatalogID()))) { LogUtil.getLogger().warn("文档采集的目的栏目不存在:ID=" + this.config.getCatalogID()); return; } String sitePath = SiteUtil.getAbsolutePath(CatalogUtil.getSiteID(this.config.getCatalogID())); String imagePath = "upload/Image/" + CatalogUtil.getAlias(imageCatalogID) + "/"; RegexParser rp = this.config.getTemplate("Ref1"); RegexParser[] filters = this.config.getFilterBlocks(); this.list.moveFirst(); WebDocument doc = null; int cSuccess = 0; int cFailure = 0; int cLost = 0; boolean publishDateFlag = false; ZCArticleSet set = new ZCArticleSet(); while ((doc = this.list.next()) != null) { if (this.task.checkStop()) { return; } if (doc.getLevel() != this.config.getUrlLevels().length - 1) { continue; } int percent = (100 - this.task.getPercent()) * (cSuccess + cFailure + cLost) / this.list.size(); this.task.setPercent(this.task.getPercent() + percent); if ((doc.isTextContent()) && (doc.getContent() != null)) { String text = doc.getContentText(); rp.setText(text); if (rp.match()) { Mapx map = rp.getMapx(); Object[] ks = map.keyArray(); Object[] vs = map.valueArray(); for (int i = 0; i < map.size(); ++i) { String key = ks[i].toString(); String value = vs[i].toString(); if (!key.equalsIgnoreCase("Content")) { value = this.tagPattern.matcher(value).replaceAll(""); } value = StringUtil.htmlDecode(value); value = value.trim(); map.put(key, value); } String title = map.getString("Title"); String content = map.getString("Content"); String author = map.getString("Author"); String source = map.getString("Source"); String strDate = map.getString("PublishDate"); Date publishDate = doc.getLastmodifiedDate(); if ((StringUtil.isNotEmpty(strDate)) && (StringUtil.isNotEmpty(this.config.getPublishDateFormat()))) { try { strDate = DateUtil.convertChineseNumber(strDate); publishDate = DateUtil.parse(strDate, this.config.getPublishDateFormat()); } catch (Exception e) { this.task.addError("日期" + strDate + "不符合指定格式" + doc.getUrl()); } publishDateFlag = true; } if (publishDate.getTime() > System.currentTimeMillis()) { publishDate = new Date(); } ArticleAPI api = new ArticleAPI(); try { ZCArticleSchema article = new ZCArticleSchema(); if (StringUtil.isNotEmpty(title)) { article.setTitle(title); } else { ++cLost; break label1209: } if (StringUtil.isNotEmpty(content)) { content = content.trim(); while (rp.match()) { String html = rp.getMapx().getString("Content"); content = content + html; } if (this.config.isCleanLinkFlag()) { content = this.framePattern.matcher(content).replaceAll(""); content = this.stylePattern.matcher(content).replaceAll(""); content = this.scriptPattern.matcher(content).replaceAll(""); content = this.linkPattern.matcher(content).replaceAll("$1"); } if (filters != null) { for (int k = 0; k < filters.length; ++k) { content = filters[k].replace(content, ""); } } String str = dealImage(content, doc.getUrl(), sitePath, imagePath, imageCatalogID); article.setContent(str); } else { ++cLost; break label1209: } if (StringUtil.isNotEmpty(author)) { article.setAuthor(author); } if (StringUtil.isNotEmpty(source)) { article.setReferName(source); } article.setReferURL(doc.getUrl()); article.setPublishDate(publishDate); article.setCatalogID(this.config.getCatalogID()); article.setBranchInnerCode("0001"); article.setProp2("FromWeb"); if (ExtendManager.hasAction("FromWeb.BeforeSave")) { ExtendManager.executeAll("FromWeb.BeforeSave", new Object[] { article }); } Date date = (Date)new QueryBuilder( "select PublishDate from ZCArticle where ReferURL=? and CatalogID=?", doc.getUrl(), this.config.getCatalogID()).executeOneValue(); if (date != null) { if (date.getTime() < doc.getLastDownloadTime()) { QueryBuilder qb = new QueryBuilder( "update ZCArticle set Title=?,Content=? where CatalogID=? and ReferURL=?"); qb.add(article.getTitle()); qb.add(article.getContent()); qb.add(this.config.getCatalogID()); qb.add(doc.getUrl()); qb.executeNoQuery(); } ++cSuccess; } else { api.setSchema(article); set.add(article); if (api.insert() > 0L) ++cSuccess; else ++cFailure; } } catch (Exception e) { ++cFailure; e.printStackTrace(); } } else { LogUtil.getLogger().info("未能匹配" + doc.getUrl()); this.task.addError("未能匹配" + doc.getUrl()); ++cLost; } label1209: this.task.setCurrentInfo("正在转换文档, <font class='green'>" + cSuccess + "</font> 个成功, <font class='red'>" + cFailure + "</font> 个失败, <font class='green'>" + cLost + "</font> 个未匹配"); } }
public void processSubmit() { ZCCustomTableSchema table = new ZCCustomTableSchema(); table.setID($V("_TableID")); if (!table.fill()) { LogUtil.warn("没有ID为" + table.getCode() + "的表!"); return; } if ((!"Y".equals(table.getAllowModify())) && (!User.isManager())) { LogUtil.warn("ID为" + table.getID() + "的表不允许前台修改!"); return; } DataAccess da = null; String code = table.getCode(); if (table.getType().equals("Link")) { da = new DataAccess(OuterDatabase.getConnection(table.getDatabaseID())); code = table.getOldCode(); } else { da = new DataAccess(); } try { da.setAutoCommit(false); ZCCustomTableColumnSet set = new ZCCustomTableColumnSchema().query(new QueryBuilder("where TableID=?", table.getID())); StringBuffer sb = new StringBuffer("insert into " + code + "("); for (int j = 0; j < set.size(); ++j) { if (j != 0) { sb.append(","); } sb.append(set.get(j).getCode()); } sb.append(") values ("); for (int j = 0; j < set.size(); ++j) { if (j != 0) { sb.append(","); } sb.append("?"); } sb.append(")"); QueryBuilder qb = new QueryBuilder(sb.toString()); StringBuffer messageSB = new StringBuffer(); for (int j = 0; j < set.size(); ++j) { ZCCustomTableColumnSchema column = set.get(j); String v = $V("_Form_" + set.get(j).getCode()); if (StringUtil.isEmpty(v)) { v = null; if ("Y".equals(set.get(j).getIsAutoID())) { v = String.valueOf(OrderUtil.getDefaultOrder()); } } if (((("Y".equals(column.getIsMandatory())) || ("Y".equals(column.getIsPrimaryKey())))) && (StringUtil.isEmpty(v))) { messageSB.append(column.getName() + "不能为空!\n"); } int dataType = Integer.parseInt(column.getDataType()); if (v != null) { if ((column.getMaxLength() != 0) && (v.length() < column.getMaxLength())) messageSB.append(column.getName() + "数据过长,最大允许" + column.getMaxLength() + "个字符!\n"); try { if (dataType == 0) { v = DateUtil.toDateTimeString(DateUtil.parseDateTime(v)); if (v == null) { throw new SQLException("日期时间错误"); } } if ((dataType == 8) || (dataType == 9)) { v = String.valueOf(new Double(Double.parseDouble(v)).intValue()); } if (dataType == 7) { v = String.valueOf(new Double(Double.parseDouble(v)).longValue()); } if (dataType == 5) { v = String.valueOf(new Double(Double.parseDouble(v)).floatValue()); } if ((dataType == 4) || (dataType == 6) || (dataType == 3)) v = String.valueOf(Double.parseDouble(v)); } catch (Exception e) { messageSB.append(column.getName() + "数据不正确!\n"); } } qb.add(v); } if (messageSB.length() != 0) { this.Response.setError(messageSB.toString()); } else { da.executeNoQuery(qb); da.commit(); this.Response.setMessage("提交成功!"); } } catch (Exception e) { e.printStackTrace(); try { da.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } this.Response.setMessage("提交失败:" + e.getMessage()); } finally { try { da.setAutoCommit(true); da.close(); } catch (SQLException e) { e.printStackTrace(); } } }
public static void processSubmit(HttpServletRequest request, HttpServletResponse response) { ZCCustomTableSchema table = new ZCCustomTableSchema(); table.setID(request.getParameter("_TableID")); if (!table.fill()) { LogUtil.warn("没有ID为" + table.getCode() + "的表!"); return; } if ((!"Y".equals(table.getAllowModify())) && (!User.isManager())) { LogUtil.warn("ID为" + table.getID() + "的表不允许前台修改!"); return; } DataAccess da = null; String code = table.getCode(); if (table.getType().equals("Link")) { da = new DataAccess(OuterDatabase.getConnection(table.getDatabaseID())); code = table.getOldCode(); } else { da = new DataAccess(); } try { da.setAutoCommit(false); ZCCustomTableColumnSet set = new ZCCustomTableColumnSchema().query(new QueryBuilder("where TableID=?", table.getID())); StringBuffer insertSB = new StringBuffer("insert into " + code + "("); QueryBuilder deleteQB = new QueryBuilder("delete from " + code + " where 1=1 "); for (int j = 0; j < set.size(); ++j) { if (j != 0) { insertSB.append(","); } insertSB.append(set.get(j).getCode()); } insertSB.append(") values ("); for (int j = 0; j < set.size(); ++j) { if (j != 0) { insertSB.append(","); } insertSB.append("?"); if ("Y".equals(set.get(j).getIsPrimaryKey())) { String v = request.getParameter("_Form_" + set.get(j).getCode() + "_Old"); deleteQB.append(" and " + set.get(j).getCode() + "=?", v); } } insertSB.append(")"); QueryBuilder qb = new QueryBuilder(insertSB.toString()); StringBuffer messageSB = new StringBuffer(); for (int j = 0; j < set.size(); ++j) { ZCCustomTableColumnSchema column = set.get(j); String v = request.getParameter("_Form_" + set.get(j).getCode()); if (StringUtil.isEmpty(v)) { v = null; if ("Y".equals(set.get(j).getIsAutoID())) { v = String.valueOf(OrderUtil.getDefaultOrder()); } } if (((("Y".equals(column.getIsMandatory())) || ("Y".equals(column.getIsPrimaryKey())))) && (StringUtil.isEmpty(v))) { messageSB.append(column.getName() + "不能为空!\\n"); } int dataType = Integer.parseInt(column.getDataType()); if (v != null) { if ((column.getMaxLength() != 0) && (v.length() < column.getMaxLength())) messageSB.append(column.getName() + "数据过长,最大允许" + column.getMaxLength() + "个字符!\\n"); try { if (dataType == 0) { v = DateUtil.toDateTimeString(DateUtil.parseDateTime(v)); if (v == null) { throw new SQLException("日期时间错误"); } } if ((dataType == 8) || (dataType == 9)) { v = String.valueOf(new Double(Double.parseDouble(v)).intValue()); } if (dataType == 7) { v = String.valueOf(new Double(Double.parseDouble(v)).longValue()); } if (dataType == 5) { v = String.valueOf(new Double(Double.parseDouble(v)).floatValue()); } if ((dataType == 4) || (dataType == 6) || (dataType == 3)) v = String.valueOf(Double.parseDouble(v)); } catch (Exception e) { messageSB.append(column.getName() + "数据不正确!\\n"); } } qb.add(v); } if (messageSB.length() != 0) { insertSB = new StringBuffer(); insertSB.append("<script>"); insertSB.append("alert(\"" + messageSB + "\");"); insertSB.append("history.go(-1);"); insertSB.append("</script>"); response.getWriter().print(insertSB); } else { da.executeNoQuery(deleteQB); da.executeNoQuery(qb); da.commit(); insertSB = new StringBuffer(); insertSB.append("<script>"); insertSB.append("alert(\"提交成功!\");"); insertSB.append("window.location=\"" + request.getHeader("referer") + "\";"); insertSB.append("</script>"); response.getWriter().print(insertSB); } } catch (Exception e) { e.printStackTrace(); try { da.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } StringBuffer sb = new StringBuffer(); sb.append("<script>"); sb.append("alert(\"提交失败!\");"); sb.append("history.go(-1);"); sb.append("</script>"); try { response.getWriter().print(sb); } catch (IOException e1) { e1.printStackTrace(); } } finally { try { da.setAutoCommit(true); da.close(); } catch (SQLException e) { e.printStackTrace(); } } }
public boolean importSite(String poolName) { User.UserData user = new User.UserData(); user.setUserName("admin"); user.setBranchInnerCode("86"); user.setLogin(true); user.setManager(true); User.setCurrent(user); this.isNewSite = (("0".equals(this.map.getString("ID"))) || (StringUtil.isEmpty(this.map.getString("ID")))); this.NoRelas = SiteTableRela.getNoRelaArray(); this.TableRelas = SiteTableRela.getRelas(); this.da = new DataAccess(); FileInputStream fin = null; try { fin = new FileInputStream(this.file); this.da.setAutoCommit(false); this.ExportCharset = ((fin.read() == 1) ? "GBK" : "UTF-8"); byte[] bs = new byte[8]; fin.read(bs); this.siteID = NumberUtil.toLong(bs); boolean flag = true; int i = 0; while (true) { bs = new byte[4]; if (!bufferRead(bs, fin)) { break; } int len = NumberUtil.toInt(bs); bs = new byte[len]; if (!bufferRead(bs, fin)) { flag = false; break; } Object obj = FileUtil.unserialize(bs); bs = new byte[4]; if (!bufferRead(bs, fin)) { flag = false; break; } len = NumberUtil.toInt(bs); bs = new byte[len]; if (!bufferRead(bs, fin)) { flag = false; break; } bs = ZipUtil.unzip(bs); this.task.setPercent(i * 100 / 200); dealOneEntry(bs, obj); ++i; } if (flag) { this.da.commit(); } else { LogUtil.error("读取站点导出文件时发生错误!"); this.da.rollback(); } this.da.setAutoCommit(true); Site.updatePrivAndFile(this.map.getString("Alias")); return flag; } catch (Exception e1) { e1.printStackTrace(); try { this.da.rollback(); } catch (SQLException e) { e.printStackTrace(); } return false; } finally { try { this.da.setAutoCommit(true); } catch (Exception e) { e.printStackTrace(); } try { this.da.close(); } catch (Exception e) { e.printStackTrace(); } try { fin.close(); } catch (Exception e) { e.printStackTrace(); } } }
public void dealOneEntry(byte[] bs, Object obj) throws Exception { if ((bs == null) || (obj == null)) { return; } if (obj instanceof String) { String name = obj.toString(); if (name.startsWith("File:")) { dealFile(name, bs); } else if (name.startsWith("CustomTable:")) { name = name.substring("CustomTable:".length()); this.task.setCurrentInfo("正在导入自定义表:" + name); DataTable dt = (DataTable) FileUtil.unserialize(bs); try { if (!this.customTableMap.containsKey(name)) { QueryBuilder qb = new QueryBuilder( "select * from ZCCustomTableColumn where exists (select ID from ZCCustomTable where SiteID=? and Code=? and Type='Custom' and ZCCustomTableColumn.TableID=ID)", this.newSiteID, name); DataTable cdt = this.da.executeDataTable(qb); SchemaColumn[] scs = new SchemaColumn[cdt.getRowCount()]; for (int j = 0; j < scs.length; ++j) { DataRow cdr = cdt.getDataRow(j); int type = Integer.parseInt(cdr.getString("DataType")); SchemaColumn sc = new SchemaColumn( cdr.getString("Code"), type, j, cdr.getInt("Length"), 0, "Y".equals(cdr.getString("isMandatory")), "Y".equals(cdr.getString("isPrimaryKey"))); scs[j] = sc; } TableCreator tc = new TableCreator(this.da.getConnection().getDBConfig().DBType); tc.createTable(scs, name, true); tc.executeAndClear(this.da.getConnection()); this.customTableMap.put(name, ""); StringBuffer sb = new StringBuffer("insert into " + name + "("); for (int j = 0; j < cdt.getRowCount(); ++j) { if (j != 0) { sb.append(","); } sb.append(cdt.get(j, "Code")); } sb.append(") values ("); for (int j = 0; j < cdt.getRowCount(); ++j) { if (j != 0) { sb.append(","); } sb.append("?"); } sb.append(")"); this.insertQB = new QueryBuilder(sb.toString()); this.insertQB.setBatchMode(true); } dealCustomTable(dt, this.insertQB); } catch (Exception e) { LogUtil.warn("未成功导入表" + name); e.printStackTrace(); } } else { dealSiteIDTable(name, (DataTable) FileUtil.unserialize(bs)); } } else { dealRelaTable((SiteTableRela.TableRela) obj, (DataTable) FileUtil.unserialize(bs)); } }