From 0cde4e25916f4902d989dd5692295bac5c538a29 Mon Sep 17 00:00:00 2001 From: zack Date: Mon, 21 Nov 2016 15:20:25 +0800 Subject: [PATCH 1/6] =?UTF-8?q?REPORT-841=20=E8=A1=A8=E5=8D=95=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E9=9B=86=E9=87=8D=E5=91=BD=E5=90=8D=E6=8A=A5=E8=A1=A8?= =?UTF-8?q?=E5=9D=97=E5=86=85=E5=AE=B9=E8=81=94=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/data/BasicTableDataTreePane.java | 6 +++--- .../com/fr/design/data/datapane/TableDataTreePane.java | 8 +++++++- .../com/fr/design/mainframe/FormCreatorDropTarget.java | 5 ++++- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/designer_base/src/com/fr/design/data/BasicTableDataTreePane.java b/designer_base/src/com/fr/design/data/BasicTableDataTreePane.java index a76d4a105..92f02d5f4 100644 --- a/designer_base/src/com/fr/design/data/BasicTableDataTreePane.java +++ b/designer_base/src/com/fr/design/data/BasicTableDataTreePane.java @@ -428,11 +428,11 @@ public abstract class BasicTableDataTreePane extends DockingView implements Resp } /** - * 合并数据集 + * 合并数据集并返回自动更改数据集名字的新老名字键值对 * @param srcName 数据集来源(比如报表块,就是报表块的名称) * @param tableDataSource 数据集 */ - public void addTableData(String srcName, TableDataSource tableDataSource) { - + public Map addTableData(String srcName, TableDataSource tableDataSource) { + return new HashMap<>(0); } } diff --git a/designer_base/src/com/fr/design/data/datapane/TableDataTreePane.java b/designer_base/src/com/fr/design/data/datapane/TableDataTreePane.java index 219093c6d..959abc98f 100644 --- a/designer_base/src/com/fr/design/data/datapane/TableDataTreePane.java +++ b/designer_base/src/com/fr/design/data/datapane/TableDataTreePane.java @@ -275,13 +275,15 @@ public class TableDataTreePane extends BasicTableDataTreePane { * @param srcName 数据集来源(比如报表块,就是报表块的名称) * @param tableDataSource 数据集 */ - public void addTableData(String srcName, TableDataSource tableDataSource) { + public Map addTableData(String srcName, TableDataSource tableDataSource) { + Map tdNameMap=new HashMap<>(); allDSNames = DesignTableDataManager.getAllDSNames(tc.getBook()); DesignTableDataManager.setThreadLocal(DesignTableDataManager.NO_PARAMETER); TableDataSource tds = tc.getBook(); Iterator tdIterator = tableDataSource.getTableDataNameIterator(); while (tdIterator.hasNext()) { String tdName = (String) tdIterator.next(); + String oldName = tdName; TableData td = tableDataSource.getTableData(tdName); if (tds.getTableData(tdName) != null || isDsNameRepeaded(tdName)) {//如果有同名的就拼上来源名称 tdName = srcName + tdName; @@ -292,8 +294,12 @@ public class TableDataTreePane extends BasicTableDataTreePane { tdName += i; } tds.putTableData(tdName, td); + if (!ComparatorUtils.equals(oldName, tdName)) { + tdNameMap.put(oldName, tdName); + } } tc.parameterChanged(); dataTree.refresh(); + return tdNameMap; } } \ No newline at end of file diff --git a/designer_form/src/com/fr/design/mainframe/FormCreatorDropTarget.java b/designer_form/src/com/fr/design/mainframe/FormCreatorDropTarget.java index 7e7035bb7..b4bfe270f 100644 --- a/designer_form/src/com/fr/design/mainframe/FormCreatorDropTarget.java +++ b/designer_form/src/com/fr/design/mainframe/FormCreatorDropTarget.java @@ -26,6 +26,7 @@ import java.awt.dnd.DropTarget; import java.awt.dnd.DropTargetDragEvent; import java.awt.dnd.DropTargetDropEvent; import java.awt.dnd.DropTargetEvent; +import java.util.Map; /** * 添加模式下鼠标事件处理器。 @@ -88,7 +89,9 @@ public class FormCreatorDropTarget extends DropTarget { SharableElementCaseEditor sharableEditor = ShareLoader.getLoader().getSharedElCaseEditorById(shareId); ElCaseBindInfo bindInfo = ShareLoader.getLoader().getElCaseBindInfoById(shareId); if (sharableEditor != null && bindInfo != null) { - TableDataTreePane.getInstance(DesignModelAdapter.getCurrentModelAdapter()).addTableData(bindInfo.getName(),sharableEditor.getTableDataSource()); + Map tdNameMap = TableDataTreePane.getInstance(DesignModelAdapter.getCurrentModelAdapter()).addTableData(bindInfo.getName(), sharableEditor.getTableDataSource()); + //合并数据集之后,可能会有数据集名称变化,做一下联动 + sharableEditor.batchRenameTdName(tdNameMap); } } Widget widget = (addingXCreator.getTopLayout() != null) ? (addingXCreator.getTopLayout().toData()) : addingXCreator.toData(); From 67d4b3f4f6b4834c8236de9701ce910574335cee Mon Sep 17 00:00:00 2001 From: zack Date: Mon, 21 Nov 2016 15:21:50 +0800 Subject: [PATCH 2/6] d --- .../src/com/fr/design/data/datapane/TableDataTreePane.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_base/src/com/fr/design/data/datapane/TableDataTreePane.java b/designer_base/src/com/fr/design/data/datapane/TableDataTreePane.java index 959abc98f..cbab58533 100644 --- a/designer_base/src/com/fr/design/data/datapane/TableDataTreePane.java +++ b/designer_base/src/com/fr/design/data/datapane/TableDataTreePane.java @@ -290,7 +290,7 @@ public class TableDataTreePane extends BasicTableDataTreePane { } int i = 0; while (tds.getTableData(tdName) != null) { - i++;//如果拼上名字后依然已经存在就加编号 + i++;//如果拼上名字后依然已经存在就加编号 tdName += i; } tds.putTableData(tdName, td); From 1cbc5c1f53ba467e0a975d0918f8fb4880326d2a Mon Sep 17 00:00:00 2001 From: zack Date: Mon, 21 Nov 2016 15:22:10 +0800 Subject: [PATCH 3/6] d --- .../src/com/fr/design/data/datapane/TableDataTreePane.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/designer_base/src/com/fr/design/data/datapane/TableDataTreePane.java b/designer_base/src/com/fr/design/data/datapane/TableDataTreePane.java index cbab58533..959abc98f 100644 --- a/designer_base/src/com/fr/design/data/datapane/TableDataTreePane.java +++ b/designer_base/src/com/fr/design/data/datapane/TableDataTreePane.java @@ -290,7 +290,7 @@ public class TableDataTreePane extends BasicTableDataTreePane { } int i = 0; while (tds.getTableData(tdName) != null) { - i++;//如果拼上名字后依然已经存在就加编号 + i++;//如果拼上名字后依然已经存在就加编号 tdName += i; } tds.putTableData(tdName, td); From 284fae5ef419b3d21925195f32bf59eb79b3c075 Mon Sep 17 00:00:00 2001 From: zack Date: Mon, 21 Nov 2016 15:53:33 +0800 Subject: [PATCH 4/6] =?UTF-8?q?REPORT-841=20=E4=BB=A3=E7=A0=81=E8=B4=A8?= =?UTF-8?q?=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/com/fr/design/data/datapane/TableDataTreePane.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/designer_base/src/com/fr/design/data/datapane/TableDataTreePane.java b/designer_base/src/com/fr/design/data/datapane/TableDataTreePane.java index 959abc98f..5a893803c 100644 --- a/designer_base/src/com/fr/design/data/datapane/TableDataTreePane.java +++ b/designer_base/src/com/fr/design/data/datapane/TableDataTreePane.java @@ -38,6 +38,7 @@ import java.awt.dnd.DnDConstants; import java.awt.event.ActionEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; +import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.Map; @@ -276,7 +277,7 @@ public class TableDataTreePane extends BasicTableDataTreePane { * @param tableDataSource 数据集 */ public Map addTableData(String srcName, TableDataSource tableDataSource) { - Map tdNameMap=new HashMap<>(); + Map tdNameMap = new HashMap<>(); allDSNames = DesignTableDataManager.getAllDSNames(tc.getBook()); DesignTableDataManager.setThreadLocal(DesignTableDataManager.NO_PARAMETER); TableDataSource tds = tc.getBook(); @@ -300,6 +301,6 @@ public class TableDataTreePane extends BasicTableDataTreePane { } tc.parameterChanged(); dataTree.refresh(); - return tdNameMap; + return Collections.unmodifiableMap(tdNameMap); } } \ No newline at end of file From 276847ff480370b4e9622c63d15b6db3cb275448 Mon Sep 17 00:00:00 2001 From: zack Date: Mon, 21 Nov 2016 20:45:05 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1=20=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E5=A4=8D=E7=94=A8=E7=9A=84=E8=BF=9C=E7=A8=8B=E5=AE=89?= =?UTF-8?q?=E8=A3=85=EF=BC=8C=E7=8E=B0=E5=9C=A8=E6=98=AF=E6=8A=8Areu?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E6=8B=86=E5=88=86=E6=88=90=E4=B8=A4=E4=B8=AA?= =?UTF-8?q?xml=E5=88=86=E5=88=AB=E4=BC=A0=E7=BB=99=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E7=AB=AF=EF=BC=8C=E7=9B=B4=E6=8E=A5=E7=BB=99=E6=AD=A3=E6=96=87?= =?UTF-8?q?=E5=A1=9Ereu=E6=96=87=E4=BB=B6=E7=9A=84=E4=BA=8C=E8=BF=9B?= =?UTF-8?q?=E5=88=B6=E4=BC=9A=E5=9B=A0=E4=B8=BAtostring=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E9=80=A0=E6=88=90=E6=95=B0=E6=8D=AE=E4=B8=A2=E5=A4=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- designer_base/src/com/fr/env/RemoteEnv.java | 60 ++++++++++++--------- 1 file changed, 36 insertions(+), 24 deletions(-) diff --git a/designer_base/src/com/fr/env/RemoteEnv.java b/designer_base/src/com/fr/env/RemoteEnv.java index ce7118e69..70c18fbd0 100644 --- a/designer_base/src/com/fr/env/RemoteEnv.java +++ b/designer_base/src/com/fr/env/RemoteEnv.java @@ -2114,6 +2114,7 @@ public class RemoteEnv implements Env { StableUtils.mkdirs(target); File cacheDir = null; File zip = null; + OutputStream out = null; try { HashMap para = new HashMap(); para.put("op", "fr_remote_design"); @@ -2122,16 +2123,15 @@ public class RemoteEnv implements Env { para.put("currentUsername", this.getUser()); HttpClient client = createHttpMethod(para); - InputStream input = client.getResponseStream(); + InputStream input = client.getResponseStream();//拿到服务端传过来的整个共享文件夹的压缩文件的文件流 zip = new File(StableUtils.pathJoin(CacheManager.getProviderInstance().getCacheDirectory().getAbsolutePath()), "share.zip"); cacheDir = new File(StableUtils.pathJoin(CacheManager.getProviderInstance().getCacheDirectory().getAbsolutePath()), ShareConstants.DIR_SHARE_CACHE); StableUtils.deleteFile(cacheDir); StableUtils.mkdirs(cacheDir); StableUtils.makesureFileExist(zip); - FileOutputStream out = new FileOutputStream(zip); - IOUtils.copyBinaryTo(input, out); - out.flush(); - out.close(); + out = new FileOutputStream(zip); + IOUtils.copyBinaryTo(input, out);//放到本地缓存目录下 + IOUtils.unzip(zip, cacheDir.getAbsolutePath(), EncodeConstants.ENCODING_GBK);//先解压到临时目录 if (cacheDir.exists() && cacheDir.isDirectory()) { return cacheDir.listFiles(new FilenameFilter() { @@ -2144,6 +2144,10 @@ public class RemoteEnv implements Env { } catch (Exception e) { FRContext.getLogger().error(e.getMessage()); } finally { + if (out != null) { + out.flush(); + out.close(); + } StableUtils.deleteFile(zip); } return new File[0]; @@ -2151,25 +2155,33 @@ public class RemoteEnv implements Env { @Override public boolean installREUFile(File reuFile) { -// if (reuFile == null) { -// return false; -// } -// try { -// HashMap para = new HashMap(); -// para.put("op", "fr_remote_design"); -// para.put("cmd", "design_install_reufile"); -// para.put("current_uid", this.createUserID()); -// para.put("currentUsername", this.getUser()); -// para.put("reuFileName", reuFile.getName()); -// -// HttpClient client = createHttpMethod(para); -// client.setContent(IOUtils.inputStream2Bytes(new FileInputStream(reuFile))); -// InputStream input = execute4InputStream(client); -// return ComparatorUtils.equals(stream2String(input), "true"); -// } catch (Exception e) { -// return false; -// } - return false; + if (reuFile == null) { + return false; + } + File tempFile = new File(CacheManager.getProviderInstance().getCacheDirectory(), "temp_remote"); + IOUtils.unzip(reuFile, tempFile.getAbsolutePath()); + String shareXMLName = StableUtils.pathJoin(tempFile.getAbsolutePath(), ShareConstants.NAME_XML_MODULE); + String helpXMLName = StableUtils.pathJoin(tempFile.getAbsolutePath(), ShareConstants.NAME_XML_HELP); + try { + HashMap para = new HashMap(); + para.put("op", "fr_remote_design"); + para.put("cmd", "design_install_reufile"); + para.put("current_uid", this.createUserID()); + para.put("currentUsername", this.getUser()); + para.put("reuFileName", reuFile.getName()); + + HttpClient client = createHttpMethod(para); + client.setContent(IOUtils.inputStream2Bytes(new FileInputStream(new File(shareXMLName)))); + InputStream input = execute4InputStream(client); + client.release(); + para.put("isComplete", "true"); + HttpClient client1 = createHttpMethod(para); + client1.setContent(IOUtils.inputStream2Bytes(new FileInputStream(new File(helpXMLName)))); + InputStream input1 = execute4InputStream(client1); + return ComparatorUtils.equals(stream2String(input), "true") && ComparatorUtils.equals(stream2String(input1), "true"); + } catch (Exception e) { + return false; + } } @Override From a848d5736eacea80e47636efb4d173f90254fe33 Mon Sep 17 00:00:00 2001 From: zack Date: Mon, 21 Nov 2016 20:53:58 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1=20PMD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mainframe/FormCreatorDropTarget.java | 89 +++++++++---------- 1 file changed, 44 insertions(+), 45 deletions(-) diff --git a/designer_form/src/com/fr/design/mainframe/FormCreatorDropTarget.java b/designer_form/src/com/fr/design/mainframe/FormCreatorDropTarget.java index b4bfe270f..18ad2ab71 100644 --- a/designer_form/src/com/fr/design/mainframe/FormCreatorDropTarget.java +++ b/designer_form/src/com/fr/design/mainframe/FormCreatorDropTarget.java @@ -56,15 +56,11 @@ public class FormCreatorDropTarget extends DropTarget { private void adding(int x, int y) { // 当前鼠标所在的组件 XCreator hoveredComponent = designer.getComponentAt(x, y); - // 获取该组件所在的焦点容器 XLayoutContainer container = XCreatorUtils.getHotspotContainer(hoveredComponent); - //cardTagLayout里用到 container.stopAddingState(designer); - boolean success = false; - if (container != null) { // 如果是容器,则调用其acceptComponent接受组件 AddingModel model = designer.getAddingModel(); @@ -77,7 +73,6 @@ public class FormCreatorDropTarget extends DropTarget { } cancelPromptWidgetForbidEnter(); } - if (success) { // 如果添加成功,则触发相应事件 XCreator xCreator = container.acceptType(XWParameterLayout.class) ? designer.getParaComponent() : designer.getRootComponent(); @@ -101,7 +96,6 @@ public class FormCreatorDropTarget extends DropTarget { } else { Toolkit.getDefaultToolkit().beep(); } - // 取消提示 designer.setPainter(null); // 切换添加状态到普通状态 @@ -132,47 +126,9 @@ public class FormCreatorDropTarget extends DropTarget { //提示组件是否可以拖入 promptUser(x, y, container); if (container != null) { - HoverPainter painter = null; - if (container != current || designer.getPainter() == null) { - // 如果焦点容器不是当前容器 - if (current != null) { - // 取消前一个焦点容器的提示渲染器 - designer.setPainter(null); - } - //获取painter的时候要考虑布局之间嵌套的问题 - XLayoutContainer xLayoutContainer = container.getTopLayout(); - if (xLayoutContainer != null && xLayoutContainer.getParent() != null - && ((XLayoutContainer) xLayoutContainer.getParent()).acceptType(XWAbsoluteLayout.class)) { - if (!xLayoutContainer.isEditable()) { - xLayoutContainer = (XLayoutContainer) xLayoutContainer.getParent(); - } - } - painter = AdapterBus.getContainerPainter(designer, - xLayoutContainer != null && xLayoutContainer.acceptType(XWAbsoluteLayout.class) ? xLayoutContainer : container); - - // 为界面设计器设置提示渲染提示器 - designer.setPainter(painter); - - // 将当前容器更新为新的容器 - current = container; - } else { - // 获取当前设计界面的提示渲染器 - Painter p = designer.getPainter(); - if (p instanceof HoverPainter) { - painter = (HoverPainter) p; - } - } + dealWithContainer(x, y, container); - if (painter != null) { - // 为提示渲染器设置焦点位置、区域等渲染参数 - Rectangle rect = ComponentUtils.getRelativeBounds(container); - rect.x -= designer.getArea().getHorizontalValue(); - rect.y -= designer.getArea().getVerticalValue(); - painter.setRenderingBounds(rect); - painter.setHotspot(new Point(x, y)); - painter.setCreator(addingModel.getXCreator()); - } } else { // 如果鼠标不在任何组件上,则取消提示器 designer.setPainter(null); @@ -181,6 +137,49 @@ public class FormCreatorDropTarget extends DropTarget { designer.repaint(); } + private void dealWithContainer(int x, int y, XLayoutContainer container) { + HoverPainter painter = null; + + if (container != current || designer.getPainter() == null) { + // 如果焦点容器不是当前容器 + if (current != null) { + // 取消前一个焦点容器的提示渲染器 + designer.setPainter(null); + } + //获取painter的时候要考虑布局之间嵌套的问题 + XLayoutContainer xLayoutContainer = container.getTopLayout(); + if (xLayoutContainer != null && xLayoutContainer.getParent() != null + && ((XLayoutContainer) xLayoutContainer.getParent()).acceptType(XWAbsoluteLayout.class)) { + if (!xLayoutContainer.isEditable()) { + xLayoutContainer = (XLayoutContainer) xLayoutContainer.getParent(); + } + } + painter = AdapterBus.getContainerPainter(designer, + xLayoutContainer != null && xLayoutContainer.acceptType(XWAbsoluteLayout.class) ? xLayoutContainer : container); + + // 为界面设计器设置提示渲染提示器 + designer.setPainter(painter); + + // 将当前容器更新为新的容器 + current = container; + } else { + // 获取当前设计界面的提示渲染器 + Painter p = designer.getPainter(); + if (p instanceof HoverPainter) { + painter = (HoverPainter) p; + } + } + if (painter != null) { + // 为提示渲染器设置焦点位置、区域等渲染参数 + Rectangle rect = ComponentUtils.getRelativeBounds(container); + rect.x -= designer.getArea().getHorizontalValue(); + rect.y -= designer.getArea().getVerticalValue(); + painter.setRenderingBounds(rect); + painter.setHotspot(new Point(x, y)); + painter.setCreator(addingModel.getXCreator()); + } + } + private void promptUser(int x, int y, XLayoutContainer container) { if (!addingModel.getXCreator().canEnterIntoParaPane() && container.acceptType(XWParameterLayout.class)) { promptButton.setText(Inter.getLocText("FR-Designer_Forbid_Drag_into_Para_Pane"));