??xml version="1.0" encoding="utf-8" standalone="yes"?>日韩av一区在线,最近97中文超碰在线,久久久一本精品http://www.aygfsteel.com/JetGeng/category/6108.html我的Java天堂zh-cnSat, 07 Nov 2009 23:17:33 GMTSat, 07 Nov 2009 23:17:33 GMT60Galileo: EMF-Databinding ?Part 1--creation of the domain-modelhttp://www.aygfsteel.com/JetGeng/archive/2009/11/07/301576.htmlJet GengJet GengSat, 07 Nov 2009 14:41:00 GMThttp://www.aygfsteel.com/JetGeng/archive/2009/11/07/301576.htmlhttp://www.aygfsteel.com/JetGeng/comments/301576.htmlhttp://www.aygfsteel.com/JetGeng/archive/2009/11/07/301576.html#Feedback0http://www.aygfsteel.com/JetGeng/comments/commentRss/301576.htmlhttp://www.aygfsteel.com/JetGeng/services/trackbacks/301576.html

在我们创建领域模型前Q我们有必要了解一下我们的模型用来表达什么内宏V?所以我先解释一下在q个pd文章中要实现应用?假设Eclipsel织邀请你~写一个让他们理贡献者和目的应用程序?

我们需要创Z个模型来表达客户提供的信息。他们有可能如下图?

让我们进一步的看看q个模型?

Fundation

fundation是这个模型的根,他拥有两个列表属性?

projects: 像EMF,Techonlogy,Platformq样的顶U项目?
persons: 参加一个或多个目的h?
Project

Eclipse目拥有很多属性,比如目开始和l束旉、项目的主页的url{等。下面列出我们最感兴的?

subprojects: 一个项目可以拥有多个子目。子目本n也可以拥有多个子目?
parent: 目有一个父Ԍ除了目外)。这意味着目和子目Qproject-subprojectQ的关系是一个双向的关系?
projectleads 一个项目有多个目领导人?
committers 一个项目可以拥有多个A献者?
CommitterShip

当一个用hZ个项目的贡献者(CommitterQ时Q这徏立了一个committership。他拥有一个开始时间和l束旉。另外我们还要记录下下面的属性?

project: 和committership相关的项目。项目和committership是一个双向的关系?
person: 参加目的h?
Person

贡献者或目领导人的信息。我们关pȝ信息如下Q?

committerships: 用于保存和h相关的所有的committerships.q说明h和committership是一个双向关pR?

下面q张cdl出了关于上面模型的全貌?

正如你所看到的,我把许多关系设成了双向关pR?As you noticed I modeled many of the relations as bidirectional relations. q个q不是严D求所有地斚w要这P因ؓ有的地方可以通过eComtainer来获取他的父二Ӏ就像project-subproject一栗? 但是包含关系Qcontainment relationshipQ在使用databinding的情况下׃太合适了。因Z子到父亲时没有对应featureQ只能通过调用eContainer()Ҏ(gu)来获得? EMF提供了一个编辑器来创Z的Ecore-Modelq把它保存成XMI格式。我们可以用它来创徏试数据。下囑ְ是一个例子?/p>



Jet Geng 2009-11-07 22:41 发表评论
]]>
Galileo: Improved EMF-Databinding-Support http://www.aygfsteel.com/JetGeng/archive/2009/11/07/301575.htmlJet GengJet GengSat, 07 Nov 2009 14:39:00 GMThttp://www.aygfsteel.com/JetGeng/archive/2009/11/07/301575.htmlhttp://www.aygfsteel.com/JetGeng/comments/301575.htmlhttp://www.aygfsteel.com/JetGeng/archive/2009/11/07/301575.html#Feedback0http://www.aygfsteel.com/JetGeng/comments/commentRss/301575.htmlhttp://www.aygfsteel.com/JetGeng/services/trackbacks/301575.html1.译序

在学习EMF-Databinding的时候发CTom Schindl的博客。他的博客中有一个关于EMF Databinding的专题。感觉很不多。想试着译一下?那么Tom Schindl是何思h也?他是JFace目的一个ContributorQ在2007q?a target="_top">Eclipse Zone 曾l采访过他?所以称他ؓEMF Databinding的专家一点也不过分?

Note

原文\径ؓhttp://tomsondev.bestsolution.at/2009/06/06/galileo-improved-emf-databinding-support/

2. 原文

我很高兴的宣布在Eclipse-Galileo中EMF-2.5已经开始支持新的Eclipse-Databinding API了。荣誉归Matthew HallQ他审查我的代码Q帮我整理支撑部分ƈ且整理文档(详细内容?a target="_top">bug 262160 中)

