`
min12605
  • 浏览: 55549 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

eclipse平台如何实用Marker来实现Problem View的输出

阅读更多
      最近,需要使用eclipse平台中的problem view来输出一些项目中的问题报警,现将搜集到的这方面的内容保存在这里。

Marker在BIRT中的使用

概要
  用过BIRT的人应该知道,在进行报表设计的时候,如果当前打开的报表中存在错误,那么在Problems视图中就会列出相关的错误信息。当用户点击其中一条信息的时候,系统就会定位到错误的位置。
  本文将介绍BIRT中是如何实现此功能的。

什么是marker?
  如果要在Problem视图中显示错误信息,并实现错误定位功能,就需要用到marker。
  什么是marker呢?简单的说,他就是一个信息记录,在这个记录里,可能保存了问题的信息(message)、位置(location)、严重程度(priority)等等。
  我们知道,基于Eclipse的应用程序可能由很多plugin组成,它们往往比较复杂。而每个plugin都不得不管理自己的资源,并做好错误信息(或 其他信息)与用户之间的交互工作。为了辅助plugin的作者实现这样的功能,并使其符合使用者的习惯,Eclipse平台提供了一种机制:通过 marker来管理这些信息。 marker可以用在Problems、Tasks、Bookmarks等视图中,当然,只要愿意,它也可以用在你自己定义的视图中。

Marker的相关知识
  Marker的类型和属性都是可以扩展的。我们可以看看接口 org.eclipse.core.resources.IMarker,它定义了一些 marker相关的类型和属性常量。在实际的使用过程中,我们要实现这个接口。如果给一个marker,我们从它本身得到的相关信息包括id、类型、属性值等等,除此之外,我们还可以给它自定义属性。
  Maker的属性是用属性名唯一标识的,每个属性名对应一个属性值。属性值只能是三种数据类型:Boolean、Integer、String。
  至于如何定义新的marker,可以参见Eclipse帮助文件,它讲述得很详细。

BIRT中的实现
  在BIRT中,我们没有定义新的marker,它的类型为IMarker.PROBLEM,各种属性(IMarker.MESSAGE、IMarker.LINE_NUMBER、IMarker.LOCATION、IMarker.SEVERITY),都是IMarker中预定义的。

1.创建marker
  创建marker使用的函数是IResouce.createMarker(type);这儿,我们使用的type是IMarker.PROBLEM。

在IDEMultiPageReportEditor.refreshMark()函数中,我们先把原来的marker从file中删掉。代码如下:

file.deleteMarkers(IMarker.PROBLEM,true,IResource.DEPTH_INFINITE);

接着从ReportDesignHandle得到所有的Warning和Error信息,存放到List中。

List list = reportDesignHandle.getErrorList( );
int errorListSize = list.size( );
list.addAll( reportDesignHandle.getWarningList( ) );


最后,遍历List,并创建marker,把List中的信息加到marker中去。

for ( int i = 0, m = list.size( ); i < m; i++ )
{
ErrorDetail errorDetail = (ErrorDetail) list.get( i );
IMarker marker = file.createMarker( IMarker.PROBLEM );
Map<String, Object> attrib = new HashMap<String, Object>( );
// The first part is from error list, the other is from warning
// list
if ( i < errorListSize )
{
attrib.put( IMarker.SEVERITY, IMarker.SEVERITY_ERROR );
}
else
{
attrib.put( IMarker.SEVERITY, IMarker.SEVERITY_WARNING );
}
attrib.put( IMarker.MESSAGE, errorDetail.getMessage( ) );
attrib.put( IMarker.LINE_NUMBER, errorDetail.getLineNo( ) );
attrib.put( IMarker.LOCATION, errorDetail.getTagName( ) );
if ( errorDetail.getElement( ) != null
&& errorDetail.getElement( ).getID( ) != 0 )
{
attrib.put( ELEMENT_ID,
new Integer( (int) errorDetail.getElement( )
.getID( ) ) );
}
// set all attributes together to reduce notification events
marker.setAttributes( attrib );
}

2.显示marker
  我们先把这些Marker从IResouce中读出来,仍然是通过id获取marker.使用的函数是IResource.findMarkers(type, true, IResource.DEPTH_INFINITE),它的函数返回值是一个IMarker数组。然后再把这个数组中的内容显示到ProblemView中去。
  由于我们使用的marker type是IMarker.PROBLEM,ProblemView会完成相应的工作,对此,我们不需要做任何工作。

3.定位marker
  当用户双击Problems视图中的marker的时候。如果该marker对应layout中的某个element,那么 layout中的这个 element就会被选中,并高亮现实;如果对应masterpage中的某个element,那么就会转到masterpage中,并选中此 element;如果marker信息中在layout和masterpage中找不到对应的element,那么它就转到XML Source中,高亮选中错误的行。

  当用户双击选中的marker的时候,IDE会通过editorPart.getAdapter(class)得到当前EditorPart的IGotoMarker地实现,并调用IGotoMarker.()实现错误定位的功能。
  因此,我们需要IDEMultiPageReportEditor.getAdapter(class)中加入如下代码:

public Object getAdapter( Class type )
{
…………
if ( type == IGotoMarker.class )
{
return new BIRTGotoMarker( this );
}
…………
}

这儿BIRTGotoMarker是IGotoMarker接口的一个实现。BIRTGotoMarker中,我们需要实现public void gotoMarker( IMarker marker )这个函数就可以。

  Marker在BIRT中的使用的情况大致如此, 更详细的信息,大家可以参见BIRT的源代码。

BIRT更多信息
  Eclipse BIRT,即Business Intelligence and Reporting Tools,中文译作商业智能与报表工具,是Eclipse开源项目之一。它是一种基于Eclipse的可视化Java报表设计工具。更多BIRT相关的信息,可以访问安讯中国的官方网站:http://www.actuatechina.com。

  Eclipse源代码可以通过CVS获取:
    Host:dev.eclipse.org
    Path:/cvsroot/birt
    Connection type:pserver
    User:anonymous
    Password:(空)


参考资料
1.Eclipse Corner Article:Mark My Word by Dejan Glozic, IBM and Jeff McAffer, OTI
2.Eclipse Platform API Specification
 
分享到:
评论

相关推荐

    使用vue2-water-marker组件实现水印预览

    使用vue2-water-marker组件实现水印预览

    百度地图marker动画的实现

    本教程将详细讲解如何利用百度地图API和CSS3来实现marker的动画效果。 首先,让我们理解什么是百度地图的marker。Marker是百度地图API中的一个对象,用于在地图上表示一个具体的地理位置。它通常由一个图标和一个...

    安卓百度地图marker实现类平滑移动

    以下将详细讲解如何在Android中使用百度地图API实现Marker的平滑移动。 首先,我们需要在项目中集成百度地图SDK。这通常通过在build.gradle文件中添加依赖来完成,例如: ```groovy dependencies { ...

    Eclipse平台扩展点清单

    ### Eclipse 平台扩展点清单知识点详解 #### 一、概述 Eclipse 是一款非常流行的开源集成开发环境(IDE),支持多种编程语言,尤其是 Java 的开发。为了满足不同开发者的需求,Eclipse 提供了大量的可扩展性机制。...

    Android-实现高德地图的marker聚合功能

    在Android开发中,高德地图是一个广泛...总的来说,实现高德地图的Marker聚合功能是一个涉及地图API、数据结构和用户交互的综合任务。通过自定义组件和合理的数据处理,我们可以为用户提供更清晰、更友好的地图体验。

    高德地图Marker平滑移动

    6. **优化性能**:为了提供流畅的用户体验,确保在主线程以外执行 Marker 的位置更新操作,可以使用 Handler 或 Runnable 来实现。 7. **考虑兼容性**:如果你的应用需要支持多种Android版本,可能需要针对不同版本...

    百度地图自定义Marker(android)

    本项目聚焦于在Android平台上如何利用百度地图SDK实现自定义Marker,以满足个性化需求。 首先,我们需要理解百度地图SDK的基本用法。在Android项目中,需要引入百度地图的SDK库,这可以通过在`build.gradle`文件中...

    高德地图将marker用连线连起来

    在使用高德地图进行开发时,我们经常需要在地图上展示一些特定的点,并且有...例如,你可以根据图片内容为不同的marker设置不同的图标,或者使用图片序列来创建动态效果。总的来说,这需要结合实际项目需求来具体实现。

    Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用

    本教程将详细介绍如何在Android应用中使用百度地图SDK v3.0.0来添加覆盖物Marker以及创建InfoWindow,以此来增强地图的交互性和信息展示。 首先,我们需要在项目中引入百度地图SDK。这通常涉及到在`build.gradle`...

    Eclipse安装Free marker插件教程

    首先,我们需要通过Eclipse的在线安装功能来获取freemarkEditor插件。步骤如下: 1. 启动Eclipse,进入工具栏的“帮助”(Help)菜单,然后选择“安装新软件”(Install New Software)。 2. 在弹出的对话框中,点击右...

    JavaScript添加marker并连线

    在本实例中,我们将探讨如何利用SuperMap iClient 6R for JavaScript来添加marker(标记)并进行连线,以实现地理空间数据的可视化。 首先,我们需要了解JavaScript中的marker是什么。Marker通常表示地图上的一个...

    Eclipse插件开发笔记源码

    Eclipse插件开发是Java开发领域中的一个重要...对于想要深入了解Eclipse平台或RCP开发的人员来说,这是一份宝贵的资源。通过实践这些案例,你将能够熟练掌握Eclipse插件开发的技巧,为自己的开发工作带来极大的便利。

    Google Map Marker的显示与隐藏

    在使用Google Maps API进行Web开发时,经常需要在地图上添加标记(Marker)来指示特定的位置。本教程将深入探讨如何在Google Maps中控制Marker的显示与隐藏,以实现更灵活的地图交互体验。 首先,我们需要了解...

    openlayers实现本地图片作为背景,添加marker标记

    这个例子展示了如何使用OpenLayers创建一个简单的地图应用,将本地图片作为背景,并在地图上添加marker标记。你可以根据自己的需求修改这些代码,例如更改图片和标记的URL,或者调整地图的视图和标记的位置。同时,...

    Android基于高德地图完全自定义Marker的实现方法

    自定义Marker布局可以使用View来设计,然后将其转换成Bitmap,以满足不同的业务需求。例如,可以使用CircleImageView来设计Marker的样式,然后加载网络图片。 知识点五:加载网络图片 加载网络图片可以使用第三方...

    高德地图marker沿轨迹移动效果,适用步行、行车、运动等APP

    - 在Android中,你可以使用`ValueAnimator`或`ObjectAnimator`来实现平滑的动画效果。设置一个时间间隔,每次更新Marker的新位置,使其逐渐接近下一个插值点。 - 动画的更新频率和步长应适中,以保持视觉上的流畅...

    Android 高德地图自定义点聚合marker图片及Overlay点击选中功能

    - 使用`Point`对象遍历所有的Overlay(包括Marker、Polygon等),调用`contains()`方法判断点击位置是否在某个Overlay内。 - 如果点击的Overlay是Marker,可以通过`Marker`对象的`setTitle()`或`setSnippet()`方法...

    BaiDuMapDemo(marker).rar

    本章将讲述如何利用Marker在地图生成点,并实现点击Marker弹出该点对应的信息。 1.点击点获取坐标 2.在我的项目里,会将地图上的一些飞机作为Marker,点击并弹出该飞机对应的详情 3.点击地图其他区域,将清除所有...

    Android实现高德地图Marker拖动圆环范围_地图定位.zip

    对于拖动的圆环范围,我们可以使用`Circle`对象来表示。首先,创建一个圆环: ```java float radius = 1000; // 半径1000米 CircleOptions circleOptions = new CircleOptions().center(initialPosition).radius...

    marker备注

    在这个活动中,开发者可能使用了百度地图SDK提供的`MapView`类来加载地图,并调用`BaiduMap`对象的`addOverlay()`方法添加marker。同时,可能还注册了`OnMarkerClickListener`,以便当用户点击marker时能触发相应的...

Global site tag (gtag.js) - Google Analytics