Developer Tutorial - Confluence

4 downloads 1405 Views 5MB Size Report
Sep 15, 2013 ... Download the “Eclipse for RCP and RAP. Developers” package to your laptop. 2. If your machine is Linux or Mac OS X, untar the file. •. On Mac ...
mHARP Developer Tutorial MHARP ANNUAL WORSHIP VIENNA, AUSTIRA SEP. 15, 2013

Eclipse RCP installation

Eclipse RCP Installation 

Objective  To

learn how to install Eclipse Rich Client Platform (RCP)



Contents  System

Prerequisites

 Eclipse

Download and Installation

 Updating

Eclipse to latest release

System Prerequisites 

Operating System Linux (just about any version)  MacOSX (10.5 Leopard or higher)  Windows (XP and higher) 



Java: Eclipse requires Sun or IBM Java Need Java SDK  Java 1.6 or higher 



Java 1.6 is the same as JDK 6.0

The GNU Java Compiler (GCJ), which comes standard on Linux, will not work.  OpenJDK, distributed with some Linux distributions, comes closer to working, but should not be used 

Eclipse Packages 

The current version of Eclipse (4.3) is also known as “Kepler”



Eclipse is available in a number of different packages for different kinds of development  http://eclipse.org/downloads/



For mHARP-EQ, we recommend the Eclipse for RCP and RAP Developers

Exercise Download the “Eclipse for RCP and RAP Developers” package to your laptop 2. If your machine is Linux or Mac OS X, untar the file 1.



On Mac OS X you can just double-click in the Finder

If your machine is Windows, unzip the file 4. This creates an eclipse folder containing the executable as well as other support files and folders 3.

Starting Eclipse 

Linux 

 



Mac OS X   



From a terminal window, enter “/eclipse/eclipse &” Or, open the eclipse folder Double-click on the eclipse executable

From Finder, open the eclipse folder where you installed Double-click on the Eclipse application Or from a terminal window

Windows  

Open the eclipse folder Double-click on the eclipse executable

Specifying a Workspace 

Eclipse prompts for a workspace location at startup time



The workspace contains all userdefined data 

Projects and resources such as folders and files



The default workspace location is fine for this tutorial

Eclipse Welcome Page 

Displayed when Eclipse is run for the first time 

Select “Go to the Workbench”

Updating Eclipse RCP 

Eclipse releases two service packs per major release



To check for updates, select Help > Check for Updates…



If there are updates installed, Restart eclipse after installing



mHARP-EQ can be updated in a similar way

Additional Features for mHARP 

mHARP-EQ requires the Graphical Editing Framework (GEF) and Zest Visualization Toolkit SDKs that are not included in the RCP installation



Go to Help > Install New Software… 

In the Work With: dropdown box, select the update site:

Kepler - http://download.eclipse.org/releases/kepler

Install GEF and Zest SDKs 

In the dialog box, expand Modeling and select 

Graphical Editing Framework GEF SDK



Graphical Editing Framework Zest Visualization Toolkit SDK



Select Next, Eclipse calculates required plug-ins



Select Next again.



Accept the License agreement and Select Finish

Exercise 1.

Launch Eclipse RCP and select the default workspace

2.

Go to Help > Install New Software… and select GEF and Zest Framework SDKs

3.

Install GEF and Zest SDKs

4.

Restart Eclipse once the installation is completed

Eclipse RCP/mHARP Overview

Eclipse RCP/mHARP Overview 

Objective  To

introduce the Eclipse RCP platform and mHARP architecture



Contents  What

is Eclipse RCP?

 What

is mHARP-EQ?

The Eclipse Platform 

Integrated development environments(IDEs) for Java, C/C++, Fortran, etc  Factor

out the language independent parts (platform)  Then, add in the language-specific pieces later (plug-ins) 

“The Eclipse platform itself is a sort of universal tool platform – it is an IDE for anything and nothing in particular.” – Eclipse Platform Overview

What is Eclipse? 



Universal platform for integrating development tools Open, extensible architecture based on plug-ins 

Plug-ins are installed into Eclipse to add new behavior



JDT is just a collection of plug-ins

Plug-in Dev. Env (PDE) Java Dev Tools (JDT) Eclipse Platform Java VM

RCP Core

