因为EcoreUtil.copy()发现是shadow copy,后来解决了。在某开源代码中找到,实现方法如下:
public static <T extends Core> T deepCopy(T core) {
Stack<EObject> work = new Stack<EObject>();
work.push(core);
Collection<EObject> collection = new LinkedHashSet<EObject>();
while (!work.isEmpty()) {
EObject o = work.pop();
if (collection.contains(o)) {
continue;
}
collection.add(o);
List<EObject> list = o.eContents();
for (EObject eo : list) {
if (!collection.contains(eo)) {
work.push(eo);
}
}
list = o.eCrossReferences();
for (EObject eo : list) {
if (!collection.contains(eo)) {
work.push(eo);
}
}
}
EcoreUtil.Copier copier = new EcoreUtil.Copier();
collection = copier.copyAll(collection);
copier.copyReferences();
T copy = (T) collection.iterator().next();
// The name is not part of the known EMF attribute set.
copy.setName(core.getName());
return copy;
}
分享到:
相关推荐
在处理XML数据时,EMF提供了一种高效且灵活的方式,能够将XML文档转换为可操作的对象模型,进而进行读取、解析和编辑。下面将详细介绍EMF读取XML的相关知识点。 1. **EMF模型与XML的关系** - EMF模型是面向对象的...
EMF文件格式的内部结构非常复杂,包括多个层次的数据结构,如记录头、记录体、对象表等。 1. **记录头**:定义了EMF文件的基本属性,如文件类型、版本号等。 2. **记录体**:包含了实际的绘图指令,这些指令按照...
EMF(Enhanced Metafile Format)是Windows操作系统中用于存储图形图像的一种文件格式,它扩展了早期的WMF(Windows Metafile Format)格式,提供了更高级的功能和更高的图像质量。这个压缩包包含了深入理解EMF文件...
4. 使用转换上下文将SVGGraphics2D对象写入EMF输出流,通常是FileOutputStream。 5. 关闭输入流和输出流。 在实际应用中,你可能需要处理更多的细节,比如错误处理、SVG文件的编码问题、用户自定义的转换选项等。...
// 创建一个BufferedImage对象,用于保存PNG图像 BufferedImage image = new BufferedImage(emf.getWidth(), emf.getHeight(), BufferedImage.TYPE_INT_ARGB); // 将EMF渲染到BufferedImage上 Graphics2D g2d =...
EMF(Enhanced Metafile)文件是Windows操作系统中使用的一种矢量图形和图元文件格式。这种文件类型被广泛用于存储图形、图像和打印数据,因为它支持复杂的图形操作,如曲线绘制、渐变填充和透明效果。EMF文件是GDI+...
EMF的序列化机制可以处理复杂的模型结构,包括循环引用、嵌套对象等,确保了模型数据的完整性和一致性。 #### 六、EMF在实际项目中的应用 EMF在各种领域都有广泛的应用,特别是在复杂系统的建模和设计中。例如,在...
- **创建Bitmap对象**:然后,创建一个新的Bitmap对象,设置它的大小为EMF图像的尺寸。 - **创建Graphics对象**:使用Graphics.FromImage()方法创建一个Graphics对象,用于在Bitmap上绘图。 - **绘制EMF到Bitmap*...
它提供了一种统一的方式来表示、存储和操作复杂的结构化数据,是面向对象建模的强大工具。本教程旨在帮助初学者理解EMF的基础概念,并通过实践掌握EMF插件的使用。 1. **EMF基础** EMF基于MDE(Model Driven ...
EMF(Enhanced Metafile)和WMF(Windows Metafile)是两种常见的矢量图形文件格式,主要用于存储图像数据,特别是在Windows操作系统环境下。这两种格式都允许无损缩放和复杂图形的绘制,但EMF是WMF的增强版本,提供...
EMF(Eclipse Modeling Framework)模型文件对比/比较(emf.compare)是针对基于EMF构建的模型文件进行差异分析的工具。EMF是Eclipse项目中的一个子项目,它提供了一种创建、操作和共享复杂的领域特定语言(DSL)...
3. **持久性**:EMF支持将模型对象序列化为XML文件,使得模型数据可以在不同时间点保存和恢复,同时也方便了跨系统数据交换。 4. **图形用户界面(GUI)编辑器**:EMF提供了一个框架,可以快速构建基于模型的图形...
标题中提到的"emf-runtime"是指EMF运行时环境,它是EMF的核心组成部分,包含了运行时类库和API,用于支持模型对象的创建、操作和持久化。这个环境使得开发者能够在应用程序中使用EMF模型,而无需关心底层实现的复杂...
无论你是对面向对象建模有深厚理解的开发者,还是对此不太熟悉的新手,EMF都能以较低的学习成本提供高效、准确且易于定制的Java代码。 **介绍** EMF中的“模型”通常指的是类图、协作图、状态图等。统一建模语言...
增强型元文件是一种矢量图形格式,广泛用于Windows操作系统中,它可以保存图形对象的描述,包括线条、曲线、填充区域等。而位图则是像素图像,适用于存储照片或包含大量细节的图像。 描述中的“emf转bmpemf”可能是...
### Eclipse EMF与GEF详解 #### 一、Eclipse EMF简介 ##### 1.1 什么是Eclipse Modeling Framework (EMF) Eclipse Modeling Framework(EMF)是Eclipse平台的一部分,它提供了一套完整的工具和服务来支持建模工作...
在EMF中,XSD文件可以被用来作为模型的定义,生成相应的Java类和API,这样开发人员就可以在代码中直接操作这些模型对象。 GUI设计是构建用户界面的重要环节,EMF结合GEF (Graphical Editing Framework) 提供了一套...
EMF API文档是开发者理解和使用EMF的关键资源,它详细解释了EMF的各种类、接口、方法和概念,帮助开发者在构建模型驱动的应用时进行有效的编程。文档通常包括以下几个主要部分: 1. **基础概念**:EMF的基础概念...
EMF 提供了数据模型的创建、存储、序列化以及与Java对象之间的映射。开发者可以通过EMF定义自己的领域特定语言(DSL),并利用EMF生成对应的Java类和API,从而简化模型的编程和管理。此外,EMF还支持XMI(XML ...