几周前我成ؓ了EMF目的捐献者,现在我负责Databinding对EMF的支持模块。我尽力修正API中的问题Q回{Newsgroup中的问题?

请允许我在介l这个API的优点以及如何用它之前声明一点:q个APIq处于过渡期Q他可能会有一些细微的变化。不q我们将会详l说明变化的部分?

我将用一个系列文章来展现q个新的EMF-Databinding:

W一部分Q?a target="_top">创徏领域模型
W二部分Q?a target="_top">介绍新的Properties API
W三部分Q?a target="_top">用EMF-Databindingl定到TreeViewer
W四部分Q?a target="_top">在master-detail模式中用Properties API
W五部分Q?a target="_top">用EMF-Databindingl定到TableViewer
W六部分QWrite your own Property for unsupport Widget-Types
W七部分QMake the storage system plugable

Z让你快速进入EMF-Databinding中,我在前几天做了一个例子?

所有代码都是基于EPL协议Q你可以在从Eclipse-CVS 处获得?



Jet Geng 2009-11-07 22:39 发表评论
]]>
初次接触Oclhttp://www.aygfsteel.com/JetGeng/archive/2006/11/11/80607.htmlJet GengJet GengSat, 11 Nov 2006 12:30:00 GMThttp://www.aygfsteel.com/JetGeng/archive/2006/11/11/80607.htmlhttp://www.aygfsteel.com/JetGeng/comments/80607.htmlhttp://www.aygfsteel.com/JetGeng/archive/2006/11/11/80607.html#Feedback0http://www.aygfsteel.com/JetGeng/comments/commentRss/80607.htmlhttp://www.aygfsteel.com/JetGeng/services/trackbacks/80607.html以前不知道有Oclq个东西Q前几天有幸看到。深p他吸引了。抛开其他的不_׃的查询功能的p人激动不已了:)?/p>

现在只是看了

oclQueryExmaple

Querying EMF Models with OCL


在项目中单的使用了一下他作ؓ查询的工兗感觉他真的很不错,在下一D|间将会重点去了解他?/p>

Jet Geng 2006-11-11 20:30 发表评论
]]>
Jmerge的用初??http://www.aygfsteel.com/JetGeng/archive/2006/05/02/44342.htmlJet GengJet GengTue, 02 May 2006 03:34:00 GMThttp://www.aygfsteel.com/JetGeng/archive/2006/05/02/44342.htmlhttp://www.aygfsteel.com/JetGeng/comments/44342.htmlhttp://www.aygfsteel.com/JetGeng/archive/2006/05/02/44342.html#Feedback1http://www.aygfsteel.com/JetGeng/comments/commentRss/44342.htmlhttp://www.aygfsteel.com/JetGeng/services/trackbacks/44342.html Jmerger 使用初步 ( ?/font> )

前面一提C他基本的概念和能完成的功能。在q一里我们来看看他的用条件和使用Ҏ(gu)?/font>

使用条gQ应?/font>

org.eclipse.jdt.core Q提供基本的语法分析Q?/font>

org.eclipse.core.runtime Q提供基本的 URI {)

org.eclipse.ui Q提供进度条Q我qCq个。其他可能还有)?/font>