Eclipse Plug-in Architecture 

OSGi is a specification describing a modular approach for Java applications



Plug-in – smallest unit of Eclipse function



Extension Point – named entity for collecting “contributions”  Example:



extension point for mHARP analysis

Extension – a contribution  Example:

an mHARP analysis

Eclipse Plug-in Arch. (2) 

Each plug-in 

    



Contributes to 1 or more extension points Optionally declares new extension points Depends on a set of other plug-ins Contains Java code libraries and other files May export Java-based APIs for downstream plug-ins Lives in its own plug-in subdirectory

Details are defined in the plug-in manifest Manifest declares contributions  Code implements contributions and provides API  plugin.xml file in root of plug-in subdirectory 

Eclipse Plug-in Arch. (3) 

Plugin example

plug-in A







plug-in B

extension point P

extension

interface I

class C

Plug-in A 

Declares extension point P



Declares interface I to go with P

Plug-in B 

Implements interface I with its own class C



Contributes class C to extension point P

Plug-in A instantiates C and calls its I methods

Core Technologies 

OSGI  Provides  Permits

plug-in based environment for Eclipse

lazy-loading of plug-ins

 Permits

multiple version of the same plugin/packages to co-exist

 Every

Eclipse plug-in is an OSGi plug-in (or bundle)

 Every

OSGi plug-in can be treated as a standard JAR outside of OSGi

Core Technologies (2) 



SWT – a platform independent widget toolkit that wraps native widgets offering a native look and feel across platforms JFace – provides Model-View-Controller wrapping for SWT widgets (e.g. TreeViewer, TableViewer, etc) 

Model – consists of application data, business rules, logic and functions



View – visual representation of the data (e.g. chart, diagram)



Controller – mediates input converting commands for the model or view

Eclipse Basics 

The workbench contains the menus, toolbars, editors, and views that make up the main Eclipse Window



The workbench represents the desktop development environment 

Contains a set of tools for resource management



Provides a common way to navigate through the resources



Multiple workbenches can be opened simultaneously



Only one workbench per workspace

View View

Editor

View

Perspectives 

A Perspective is a visual container for a set of views/editors



They are task oriented, i.e. they contain specific views for doing certain tasks  Java  C++

Perspective – Java development

Perspective – C++ development

View 

A View is typically used to work on a set of data, might be hierarchical  Example:

Eclipse package explorer, mHARP Scenarios view



Views can be freely positioned in the User Interface

Components of RCP App. 

Main program – a RCP main application class implements IApplication, synonymous to the main method for a standard Java application 



A Perspective – defines the layout of your application 



This class should be defined via extension point org.eclipse.core.runtime.application

Declared via extension point org.eclipse.ui.perspective

Workbench Advisor – controls the appearance of the application (menus, toolbars, perspectives, etc)

mHARP-EQ Architecture  Dynamic

New Third-Party Analyses Compare, Contrast, Validate Auto-update mHARP

GIS

Workflow

Data

Eclipse RCP 

Plug-ins, Provenance, Environment

Plug-in Framework

mHARP-EQ Architecture (2)

mHARP Core Technologies 

Eclipse RCP



Geotools



Visualization Toolkit



JFreeChart



Ktable



Jasper Reports

More RCP Resources 

Eclipse RCP Tutorial •



http://www.vogella.com/articles/Eclipse3RCP/ article.html

Eclipse RCP Wiki •

http://wiki.eclipse.org/index.php/Rich_Client_Pl atform

Setup mHARP Development Environment

Setup mHARP Development Environment 

Objective  Checkout

all required mHARP projects for development



Content  Step

by step instructions to checkout each repository

 Adding



projects to working sets

Full instructions on mHARP wiki: https://opensource.ncsa.illinois.edu/conflue nce/display/HARP/Environment+Setup

mHARP Repositories 

5 Git repositories make up mHARP-EQ  mharp  mharp-earthquake  mharp-gis

 mharp-orbit  mharp-tools

Checkout mHARP Repository 

In Eclipse, go to File > Import > Git > Projects from Git



Click Next



Select URI and Click Next



Copy and Paste into the URI field: https://anonymous@opens ource.ncsa.illinois.edu/stash /scm/harp/mharp.git



For password, enter anonymous and click Next

