在我的系统中,用户可以通过代码编辑器或GUI对JBoss Drools代码进行更改。我的问题是,如果用户在代码编辑器中进行更改,然后在GUI中进行更改,则代码编辑器中的更改将丢失。因为GUI工具通过获取代码模板并插入通过参数进行的更改(FreeMarkerTemplateUtils.processTemplateIntoString)来工作。
是否有人对此问题有任何建议?
一种想法是使用Diff Match Patch以某种方式将GUI中的更改与代码编辑器中的更改合并。如果这是你可以分享一些代码的方式(我在网上找到的大部分内容仅用于比较文件,而不是用于从字符串生成实际差异)。
感谢。
答案 0 :(得分:0)
首先假设,代码编辑器中的更改模式总是与GUI使用的一致?
例如,如果文件正文模式类似于<some text .........>___ReplaceThisString__<some more text ..............>
如果是这样的话,你可以在GUI保存上编写一个方法,它可以像大多数代码库那样工作,就像SVN的diff和merge一样。
在代码编辑器(左侧)和GUI(右侧)保存的文件之间逐行比较,您将有3个条件,
理想情况下,您可以毫无困难地合并左/右,并使用逻辑进行任何更改。
对于第三种情况,您必须让用户决定采取什么措施来保持文件的正确性,否则文件可能无法通过下一个程序正常运行。
为了让用户决定,您可以创建一个显示用户的比较窗口,两个文件的差异,让用户只需点击需要拍摄的文件。
理想情况下,在所有情况下,最好显示diff并让用户确认合并没有破坏文件的内容完整性。
这里有两件事很重要:
A)合并功能应该用于代码编辑器以及GUI;每当有人试图从代码编辑器中保存一些东西。如果不能这样做(比如说你使用的是第三方的代码编辑器,例如记事本),你应该选择2步保存促销解决方案。
在这种情况下,只保存不会更改实际文件,而是将文件写在不同的位置,作为临时文件。
在步骤2中,“提升步骤” - 您应该有一个工具(使用上述策略构建一个)来比较临时文件和原始文件。然后,用户可以在视觉上合并更改。
同样适用于GUI编辑器。
B)无论何时进行比较和合并,都必须锁定原始文件以进行修改,以便其他用户不会更改文件,而有人正在合并。