看到他要使用q么?/font> Eclipse 的东ѝ我d的打消了?/font> Eclipse 外用他的打(如果谁有好的解决Ҏ(gu)记得l我发一份。在下感Ȁ不尽Q?/font>


我们下面来看看如何定制他的合ƈ规则是如何定义的吧。我先做法是找了一个例子。看看他是如何工作的?/font>


我的 Merge.xml 如下Q?/font>

清单 2 Q?/font>

<? xml version = "1.0" encoding = "UTF-8" ?>

< merge:options xmlns:merge = "http://www.eclipse.org/org/eclipse/emf/codegen/jmerge/Options" >


< merge:dictionaryPattern

name = "generatedMember"

select = "Member/getComment"

match = "\s*@\s*(gen)erated\s*\n" />

<!-- if target is generated, transfer -->

<!-- change to sourceMarkup if the source is the standard -->

< merge:pull

targetMarkup = "^gen$"

sourceGet = "Method/getBody"

targetPut = "Method/setBody" />


</ merge:options >


q行前的 Source Q?/font> Java Source A Q? ?/font> 分源代码?/font>

/**

* Source javadoc 13

* <!-- begin-user-doc -->

* Source user javadoc 14

* <!-- end-user-doc -->

* Source javadoc 15

* @return source

* @generated

*/

public boolean isID()

{

// begin-user-code

System.out.println("Source user code 1");

// end-user-code

System.out.println("Source code 2");

return id == "source";

}








q行?/font> Target(Java Source B) 部分的源代码为:

/**
* Source javadoc 13
* <!-- begin-user-doc -->
* Target user javadoc 16
* Target user javadoc 17
* <!-- end-user-doc -->
* Source javadoc 15
* @return source
* @generated
*/
public boolean isID()
{
//This is my owner code
System.out.print("Will be replace");
// begin-user-code
System.out.println("Target user code 2");
// end-user-code
System.out.println("Source code 2");
return id == "source";
}


/**
* Target javadoc 19
* <!-- begin-user-doc -->
* Target user javadoc 20
* Target user javadoc 21
* <!-- end-user-doc -->
* Target javadoc 22
* @param target
* @generated NOT
*/
public void setID(boolean value)
{
//This Jet Code
System.out.println("Not be replaced!");
id = value ? "target" : "source";
System.out.println("Target code 4");
}

注意Q?/font> isID Ҏ(gu) 注释里有?/font> @generated?/font> q一行。? setID Ҏ(gu)的注释中?/font> @generated NOT ?/font>


q行后的l果是( Result of merge

/**
* Source javadoc 13
* <!-- begin-user-doc -->
* Target user javadoc 16
* Target user javadoc 17
* <!-- end-user-doc -->
* Source javadoc 15
* @return source
* @generated
*/
public boolean isID()

{

// begin-user-code

System.out.println("Source user code 1");

// end-user-code

System.out.println("Source code 2");

return id == "source";

}

// 使用?/font> Source 部分的代码?/font>

/**
* Target javadoc 19
* <!-- begin-user-doc -->
* Target user javadoc 20
* Target user javadoc 21
* <!-- end-user-doc -->
* Target javadoc 22
* @param target
* @generated NOT
*/
public void setID(boolean value)
{
//This Jet Code
System.out.println("Not be replaced!");
id = value ? "target" : "source";
System.out.println("Target code 4");
}

// l持原来 Target 中的代码没有变化?/font>

q样我们׃隄?/font>

< merge:dictionaryPattern …?> D?/font> 是定义了一个匹配模式。具体的q个匚w模式要做的动作就是在

< merge:pull

targetMarkup = "^gen$"

sourceGet = "Method/getBody"

targetPut = "Method/setBody" />

D中定义了。猜想他只是?/font> Source 部分的内容直接输出到 Target 那里M?/font>

如果我们觉得需要做点什么过滤。比如说想保?/font> Target 中一个特定的内容。这一个我们可以通过 merge:pull ?/font> sourceTransfer 属性来讄?/font>


现在来看一个例子:

?/font> merge:pull 节点修改?/font>

< merge:pull

targetMarkup = "^gen$"

sourceTransfer = "(\s*//\s*begin-user-code.*?//\s*end-user-code\s*)\n"

sourceGet = "Method/getBody"

targetPut = "Method/setBody" />

注意Q添加了一? sourceTransfer, 他的?/font> 值是一个正则表辑ּ。匹配的是被

?font face="Courier New, monospace">// begin-user-code? 和?/font> // end-user-code?/font> 包围住的所有的字符?/font>

Target 的代码ؓQ?span lang="zh-CN">我们现在只是x isID Ҏ(gu) Q?/font> ?/font>


/**
* Source javadoc 13
* <!-- begin-user-doc -->
* Target user javadoc 16
* Target user javadoc 17
* <!-- end-user-doc -->
* Source javadoc 15
* @return source
* @generated
*/
public boolean isID()

{

// begin-user-code

System.out.println("Source user code 1");
System.out.println("This will not be replaced!");

// end-user-code
System.out.print("this will be replaced!");

System.out.println("Source code 2");

return id == "source";

}


h意看一下红色部分的两行代码?/font>

合ƈ后的代码为:

/**
* Source javadoc 13
* <!-- begin-user-doc -->
* Target user javadoc 16
* Target user javadoc 17
* <!-- end-user-doc -->
* Source javadoc 15
* @return source
* @generated
*/
public boolean isID()

{

// begin-user-code

System.out.println("Source user code 1");
System.out.println("This will not be replaced!");

// end-user-code
System.out.println("Source code 2");

return id == "source";

}


在?/font> // begin-user-code ?/font> 和?/font> // end-user-code ?/font> 外的代码全部被替换成了。这样就起到了过滤的效果?/font>



Jet Geng 2006-05-02 11:34 发表评论
]]>
Jmerge的用初?一)http://www.aygfsteel.com/JetGeng/archive/2006/05/01/44261.htmlJet GengJet GengMon, 01 May 2006 00:01:00 GMThttp://www.aygfsteel.com/JetGeng/archive/2006/05/01/44261.htmlhttp://www.aygfsteel.com/JetGeng/comments/44261.htmlhttp://www.aygfsteel.com/JetGeng/archive/2006/05/01/44261.html#Feedback0http://www.aygfsteel.com/JetGeng/comments/commentRss/44261.htmlhttp://www.aygfsteel.com/JetGeng/services/trackbacks/44261.htmlJmerge的用初?一)

?/span>EMF框架中最l会Ҏ(gu)模型生成代码Q还可以反复生成。还能你自q辑的内容不丢失。够好玩的吧。那么这部分是怎么实现的呢Q看q一?/span>EMF介绍可以知?/span>EMF是通过JET完成代码生成的动作的。在?/span>使用 Eclipse Modeling Framework q行建模》这个系列的文章可以了解到q一炏V在该系列文章的W三部分q可以了解到使用JMerge 可以实现“成的代码插入现有的代码中,或者允总后的开发h员来定制所生成的代码,而不需要在重新生成代码旉新编写Q何内宏V”这L功能?/span>

他是通过创徏Junit 试cM例子的。他说过的东西我׃啰嗦了。我只是把我个h在看了他文章后的一些东西整理一下?/p>

好,现在q入正题?/p>