Checkout mHARP Repository (2) 

Select master



Click Next

Checkout mHARP Repository (3) 

Assuming the default “workspace”, we recommend creating a git directory in the workspace and then checking out each repository to that directory (e.g. eclipse_workspace/git /mharp)



Click Next

Checkout mHARP Repository (4) 

Select Import existing projects



Click Next

Checkout mHARP Repository (5) 

Select all projects



Uncheck the box Search for nested projects



Check Add project to working sets



See next slide...

Checkout mHARP Repository (6) 



To add the checked out files to a working set: 

Click Select



Click New



Select Java



Click Next



Where it says “Working set name” enter mHARP



Click Finish



Check the box that says mHARP



Click OK

See Next Slide

Checkout mHARP Repository (7) 

Your Import Projects dialog should look similar to this



Click Finish



Projects will be checked out into workspace/git/mharp and added to the working set mHARP

Show Working Sets 

Use dropdown menu to organize projects by Working Sets

Exercise 1.

Checkout mharp git repository into working set mHARP

2.

In Package Explorer, select to show Working Sets

Checkout mHARP-Earthquake Repository 

Similar to the mharp git repository



In Eclipse, go to File > Import > Git > Projects from Git



Click Next



Select URI and Click Next



Copy and Paste into the URI field: https://anonymous@opensource .ncsa.illinois.edu/stash/scm/harp /mharp-earthquake.git



For password, enter anonymous and click Next

Checkout mHARPEarthquake Repo. (2) 

Similar to the mharp repository, put mharpearthquake in the location:  eclipse_workspace/g

it/mharp-earthquake



Click Next

Checkout mHARPEarthquake Repository (3) 

Select all projects



Uncheck the box Search for nested projects



Check Add project to working sets



Similar to mharp repository, create a new working set called mHARP-EQ and select it



Click Finish

Exercise 1.

Checkout mharp-earthquake into working set mHARP-EQ

Checkout mHARP-GIS 

Checkout mharp-gis similar to mharp



Repository URI: https://[email protected] s.edu/stash/scm/harp/mharp-gis.git



Checkout repository to eclipse_workspace/git/mharp-gis



For working set, create mHARP-GIS

Checkout mHARP-Orbit 

Checkout mharp-orbit similar to mharp



Repository URI: https://[email protected] s.edu/stash/scm/harp/mharp-orbit.git



Checkout repository to eclipse_workspace/git/mharp-orbit



For working set, create mHARP-Orbit

Checkout mHARP-Tools 

Checkout mharp-tools similar to mharp



Repository URI: https://[email protected] s.edu/stash/scm/harp/mharp-tools.git



Checkout repository to eclipse_workspace/git/mharp-tools



For working set, create mHARP-Tools

Exercise 1.

Checkout mharp-gis into working set mHARP-GIS

2.

Checkout mharp-orbit into working set mHARP-Orbit

3.

Checkout mharp-tools into working set mHARP-Tools

Launch mHARP-EQ 

Find project org.mharp.eq.rcp



Double click on the file org.mharp.eq.rcp.product



Under Testing click on Launch an Eclipse application



If you see a dialog with the message “errors exist in org.geotools”, click Proceed

Analysis framework

Analysis Framework 

Objective  Create



a new mHARP Analysis

Content  Create

the analysis description file (User Interface)  Create the Analysis Task  Register Analysis with newAnalyses extension point  Register

Task with ogreTasks extension point  Launch mHARP-EQ with new analysis

Step 1.

Analysis Description File 

XML file specifying the inputs, outputs, and parameters for the new analysis



Defines User Interface for New Analysis



Put file in defining plug-ins descriptions folder

Create New Plug-in 

Create new eclipse plugin, File > New > Plug-in Project



Project Name: org.mharp.eq.tutorial



Leave rest as default



Click Next

Create New Plug-in (2) 

Uncheck the box “This plugin will make contributions to the UI”



Leave rest as default



Click Finish



You can find your project under “Other Projects” working set

Create Descriptions Folder 

Right click on the new project and select New > Folder



Where it says “Folder Name:” enter descriptions



Click Finish

Create Analysis Desc. File 

Similar to the folder creation, right click on the descriptions folder and select New > File



