`
sxw7362693
  • 浏览: 60717 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

EMF对象的deepCopy

 
阅读更多

因为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;
	}
 
分享到:
评论

相关推荐

    EMF读取XML

    在处理XML数据时,EMF提供了一种高效且灵活的方式,能够将XML文档转换为可操作的对象模型,进而进行读取、解析和编辑。下面将详细介绍EMF读取XML的相关知识点。 1. **EMF模型与XML的关系** - EMF模型是面向对象的...

    微软emf文件格式详解

    EMF文件格式的内部结构非常复杂,包括多个层次的数据结构,如记录头、记录体、对象表等。 1. **记录头**:定义了EMF文件的基本属性,如文件类型、版本号等。 2. **记录体**:包含了实际的绘图指令,这些指令按照...

    emf文件格式详解

    EMF(Enhanced Metafile Format)是Windows操作系统中用于存储图形图像的一种文件格式,它扩展了早期的WMF(Windows Metafile Format)格式,提供了更高级的功能和更高的图像质量。这个压缩包包含了深入理解EMF文件...

    SVG转EMF的示例代码

    4. 使用转换上下文将SVGGraphics2D对象写入EMF输出流,通常是FileOutputStream。 5. 关闭输入流和输出流。 在实际应用中,你可能需要处理更多的细节,比如错误处理、SVG文件的编码问题、用户自定义的转换选项等。...

    将EMF图片格式转换成PNG

    // 创建一个BufferedImage对象,用于保存PNG图像 BufferedImage image = new BufferedImage(emf.getWidth(), emf.getHeight(), BufferedImage.TYPE_INT_ARGB); // 将EMF渲染到BufferedImage上 Graphics2D g2d =...

    EMF文件提取文本,预览,打印

    EMF(Enhanced Metafile)文件是Windows操作系统中使用的一种矢量图形和图元文件格式。这种文件类型被广泛用于存储图形、图像和打印数据,因为它支持复杂的图形操作,如曲线绘制、渐变填充和透明效果。EMF文件是GDI+...

    EMF 自学笔记5

    EMF的序列化机制可以处理复杂的模型结构,包括循环引用、嵌套对象等,确保了模型数据的完整性和一致性。 #### 六、EMF在实际项目中的应用 EMF在各种领域都有广泛的应用,特别是在复杂系统的建模和设计中。例如,在...

    Emf2Png.zip

    - **创建Bitmap对象**:然后,创建一个新的Bitmap对象,设置它的大小为EMF图像的尺寸。 - **创建Graphics对象**:使用Graphics.FromImage()方法创建一个Graphics对象,用于在Bitmap上绘图。 - **绘制EMF到Bitmap*...

    emf教程入门和插件

    它提供了一种统一的方式来表示、存储和操作复杂的结构化数据,是面向对象建模的强大工具。本教程旨在帮助初学者理解EMF的基础概念,并通过实践掌握EMF插件的使用。 1. **EMF基础** EMF基于MDE(Model Driven ...

    emf文件和wmf的转换

    EMF(Enhanced Metafile)和WMF(Windows Metafile)是两种常见的矢量图形文件格式,主要用于存储图像数据,特别是在Windows操作系统环境下。这两种格式都允许无损缩放和复杂图形的绘制,但EMF是WMF的增强版本,提供...

    EMF模型文件对比/比较(emf.compare)

    EMF(Eclipse Modeling Framework)模型文件对比/比较(emf.compare)是针对基于EMF构建的模型文件进行差异分析的工具。EMF是Eclipse项目中的一个子项目,它提供了一种创建、操作和共享复杂的领域特定语言(DSL)...

    eclipse的emf插件

    3. **持久性**:EMF支持将模型对象序列化为XML文件,使得模型数据可以在不同时间点保存和恢复,同时也方便了跨系统数据交换。 4. **图形用户界面(GUI)编辑器**:EMF提供了一个框架,可以快速构建基于模型的图形...

    emf-runtime,eclipse modeling framework

    标题中提到的"emf-runtime"是指EMF运行时环境,它是EMF的核心组成部分,包含了运行时类库和API,用于支持模型对象的创建、操作和持久化。这个环境使得开发者能够在应用程序中使用EMF模型,而无需关心底层实现的复杂...

    EMF Developer Guide

    无论你是对面向对象建模有深厚理解的开发者,还是对此不太熟悉的新手,EMF都能以较低的学习成本提供高效、准确且易于定制的Java代码。 **介绍** EMF中的“模型”通常指的是类图、协作图、状态图等。统一建模语言...

    emf转bmp代码

    增强型元文件是一种矢量图形格式,广泛用于Windows操作系统中,它可以保存图形对象的描述,包括线条、曲线、填充区域等。而位图则是像素图像,适用于存储照片或包含大量细节的图像。 描述中的“emf转bmpemf”可能是...

    eclipse emf&gef

    ### Eclipse EMF与GEF详解 #### 一、Eclipse EMF简介 ##### 1.1 什么是Eclipse Modeling Framework (EMF) Eclipse Modeling Framework(EMF)是Eclipse平台的一部分,它提供了一套完整的工具和服务来支持建模工作...

    emf-xsd-SDK-2.6.1

    在EMF中,XSD文件可以被用来作为模型的定义,生成相应的Java类和API,这样开发人员就可以在代码中直接操作这些模型对象。 GUI设计是构建用户界面的重要环节,EMF结合GEF (Graphical Editing Framework) 提供了一套...

    eclipse插件开发EMF api 文档

    EMF API文档是开发者理解和使用EMF的关键资源,它详细解释了EMF的各种类、接口、方法和概念,帮助开发者在构建模型驱动的应用时进行有效的编程。文档通常包括以下几个主要部分: 1. **基础概念**:EMF的基础概念...

    EMF、GEF、VE 适合于Eclipse 3.2.0

    EMF 提供了数据模型的创建、存储、序列化以及与Java对象之间的映射。开发者可以通过EMF定义自己的领域特定语言(DSL),并利用EMF生成对应的Java类和API,从而简化模型的编程和管理。此外,EMF还支持XMI(XML ...

Global site tag (gtag.js) - Google Analytics