首先我们来说一?font face="Times New Roman, serif">JMergeq个名字?font face="Times New Roman, serif">Mergeq个单词是合q的意思。前面加了一个?font face="Times New Roman, serif">J?/font>不用多说Q肯定表C?font face="Times New Roman, serif">Java了(完全是参?font face="Times New Roman, serif">Junit,log4j…?/font>Q。那么我大? 猜测q个工具是用来合q?font face="Times New Roman, serif">Java代码的。既然是合ƈ应该符合下图描q的动作?img src="http://www.aygfsteel.com/images/blogjava_net/jetgeng/Jmerge-Name.jpg" alt="Jmerge-Name.jpg" border="0" height="227" width="488" />

合ƈ肯定是把两个东西和成一个。所以图中的Java Source A ?font face="Times New Roman, serif">Java Source B分别代表需要合q的部分了。最后的Result of Merge是合ƈ后的那一个结果了。应为我们合q的?font face="Times New Roman, serif">Java代码。这些代码如何合qӞ也就是我们期望的合ƈl果是什么样的。图中的Rule of merge是代表的这部分信息?/p>


在下面?font face="Times New Roman, serif">Jmerge的代码中

清单 1. 调用 JMerge

 1   // 
 2         JMerger merger = getJMerger();
 3         
 4         // set source
 5         merger.setSourceCompilationUnit(
 6                 merger.createCompilationUnitForContents(generated));
 7         
 8         // set target
 9         merger.setTargetCompilationUnit(
10                 merger.createCompilationUnitForInputStream( 
11                         new FileInputStream(target.getLocation().toFile())));
12         
13         // merge source and target
14         merger.merge();
15 
16         // extract merged contents
17         InputStream mergedContents = new ByteArrayInputStream(
18                 merger.getTargetCompilationUnit().getContents().getBytes());
19                 
20         // overwrite the target with the merged contents
21         target.setContents(mergedContents, truefalse, monitor);
22         // 
23 
24 // 
25 private JMerger getJMerger() {
26         // build URI for merge document
27         String uri = 
28            Platform.getPlugin(PLUGIN_ID).getDescriptor().getInstallURL().toString();
29         uri += "templates/merge.xml";
30                 
31         JMerger jmerger = new JMerger();
32         JControlModel controlModel = new JControlModel( uri );
33         jmerger.setControlModel( controlModel );
34         return jmerger;
35 }

我们可以很容易的扑և它们的对应物?/p>

我们先从JMerger的创建开始看起吧?/p>

uri += "templates/merge.xml";

        JMerger jmerger = new JMerger();
JControlModel controlModel = new JControlModel( uri );
jmerger.setControlModel( controlModel );

q里用一个名ZؓZؓ?/span>merge.xml的文件作ZؓZؓ输输?/span>input参数创创H新Z一?/span>JControlModel对象。传?/span>传给JMerger对象。做完这些后又调调用? setSourceCompilationUnit ? setTargetCompilationUnit Ҏ(gu)。他们们?/span>们的cȝcd都是IDOMCompilationUnitQ用q的朋友都会知道他就代表了一?/span>Java文gQ。很荣荣Ҏ(gu)׃惌v他们们肯定就?/span>Java Source A ?/span>Java Source B了至?/span>Rule of merge可以通过q调?/span>merger.merge()后的getContentsQ)Ҏ(gu)?/span>获得?/span>


除了q种调用方式外还有一个更?/span>的调用方式:

String contents = merger.execute(null, new String[] { mergeXML, source,target });


看了 execute 实现后就不难发现他的q?/span>是用的W一U?br />

关于具体如何定制合ƈ规则和用条件打在下一中写?br />