Where it says “File name” enter NewBuildingDamage.xml



Click Finish

Exercise 1.

Create new Plug-in Project

2.

Create descriptions folder

3.

Create empty file NewBuildingDamage.xml

Analysis Description Tag 

 id

(required) – must match the id given to the analysis in the org.mharp.core.analysis.newAnalyses extension point (we will add the id later)

 help-context

(optional) – assigns a help context id to this analysis



Code:

Analysis Type Tag 

 type

(required) - specifies analysis iteration type

 property

(required)

 name

– special keyword to identify which dataset is the dataset being iterated over

 value



– dataset to iterate over

Code:

Groups Tag 

 Specify

the grouping of User Interface Inputs and parameters



Code: Required Advanced

Parameter Tag 

Attributes 

group (unused) – string that must match a member of



format – the format of whatever phylum parameter this is. For datasets, indicates type of dataset (mapping, shapefile, etc)



phylum – type of parameter, currently supports string, dataset, or boolean



cardinality – how many of this type, currently supports single or multiple



key – name of property which will correspond to Analysis Task Setter (e.g. key = “building”, Analysis Task must have setBuilding)



friendly-name – name that should be displayed in the User Interface



optional – value of true denotes this parameter is not needed to perform the analysis



advanced – a value of true denotes this is an advanced parameter and should be in that grouping. It is required, but this will hide it in the UI under Advanced grouping

Parameter Tag (2) 

Elements 

A list of types that are accepted by this , this should match the tag field of the dataset type defined at org.mharp.eq.gisSchemas



A textual description of the parameter. Primarily used to generate tooltips in the UI.

Result Name 

Code:



Building Dataset 

Code:

buildingv4 buildingv5

Hazard Dataset 

Code:

hazardRaster deterministicHazardRaster hazard

Fragility Dataset 

Code:

buildingFragilities

Output Tag 

- two required properties base-dataset-key – the key of the which is the base for this new Dataset  Schema – The id of the schema that this Dataset implements (see org.mharp.eq.gisSchemasextension point) 



Attributes format – the format of the parameter, currently supports string or dataset  key – the name of the property for which value should be added. No spaces allowed  friendly-name – name of property for which value should be added 



Elements 

property – additional properties required by output

Output 

Code:

Produced Types Tag 

- types produced by this analysis



Elements 

– should match the output type (e.g. the tag in the org.mharp.eq.gisSchemas extension



Code:

buildingDamagev4

Closing Tag 

Code:





Ctrl-s to save the file

Exercise 1.

Add the analysis description pieces for the new analysis

Step 2.

Create Analysis Task 

Java class performs the work



Must implement the Analysis Task that corresponds to the (e.g. SimpleFeatureTask)



Keys given to each parameter must match set methods in this class



Column names given to the outputs must match values given in the output schema type

Add Required Dependencies   

 

Open project MANIFEST.MF under META-INF folder Select Dependencies tab Under Required Plug-ins, click Add 

org.mharp.core.analysis



org.mharp.gis



org.mharp.eq



org.mharp.eq.hazard



ncsa.tools.elf.core



ncsa.tools.common



ncsa.tools.ogrescript



org.dom4j



org.geotools

Finish dependencies Ctrl-s to save MANIFEST.MF

Create New Java Class 

Right click on the project, New > Class



Package: 



Name: 



NewBuildingDamageTask

Superclass: 



org.mharp.eq.tutorial.tasks

SimpleFeatureTask

Click Finish

Add Unimplemented Methods 

If your eclipse already add the method, you don’t need to do this part.



Click on the red x in the class and select add unimplemented methods



Adds handleFeature method – each building is passed in 1 at a time, we will add our business logic here

Add Set Methods 

For key=buildings  Nothing



to set, this is our iterating dataset

For key=hazard  setHazard(List



For key=fragilities  setFragilities(FragilityDataset



hazardList)

fragilities)

Note: if your eclipse complaints “can’t resolve a type”, ctrl+shift+o (it will import all classes you need)

Hazard Input 

Add class variable



Code: private FragilityHazardSet hazardSet = new FragilityHazardSet();



Add Set Method



Code: public void setHazard(List hazardList) { hazardSet.setDatasets(hazardList); }

Fragility Input 

Add Class Variable



Code: private FragilityDataset fragilities;



Add Set Method



Code public void setFragilities(FragilityDataset fragilities) { this.fragilities = fragilities; }

Exercise 1.

Add class variable for fragility and Set Method

2.

Add class variable for hazard and Set method

Implement handleFeature 

Code: Point location = (Point) feature.getAttribute(0); // Period of Demand Type double period = 0.0;

// Demand Type for Fragility String demandHazardType = "PGA"; // Units of Demand for Fragility String demandHazardUnits = "g"; // Default int spectrumOverride = 0;

Implement handleFeature (2) 

Get hazard that best matches the period, demand type and demand units. It will find the dataset that can best provide the hazard



Code: //Find Hazard Value at Location double hazardVal = hazardSet.getHazardVal(location, period, demandHazardType, demandHazardUnits, spectrumOverride);

Implement handleFeature (3) 

 

Get the first fragility set in the map and get the damage value for the first fragility curve in the set for the hazard value Store the result in the resultMap associated with the Task Code: FragilitySet randomFragility = fragilities.getFragilitySets().values().iterator().next();

double damage = randomFragility.getFragilities().get(0).getValueAtPoint(hazar dVal); resultMap.put("meandamage", damage );

Exercise 

Implement handleFeature 1.

Get hazard value at building location

2.

Get Fragility curve and corresponding damage for the hazard value

3.

Store damage as meandamage

Step 3. Register Analysis 

Objective  Register

analysis with org.mharp.core.analysis.newAnalyses extension point



Content  How

to register a new analysis

Analysis Extension Point 

Inside the project org.mharp.eq.tutorial, open MANIFEST.MF



Click on the Extensions tab



Click Add



Where it says Extension Point filter, search for org.mharp.core.analysis.new Analyses



Select the Extension Point and Click Finish

Create Analysis Extension 

To create a new extension, right click on org.mharp.core.analysis.newAnalyses and select New > analysis 



Your eclipse may already add the new analysis for you, in this case, you don’t need to add another analysis

This will create a blank analysis extension with the following attributes: 

id – This id must match the id given in the analysis description file, NewBuildingDamage.xml



name – Friendly name of the analysis and should be i18n



tag – This tag must match the tag in the ncsa.tools.ogrescript.ogreTasks extension. No spaces allowed



descriptor – Location of the analysis description file



category – The category to put the new analysis in, for display purposes



description – brief description of the new analysis

Analysis Extension Details 

Fill in the following for our new analysis



id 



name 



descriptions/NewBuildingDamage.xml

category 



tutorialBuildingDamage

descriptor 



New Building Damage

tag 



org.mharp.eq.tutorial.NewBuildingDa mage

Building

description 

new building damage analysis

Update Analysis Description 

Open NewBuildingDamage.xml



Replace



With

Exercise 1.

Add Extension Point in MANIFEST.MF

2.

Add Extension to Extension Point for new Analysis in MANIFEST.MF

3.

Update NewBuildingDamage.xml with analysis id

Step 4.

Register Analysis Task 

Objective  Register

new analysis task with ncsa.tools.ogrescript.ogreTasks extension point



Content  How

to register a new analysis task

Analysis Task Extension Point 

Inside the project org.mharp.eq.tutorial, open MANIFEST.MF



Click on the Extensions tab



Click Add



Where it says Extension Point filter, search for ncsa.tools.ogrescript.ogre Tasks



Select the Extension Point and Click Finish

Create Analysis Task Extension 



Similar to the newAnalyses extension, right click on ncsa.tools.ogrescript.ogreTasks and select New > ogreTasks This will create a blank analysis task extension with the following attributes: 

id – This id should match the fully qualified class name of the task (see class attribute)



name – This is the friendly name of the Task and should be i18n



tag – This tag must match the tag in the org.mharp.core.analysis.newAnalyses extension point



class – This points to the implementing class we created previously

Analysis Task Extension Details 

Fill in the following for our new analysis task



id 



name 



New Building Damage Task

tag 



org.mharp.eq.tutorial.tasks.New BuildingDamageTask

tutorialBuildingDamage

Class 

org.mharp.eq.tutorial.tasks.NewBuild ingDamageTask

Add Plug-in to mHARP 

Go to Run > Run Configurations…



Under Eclipse Applications select org.mharp.eq.rcp.product



Select the Plug-ins tab



Locate our plugin org.mharp.eq.tutorial and check the box to include it



Click Run

Update Preferences 

Click on File > Preferences



Select File Locations



Change Repository update service URL to  Windows

- file:///C:/repositories.xml

 Linux

/Mac – file:/home/username/repositories.xml

 Or



wherever you put the file

Click OK

Sync Repositories 

Click on Synchronize button to fetch defined repositories

Create New Scenario 

Select File > New Scenario



Where it says Name enter Tutorial Scenario



Click Next

Create New Scenario (2) 

Where it says Country select United States of America



Expand Tennessee and select Shelby county



Click Next



Click Finish

Execute Analysis 

Right Click on the new scenario and select Execute Analysis



Expand Building and select New Building Damage



Click Finish

New Building Damage 

Click on the New Building Damage box to build the User Interface



Note: the analysis is currently red because not all input parameters are satisified



See next slide for inputs

New Building Damage (2) 

For Result Name, enter Building Damage



For Buildings, click Search and locate Shelby County RES3



For Hazard, click Search and locate Memphis 7.7M PGA



For Fragilities, click Search and locate Default Building Fragilities 1.0



Click the Execute button that should now be enabled

Exercise 1.

Run the New Building Damage analysis

Advanced Topics

Add Dataset Type 

Objective  Add



new dataset type to mHARP-EQ

Content  Creating

a new dataset schema

 Adding

schema extension to extension point

 Adding

field-specific metadata

New Dataset Schema 

Create a folder in the root directory of your plugin called gisSchemas



Create a new empty file called mharptutorialBuildingDamage_1.0.xsd in gisSchemas folder



See mharp-buildingDamageVer4_1.0.xsd in plugin org.mharp.eq as an example

Sample Code for Schema

Add Schema Extension Point 

Go to org.mharp.eq.tutorial project and open MANIFEST.MF



Click on Extensions



Click Add



Add org.mharp.gis.gisSchemas

Add Schema Extension 

Right click on org.mharp.gis.gisSchemas and select New > gisSchema



This will create a new extension with the following attributes 

id – The id of the schema



name – A friendly name for the schema



version A version identifier for the schema



type – a short type name for the schema (used in analysis description to identify input types)



description – a user-friendly description of the schema



file – The schema file defined in the previous step



format – The format of the schema. Predefined formats include shapefile, fragility, mapping, raster, and table



requiredFields – The list of fields that are required as a minimum for this schema. These will be prompted to map during ingestion of data



mapLayer – For shapefiles, the suggested smart layering position in the map. Should be between 1 and 100. A mapLayer of -1 indicates dataset should be invisible by default



category – a category name for the schema. Categories determine what subfodlers the schemas appear in the repository

Schema Extension Details 

Id org.mharp.eq.tutorial.schemas.tutorialBuil dingDamage.v1.0



name - Tutorial Building Damage



version - 1.0



type - tutorialBuildingDamage



description - Tutorial building damage output type



file - gisSchemas/mharptutorialBuildingDamage_1.0.xsd



format - Shapefile



requiredFields - meandamage



mapLayer - 10



category - Buildings

Field Specific Metadata 

Create a folder in the root directory of your plugin called gisMetadata



Create a file name corresponding to the schema xsd file name, but ending in .xml (e.g. mharptutorialBuildingDamage_1.0.xml)



mHARP will automatically look for a file with the same prefix in gisMetadata when displaying fields in the User Interface

Metadata Attributes 

 

    

Column-id – The id to match the column id from the xsd file. Should not include the maeviz. prefix Friendly-name Is-numeric Unit Field-length Importance Is-result Agg-type

Sample Metadata for Data Type

Create Custom Iterator 

Objective  Add



new custom iterator

Content  What

is a custom iterator

 Adding

a custom iterator extension

Custom Iterators 

Simple Feature Iterator  Iterates

over a feature dataset providing 1 feature per iteration to the analysis task



Table Iterator  Iterates

over a table dataset providing 1 row per iteration to the analysis task



Custom Iterator  Handles

special cases where simple iteration is not applicable (e.g. see NBSR Iteration Handler)

Create Custom Iterator Class 

Right click on the project org.mharp.eq.tutorial and select New > Class



Package – org.mharp.eq.tutorial.handlers



Name – ExampleIterationHandler



Superclass – IterationHandler



Click Finish

Implement Iterator Class This code should go inside wrappedCreateIterationElements(…)  Code: 

// This must match the tag for the analysis and task Element e = new DefaultElement("example"); // Name of the result e.addAttribute("myresult", AnalysisUtils.variableizeAsConstant("result.type", "myresult")); // Input - must match "key" inside analysis description e.addAttribute("my-buildings",AnalysisUtils.variableizeAsConstant(null, "mybuildings")); // Output - bldgresult must match to an output key in analysis description e.addAttribute("result-bldg", AnalysisUtils.variableizeAsConstant("collection", "bldgresult")); e.addAttribute("analysis-id", node.getUniqueId());

Create Analysis Task 

Right click on the project org.mharp.eq.tutorial and select New > Class



Package – org.mharp.eq.tutorial.tasks



Name – CustomIteratorAnalysisTask



Superclass – AnalysisBaseTask



Click Finish

Implement Custom Analysis Task 

Code

private String resultName; private FeatureDataset myBuildings; private FeatureCollection resultBldg; public String getResultName() { return resultName; } public void setResultName(String resultName) { this.resultName = resultName; } public FeatureDataset getMyBuildings() { return myBuildings; }

@Override protected void wrappedExecute(IProgressMonitor monitor) throws ScriptExecutionException { System.out.println("do something, save the results"); } public void setMyBuildings(FeatureDataset myBuildings) { this.myBuildings = myBuildings; } public FeatureCollection getResultBldg() { return resultBldg; } public void setResultBldg(FeatureCollection resultBldg) { this.resultBldg = resultBldg; }

Exercise 1.

Create custom iterator class

2.

Implement iterator class

3.

Create Analysis Task

4.

Implement Analysis Task

Custom Analysis Description 

Right click on the descriptions folder and select New > File



Where it says “File name” enter CustomIteratorBuildingDamage.xml



Click Finish

Custom Analysis Description (2)

 Code

Required Advanced buildingv4 buildingv5 buildingDamagev4

Register Custom Iterator 

Extension Point  org.mharp.core.analysis.iterationHandlers



Attributes  id

– This id should match the fully qualified class name of the iteration handler

 tag

– This tag is what will be used in the xml tag to identify what iteration handler to call for the analysis

 class

– class that implements the new iteration handle

Custom Iterator Extension 

Inside org.mharp.eq.tutorial, open the MANIFEST.MF.



Click on the Extensions tab



Click the Add button and add org.mharp.core.analysis.iterationHandlers



Right click on the extension point and select New > iterationHandler

Iteration Handler Attributes 

id – org.mharp.eq.tutorial.han dlers.ExampleIterationHan dler



name – Custom Building Iterator



tag – customBldgIterator



class org.mharp.eq.tutorial.han dlers.ExampleIterationHan dler

Register Custom Analysis 

Register at newAnalyses extension point



id org.mharp.eq.tutorial.CustomBu ildingDamage



name – Custom Building Damage



tag - example



descriptor – descriptions/CustomIteratorBuil dingDamage.xml



category - Building

Register Custom Analysis Task 

Register at ogreTasks extension point



id – org.mharp.eq.tutorial.tasks. CustomIteratorAnalysisTask



name – Custom Building Damage



tag - example



class org.mharp.eq.tutorial.tasks. CustomIteratorAnalysisTask

Run Custom Iterator 

To see your new analysis with custom iterator, re-launch mHARP-EQ



Open a scenario and follow the previous steps for executing a new analysis, you should see Custom Building Damage in the Building category

Questions?

Resources 

User/Developer Documentation 



Analysis Framework Developer’s Guide 



https://opensource.ncsa.illinois.edu/confluence/displ ay/HARP/Analysis+Framework+Developer%27s+Guid e

Adding Dataset Types 



https://opensource.ncsa.illinois.edu/confluence/displ ay/HARP/mHARP+Home

https://opensource.ncsa.illinois.edu/confluence/displ ay/HARP/Creating+New+Data+Schemas

Git e-book 

http://git-scm.com/book