Jet Geng 2006-05-01 08:01 发表评论
]]>EMF 生成代码阅读Q二Q?-edit?/title><link>http://www.aygfsteel.com/JetGeng/archive/2005/12/25/25363.html</link><dc:creator>Jet Geng</dc:creator><author>Jet Geng</author><pubDate>Sun, 25 Dec 2005 05:36:00 GMT</pubDate><guid>http://www.aygfsteel.com/JetGeng/archive/2005/12/25/25363.html</guid><wfw:comment>http://www.aygfsteel.com/JetGeng/comments/25363.html</wfw:comment><comments>http://www.aygfsteel.com/JetGeng/archive/2005/12/25/25363.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/JetGeng/comments/commentRss/25363.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/JetGeng/services/trackbacks/25363.html</trackback:ping><description><![CDATA[<P class=MsoNormal><SPAN lang=EN-US>EMF</SPAN><SPAN style="FONT-FAMILY: 宋体">不光为我们生成了模型cȝ代码。还为我们提供了一个默认的模型~辑器。要看到q个模型~辑器我们只需要运行一下就可以看到了(?/SPAN><SPAN lang=EN-US>Eclipse Application</SPAN><SPAN style="FONT-FAMILY: 宋体">的方式)?/SPAN></P><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">他默认的~辑器如下图所C?IMG height=249 alt=viewer.gif src="http://www.aygfsteel.com/images/blogjava_net/jetgeng/Eclipse/EMF/viewer.gif" width=728 border=0><BR><BR></SPAN><SPAN style="FONT-FAMILY: 宋体"> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">共有三个部:</SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt"><SPAN lang=EN-US><FONT face="Times New Roman">1.<SPAN style="FONT: 7pt 'Times New Roman'"><FONT size=3>         </FONT></SPAN></FONT></SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">~辑器的M。包括六U呈现方式?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; mso-list: l0 level2 lfo1; tab-stops: list 42.0pt"><FONT face="Times New Roman"><SPAN lang=EN-US>a)<SPAN style="FONT: 7pt 'Times New Roman'"><FONT size=3>         </FONT></SPAN></SPAN><SPAN lang=EN-US>Selection.</SPAN></FONT></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; mso-list: l0 level2 lfo1; tab-stops: list 42.0pt"><FONT face="Times New Roman"><SPAN lang=EN-US>b)<SPAN style="FONT: 7pt 'Times New Roman'"><FONT size=3>        </FONT></SPAN></SPAN><SPAN lang=EN-US>Parent.</SPAN></FONT></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; mso-list: l0 level2 lfo1; tab-stops: list 42.0pt"><FONT face="Times New Roman"><SPAN lang=EN-US>c)<SPAN style="FONT: 7pt 'Times New Roman'"><FONT size=3>        </FONT></SPAN></SPAN><SPAN lang=EN-US>List.</SPAN></FONT></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; mso-list: l0 level2 lfo1; tab-stops: list 42.0pt"><FONT face="Times New Roman"><SPAN lang=EN-US>d)<SPAN style="FONT: 7pt 'Times New Roman'"><FONT size=3>        </FONT></SPAN></SPAN><SPAN lang=EN-US>Tree</SPAN></FONT></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; mso-list: l0 level2 lfo1; tab-stops: list 42.0pt"><FONT face="Times New Roman"><SPAN lang=EN-US>e)<SPAN style="FONT: 7pt 'Times New Roman'"><FONT size=3>         </FONT></SPAN></SPAN><SPAN lang=EN-US>Table</SPAN></FONT></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 42pt; TEXT-INDENT: -21pt; mso-list: l0 level2 lfo1; tab-stops: list 42.0pt"><FONT face="Times New Roman"><SPAN lang=EN-US>f)<SPAN style="FONT: 7pt 'Times New Roman'"><FONT size=3>         </FONT></SPAN></SPAN><SPAN lang=EN-US>Tree With Columns.</SPAN></FONT></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l0 level1 lfo1; tab-stops: list 21.0pt"><FONT face="Times New Roman"><SPAN lang=EN-US>2.<SPAN style="FONT: 7pt 'Times New Roman'">         </SPAN></SPAN><SPAN lang=EN-US>Outline</SPAN></FONT><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">部分?/SPAN></P> <P class=MsoNormal><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">Properties,</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'">会根据选择不同的对象而改变显C的内容?/SPAN></SPAN><SPAN style="FONT-FAMILY: 宋体">关于</SPAN><SPAN lang=EN-US>Jface</SPAN><SPAN style="FONT-FAMILY: 宋体">部分的工作模式我在?/SPAN><SPAN lang=EN-US>Table View </SPAN><SPAN style="FONT-FAMILY: 宋体">的合作类的模式》一文中有提刎ͼ不过需要说明的是,?/SPAN><SPAN lang=EN-US>Jface</SPAN><SPAN style="FONT-FAMILY: 宋体">中的</SPAN><SPAN lang=EN-US>Viewer</SPAN><SPAN style="FONT-FAMILY: 宋体">他们?/SPAN><SPAN lang=EN-US>ContentProvider</SPAN><SPAN style="FONT-FAMILY: 宋体">可能不一L?/SPAN></P> <P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">要完成这部分的功?/SPAN><SPAN lang=EN-US>emf</SPAN><SPAN style="FONT-FAMILY: 宋体">的生代码中分别攑ֈ了两个插仉实现了他们分别是</SPAN><SPAN lang=EN-US>edit</SPAN><SPAN style="FONT-FAMILY: 宋体">?/SPAN><SPAN lang=EN-US>editor</SPAN><SPAN style="FONT-FAMILY: 宋体">?/SPAN></P> <P class=MsoNormal><SPAN lang=EN-US>Edit</SPAN><SPAN style="FONT-FAMILY: 宋体">提供?/SPAN><SPAN lang=EN-US>Item </SPAN><SPAN style="FONT-FAMILY: 宋体">?/SPAN><SPAN lang=EN-US>Provider</SPAN><SPAN style="FONT-FAMILY: 宋体">Q他存在的意义就在于把逻辑对象?/SPAN><SPAN lang=EN-US>UI</SPAN><SPAN style="FONT-FAMILY: 宋体">分割开。?/SPAN><SPAN lang=EN-US>Editor</SPAN><SPAN style="FONT-FAMILY: 宋体">通过使用</SPAN><SPAN lang=EN-US>edit</SPAN><SPAN style="FONT-FAMILY: 宋体">提供?/SPAN><SPAN lang=EN-US>Provider</SPAN><SPAN style="FONT-FAMILY: 宋体">实现了一个编辑器?/SPAN><SPAN lang=EN-US>UI</SPAN><SPAN style="FONT-FAMILY: 宋体">?/SPAN><SPAN lang=EN-US>Command</SPAN><SPAN style="FONT-FAMILY: 宋体">部分Q他是正真的用户界面部分?/SPAN></P> <P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">下面我们先来看?/SPAN><SPAN lang=EN-US>edit</SPAN><SPAN style="FONT-FAMILY: 宋体">中的cR?/SPAN></P> <P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">好了Q首?/SPAN><SPAN lang=EN-US>edit</SPAN><SPAN style="FONT-FAMILY: 宋体">中用的?/SPAN><SPAN lang=EN-US>adapt</SPAN><SPAN style="FONT-FAMILY: 宋体">模型。所?/SPAN><SPAN lang=EN-US>edit</SPAN><SPAN style="FONT-FAMILY: 宋体">中的插g对象会实现所有的</SPAN><SPAN lang=EN-US>viewer,Properties</SPAN><SPAN style="FONT-FAMILY: 宋体">所需要的接口?/SPAN></P> <P class=MsoNormal><SPAN lang=EN-US>Emf</SPAN><SPAN style="FONT-FAMILY: 宋体">为我们实现通用的接口。所以这l对是一个学习的好机会?/SPAN></P> <P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">废话不多说了Q来看代码把?/SPAN></P> <P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">首先看声明:</SPAN></P> <DIV style="BORDER-RIGHT: rgb(204,204,204) 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: rgb(204,204,204) 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: rgb(204,204,204) 1px solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: rgb(204,204,204) 1px solid; BACKGROUND-COLOR: rgb(238,238,238)"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><SPAN style="COLOR: rgb(0,0,255)">public</SPAN><SPAN style="COLOR: rgb(0,0,0)"> </SPAN><SPAN style="COLOR: rgb(0,0,255)">class</SPAN><SPAN style="COLOR: rgb(0,0,0)"> FamilyItemProvider<BR>    </SPAN><SPAN style="COLOR: rgb(0,0,255)">extends</SPAN><SPAN style="COLOR: rgb(0,0,0)"> ItemProviderAdapter<BR>    </SPAN><SPAN style="COLOR: rgb(0,0,255)">implements</SPAN><SPAN style="COLOR: rgb(0,0,0)">    <BR>        IEditingDomainItemProvider,    <BR>        IStructuredItemContentProvider,    <BR>        ITreeItemContentProvider,    <BR>        IItemLabelProvider,    <BR>        IItemPropertySource {<BR></SPAN></DIV><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">他的l承关系可以用下图来表示Q?BR><IMG height=97 alt=providerh.gif src="http://www.aygfsteel.com/images/blogjava_net/jetgeng/Eclipse/EMF/providerh.gif" width=295 border=0><BR></SPAN> <P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">他们之间的职能以及实现的接口可用下图来描qͼ</SPAN></P><IMG height=471 alt=itemprivdelayer.gif src="http://www.aygfsteel.com/images/blogjava_net/jetgeng/Eclipse/EMF/itemprivdelayer.gif" width=837 border=0><BR><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'">AdapterImpl</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">是ؓ了实?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'">Adapter</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">模式而设?<BR></SPAN> <P class=MsoNormal><SPAN lang=EN-US>ItemProviderAdapter</SPAN><SPAN style="FONT-FAMILY: 宋体">完成一些基本功能。下面就分别从不同的接口来说?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l1 level1 lfo2; tab-stops: list 21.0pt"><SPAN lang=EN-US>1.<SPAN style="FONT: 7pt 'Times New Roman'">         </SPAN></SPAN><SPAN lang=EN-US>ResourceLocator:</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">该接口是用来q行资源定位的?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l1 level1 lfo2; tab-stops: list 21.0pt"><SPAN lang=EN-US>2.<SPAN style="FONT: 7pt 'Times New Roman'">         </SPAN></SPAN><SPAN lang=EN-US>IDisposable </SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?/SPAN><SPAN lang=EN-US>emf</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">框架提供的一U析构接口?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l1 level1 lfo2; tab-stops: list 21.0pt"><SPAN lang=EN-US>3.<SPAN style="FONT: 7pt 'Times New Roman'">         </SPAN></SPAN><SPAN lang=EN-US>IChangeNotifier </SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">?</SPAN><SPAN lang=EN-US>Notification and Adapters"</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">模式提供必需的方法?/SPAN></P> <P class=MsoNormal style="MARGIN-LEFT: 21pt; TEXT-INDENT: -21pt"><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">CreateChildCommand.Helper</SPAN></P> <P class=MsoNormal><SPAN style="FONT-FAMILY: 宋体">最下面?/SPAN><SPAN lang=EN-US>EMF</SPAN><SPAN style="FONT-FAMILY: 宋体">Ҏ(gu)我们的模型生的</SPAN><SPAN lang=EN-US>Provider</SPAN><SPAN style="FONT-FAMILY: 宋体">的了。他实现?/SPAN><SPAN lang=EN-US>5</SPAN><SPAN style="FONT-FAMILY: 宋体">个接口?/SPAN></P> <P class=MsoNormal style="MARGIN-LEFT: 21pt; TEXT-INDENT: -21pt"> </P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l2 level1 lfo3; tab-stops: list 21.0pt"><SPAN lang=EN-US>1.<SPAN style="FONT: 7pt 'Times New Roman'">         </SPAN></SPAN><SPAN lang=EN-US>IEditingDomainItemProvider</SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">q部分我q清楚,怀疑和</SPAN><SPAN lang=EN-US>command</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">有关?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l2 level1 lfo3; tab-stops: list 21.0pt"><SPAN lang=EN-US>2.<SPAN style="FONT: 7pt 'Times New Roman'">         </SPAN></SPAN><SPAN lang=EN-US>IStructuredItemContentProvider</SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">该接口ؓ</SPAN><SPAN lang=EN-US>TableViewer,ListViewer,TreeViewer</SPAN><SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">提供服务?/SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><SPAN lang=EN-US>This is the interface needed to populate<SPAN style="mso-spacerun: yes">  </SPAN>the top level items in a TreeViewer,<SPAN style="mso-spacerun: yes">  </SPAN>the items of a ListViewer,<SPAN style="mso-spacerun: yes">  </SPAN>or the rows of a TableViewer. </SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l2 level1 lfo3; tab-stops: list 21.0pt"><SPAN lang=EN-US>3.<SPAN style="FONT: 7pt 'Times New Roman'">         </SPAN></SPAN><SPAN lang=EN-US>ITreeItemContentProvider</SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><SPAN lang=EN-US>This is the interface needed to populate subtrees in a TreeViewer</SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l2 level1 lfo3; tab-stops: list 21.0pt"><SPAN lang=EN-US>4.<SPAN style="FONT: 7pt 'Times New Roman'">         </SPAN></SPAN><SPAN lang=EN-US>IItemLabelProvider</SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><SPAN lang=EN-US>This is the interface implemented to provide a label text and even a label icon for an item;</SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt"><SPAN lang=EN-US>it receives delegated calls from ILabelProvider.</SPAN></P> <P class=MsoNormal style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: -21pt; mso-list: l2 level1 lfo3; tab-stops: list 21.0pt"><SPAN lang=EN-US>5.<SPAN style="FONT: 7pt 'Times New Roman'">         </SPAN></SPAN><SPAN lang=EN-US>IItemPropertySource</SPAN></P><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">         This is the interface is needed to populate property sheet items</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'">?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">it is the same as IpropertySource</SPAN><SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'">?/SPAN><SPAN lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">except that the object is          passed as the first parameter for each method.</SPAN> <P class=MsoNormal><SPAN lang=EN-US>q一还只是edit部分刚开一个头?/SPAN></P> <P class=MsoNormal>下一期会介绍一下他的command部分?BR></P><img src ="http://www.aygfsteel.com/JetGeng/aggbug/25363.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/JetGeng/" target="_blank">Jet Geng</a> 2005-12-25 13:36 <a href="http://www.aygfsteel.com/JetGeng/archive/2005/12/25/25363.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EMF 生成的Model Code阅读W记(一)http://www.aygfsteel.com/JetGeng/archive/2005/12/18/24474.htmlJet GengJet GengSun, 18 Dec 2005 05:12:00 GMThttp://www.aygfsteel.com/JetGeng/archive/2005/12/18/24474.htmlhttp://www.aygfsteel.com/JetGeng/comments/24474.htmlhttp://www.aygfsteel.com/JetGeng/archive/2005/12/18/24474.html#Feedback4http://www.aygfsteel.com/JetGeng/comments/commentRss/24474.htmlhttp://www.aygfsteel.com/JetGeng/services/trackbacks/24474.html在八q制的中讲述了从模型到应用程序的生成q程。我通过cM的方法生成了一个应用程序?/span>

代码生成后,我就想看?/span>EMF为我生成了什么样的代码。我如果需要修改的话该如何修改?/span>

我的?/span>Hellow world”是采用的?/span>Using EMF”文中的模型?br> familytree.JPG
Ҏ(gu)q个模型建立了一?/span>EMF ModelQ?br> family model.gif
Ҏ(gu)q个模型生成model class的结构如下图所C:
class code.gif

从图中我们可以看到有三个包:

他们分别是:family,family.impl?/span>family.util?/span>

family?/span>family.impl包之间的差别是一个是InterfaceQ另外一个是q些Interface的实现?/span>

我们先来看看我们模型中出现过的类Q?/span>

Family,FamilyTree,Female,Male以及Individual?/span>

׃我是采用Annotated Java的方式生成的模型。所以在family包中的代码ƈ没有太多的变化?br>
/**
     * Return the father
     * 
@return the father
     * @model
     
*/
    Male getFather();
    
    
/**
     * Sets the value of the '{
@link com.jet.swt.emf.family.Family#getFather <em>Father</em>}' reference.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * 
@param value the new value of the '<em>Father</em>' reference.
     * 
@see #getFather()
     * @generated
     
*/
    
void setFather(Male value);

他只是ؓ我提供了SetҎ(gu)。接口的l承也没有做修改。但是他对应的实现类有了很多变化?/span>

首先从类的申明来看:

public class FamilyImpl extends EDataObjectImpl implements Family {
我们可以看到我们?/span>FamilyImpl是从EdataObjectImplcȝ承而来。处于好奇我有在Hiberarchy中打开他的l承关系看了一下?img src="http://www.aygfsteel.com/images/blogjava_net/jetgeng/Eclipse/EMF/hiberarchy.gif" alt="hiberarchy.gif" border="0" height="117" width="248">

q里有一张图可以清晰的说明这个承关pȝ职能?/span>

hiberachyfunction.gif
我例子中的Business Layer是FamilyImplcR?br>

q样我们的就可以不写一行代码就可以使我们的对象hNotification/Common的功能(关于Notification?/span>Common的功能到底是怎样的,我会在后l的学习W记中记下来。呵呵,是不是很爽啊Q。另外在?/span>Eclipse Modeling Framework: A Developer's Guide》一书的W二章也有提到这部分的内?/span>,不过׃他讲解的EMF的版本比较老和我现在用的版本有点出入Q不q基本的功能q是讲到了?/span>

好了Q看完申明我们就来l往下看吧?br>

?/span>Family下面有三个属性,father,mother?/span>children?/span>

EMFl我们生成的对应的代码ؓQ?/span>

protected Male father = null;

    
/**
     * The cached value of the '{
@link #getMother() <em>Mother</em>}' reference.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * 
@see #getMother()
     * @generated
     * @ordered
     
*/
    
protected Female mother = null;

    
/**
     * The cached value of the '{
@link #getChildren() <em>Children</em>}' containment reference list.
     * <!-- begin-user-doc -->
     * <!-- end-user-doc -->
     * 
@see #getChildren()
     * @generated
     * @ordered
     
*/
    
protected EList children = null;

以及一?/span>get?/span>setҎ(gu)?/span>

对于setҎ(gu)中除了基本的赋g外还加上了向所有对q次变动感兴观察者发送一个变更消息:

public void setFather(Male newFather) {
        Male oldFather 
= father;
        father 
= newFather;
        
if (eNotificationRequired())
            eNotify(
new ENotificationImpl(this, Notification.SET, FamilyPackage.FAMILY__FATHER, oldFather, father));
    }

对于getҎ(gu)要分基本cdq是对象q两U类型来处理?/span>

如果是基本类型,直接q回好了?/span>

如:

public String getName() {
        
return name;
    }
如果是对象的话就有点ȝ了。先要判断该对象是否使用了代理(q一部分我还不是太清楚)如果是的话就获得他的代理对象Qƈ判断获得代理对象是否和当前对象是否相{,如果不等发送一个变更消息。最l返回对象(肯能是一个代理对象)?br>
public Male getFather() {
        
if (father != null && ((EObject)father).eIsProxy()) {
            Male oldFather 
= father;
            father 
= (Male)eResolveProxy((InternalEObject)father);
            
if (father != oldFather) {
                
if (eNotificationRequired())
                    eNotify(
new ENotificationImpl(this, Notification.RESOLVE, FamilyPackage.FAMILY__FATHER, oldFather, father));
            }
        }
        
return father;
    }

q有其他cd在下一记下?br>

1?span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">  Using EMF,  Author :Catherine Griffin

2?span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">   EMF介绍pdQ二、从模型生成应用E序Q?/span> Author:八进?/span>

3?span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">  Mastering Eclipse Modeling FrameworkQ?/span>Author:Vladimir Bacvanski(Vladimir@inferdata.com) Petter Graff(petter@inferdata.com)

Eclipse Modeling Framework: A Developer's Guide Author:Frank Budinsky, David Steinberg, Ed Merks, Raymond Ellersick, Timothy J. Grose


Jet Geng 2005-12-18 13:12 发表评论
]]>
EMF 开?/title><link>http://www.aygfsteel.com/JetGeng/archive/2005/12/18/24456.html</link><dc:creator>Jet Geng</dc:creator><author>Jet Geng</author><pubDate>Sun, 18 Dec 2005 02:41:00 GMT</pubDate><guid>http://www.aygfsteel.com/JetGeng/archive/2005/12/18/24456.html</guid><wfw:comment>http://www.aygfsteel.com/JetGeng/comments/24456.html</wfw:comment><comments>http://www.aygfsteel.com/JetGeng/archive/2005/12/18/24456.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/JetGeng/comments/commentRss/24456.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/JetGeng/services/trackbacks/24456.html</trackback:ping><description><![CDATA[在中国EclipseC֌中,看到了很多关于EMF的帖子。会来写了一个“Hellow world”样的东西果然很爽。想q一步学习一下。ƈx学习的过E通过q个Blog记录下来?br> 在这里先感谢一下八q制。从他的blog中学C东ѝ?br> <a id="Header1_HeaderTitle" class="HeaderMainTitle" ><br> </a><img src ="http://www.aygfsteel.com/JetGeng/aggbug/24456.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/JetGeng/" target="_blank">Jet Geng</a> 2005-12-18 10:41 <a href="http://www.aygfsteel.com/JetGeng/archive/2005/12/18/24456.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">;</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">ӳ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ٽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ո</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank">¦</a>| <a href="http://" target="_blank">ګ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">¡Ң</a>| <a href="http://" target="_blank">˳</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">μԴ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ͼ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">޶</a>| <a href="http://" target="_blank">Դ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">׳</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>