SlideShare a Scribd company logo
Deep dive into Oracle ADF
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
About	
  me	
  
2	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
The	
  Briefing	
  
3	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
   4	
  

Recommended for you

06 jQuery #burningkeyboards
06 jQuery  #burningkeyboards06 jQuery  #burningkeyboards
06 jQuery #burningkeyboards

This document provides an introduction to jQuery, including examples of how to use jQuery. It discusses jQuery plugins, performance tips for jQuery, and jQuery deferreds/promises. Some key points: - jQuery is a JavaScript library that allows DOM manipulation and event handling via JavaScript - jQuery code uses $ as an alias for jQuery functions - Plugins can extend jQuery's functionality - For performance, cache selections, append outside loops, detach/reattach elements being modified - Deferreds/promises allow asynchronous functions to be chained together

burningkeyboardsjavascriptjquery
Min-Maxing Software Costs
Min-Maxing Software CostsMin-Maxing Software Costs
Min-Maxing Software Costs

Software development is riddled with explicit and implicit costs. Every decision you make has a cost attached to it. When you're writing code, you're making an investment, the size of which will for a long time define the costs of your future growth. Making right decision about these investments is very tricky and the cost of wrong decisions might be crippling for both business and teams that support it. Extreme Programming and Test Driven Development in particular are practices that are aiming at supporting development effort by making it easier to introduce change. That said, sometimes those tools can become a problem of its own when applied in the wrong way or for the wrong context. Understanding software cost forces is a very important skill of successful teams and something that helps understand how to apply XP and TDD in different contexts.

frameworksradcosts
JavaScript Unit Testing with Jasmine
JavaScript Unit Testing with JasmineJavaScript Unit Testing with Jasmine
JavaScript Unit Testing with Jasmine

This document discusses JavaScript unit testing with Jasmine. It provides an overview of Jasmine's syntax including describes, contexts, matches, spies and stubs. It also discusses tools that can be used with Jasmine like jasmine-jquery for DOM testing and jasmine-given for behavior-driven development style tests.

javascriptjasminetesting
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
Use	
  Case	
  (Dive	
  Site)	
  
5	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
Use	
  Case	
  (Dive	
  Site)	
  
6	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
Dynamic	
  BC	
  Model	
  Structure	
  
En0ty	
  Defini0on	
  
View	
  Object	
  Defini0on	
  
View	
  Object	
  Instance	
  
ABributes	
   UI	
  Hints	
  
Valida0on	
  rules	
  
ABributes	
   LOV’s	
  
View	
  Accessors	
  
Lookup	
  View	
  Defini0on	
  
UI	
  Categories	
  
View	
  Criterias	
  
7	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
   8	
  

Recommended for you

Workshop 5: JavaScript testing
Workshop 5: JavaScript testingWorkshop 5: JavaScript testing
Workshop 5: JavaScript testing

Workshop JavaScript Testing. Frameworks. Client vs Server Testing. Jasmine. Chai. Nock. Sinon. Spec Runners: Karma. TDD. Code coverage. Building a testable JS app. Presentado por ing: Raúl Delgado y Mario García

visualengintestingjavascript
node.js Module Development
node.js Module Developmentnode.js Module Development
node.js Module Development

Node.js has given JavaScript a new resurgence as a server-side language. No longer just for image rollovers and AJAX, JS is now available as a platform for creating lightning-fast, lightweight, networked applications. In this session, we will move beyond Node’s base web servers and Twitter applications, and into module development: those small, reusable components that are the foundation for every business application on every platform. Learn how to create a module within Node.js, how to test your module and validate functionality, and how to get your creation distributed into the wild. With this knowledge, you can make the next great Node package and become famous.

node.jsnodesoftware development
A New Baseline for Front-End Devs
A New Baseline for Front-End DevsA New Baseline for Front-End Devs
A New Baseline for Front-End Devs

This document summarizes a presentation on establishing a baseline for front-end developers. It discusses that front-end developers should have a solid understanding of JavaScript without jQuery, prototypal inheritance, Function.bind, and basic knowledge of frameworks like Backbone, Ember and CanJS. It also emphasizes the importance of skills with Git/GitHub, modular code and builds, developer tools, the command line, templates, CSS and testing.

javascriptweb design and development
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
Giant	
  Stride	
  Entry	
  
9	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
Giant	
  Stride	
  Entry	
  
10	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
Ø  Generate VO’s name
Ø  Try to find the VO
Ø  Create View Definition
Ø  Create VO instance for the View Definition
	
  
public	
  ViewObject	
  createDynamicVO(String	
  agileEn0tyName)	
  {	
  
	
  	
  	
  	
  	
  	
  //Generate	
  VO	
  name	
  for	
  the	
  given	
  en0ty	
  name	
  just	
  by	
  adding	
  VAGILE_	
  prefix	
  
	
  	
  	
  	
  	
  	
  //The	
  name	
  for	
  "DIVERS"	
  agile	
  en0ty	
  is	
  generated	
  as	
  "VAGILE_DIVERS”.	
  JboNameU0l	
  class	
  can	
  be	
  used	
  	
  
	
  	
  	
  	
  	
  	
  String	
  agileVOName	
  =	
  getAgileVOName(agileEn0tyName);	
  	
  
	
  	
  	
  	
  	
  	
  ViewObject	
  agileVO	
  =	
  findViewObject(agileVOName);	
  
	
  	
  	
  	
  	
  	
  if	
  (agileVO	
  ==	
  null)	
  {	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ViewDefImpl	
  agileViewDef	
  =	
  new	
  VAgileDefImpl(agileVOName,	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  getAgileEn0tyDefini0on(agileEn0tyName));	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  agileVO	
  =	
  createViewObjectForDef(agileVOName,	
  agileViewDef);	
  
	
  	
  	
  	
  	
  	
  }	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  return	
  agileVO;	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  }	
  
Dynamic	
  View	
  Object	
  
11	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
Ø  Extend VAgile view definition
Ø  Set row implementation class
Ø  Create entity definition
Ø  Resolve and register definition object
	
  
public	
  class	
  VAgileDefImpl	
  extends	
  ViewDefImpl	
  {	
  
public	
  VAgileDefImpl(String	
  name,	
  VAgileEn0tyDefini0onRowImpl	
  agileEn0tyDefini0on)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  super(DEF_SCOPE_SESSION,	
  name,	
  "com.cs.blog.deepdiveadf.agiledatamodel.views.VAgile");	
  
	
  	
  	
  	
  	
  	
  	
  	
  setRowClass(VAgileRowImpl.class);	
  
	
  	
  	
  	
  	
  	
  	
  	
  String	
  en0tyName	
  =	
  generateAgileEn0tyName(name);	
  	
  //VAGILE_DIVERS	
  -­‐>	
  VAGILE_DIVERS_ENTITY	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  En0tyDefImpl	
  en0tyDefImpl	
  =	
  new	
  En0tyAgileDefImpl(en0tyName,	
  agileEn0tyDefini0on);	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  addEn0tyUsage("En0ty",	
  en0tyDefImpl.getName(),	
  false,	
  false);	
  
	
  	
  	
  	
  	
  	
  	
  	
  addAllEn0tyABributes("En0ty");	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  //Two	
  magic	
  calls	
  
	
  	
  	
  	
  	
  	
  	
  	
  resolveDefObject();	
  
	
  	
  	
  	
  	
  	
  	
  	
  registerDefObject();	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  }	
  
Dynamic	
  View	
  DefiniOon	
  
12	
  

Recommended for you

Web Optimization Summit: Coding for Performance
Web Optimization Summit: Coding for PerformanceWeb Optimization Summit: Coding for Performance
Web Optimization Summit: Coding for Performance

I discuss topics like method forking, lazy defining of methods, JS minifiers, dos and don'ts of minification.

optimizationjavascriptperformance
Decoupling with Design Patterns and Symfony2 DIC
Decoupling with Design Patterns and Symfony2 DICDecoupling with Design Patterns and Symfony2 DIC
Decoupling with Design Patterns and Symfony2 DIC

How do you create applications with an incredible level of extendability without losing readability in the process? What if there's a way to separate concerns not only on the code, but on the service definition level? This talk will explore structural and behavioural patterns and ways to enrich them through tricks of powerful dependency injection containers such as Symfony2 DIC component.

phpsoftware designsymfony
An Introduction to the World of Testing for Front-End Developers
An Introduction to the World of Testing for Front-End DevelopersAn Introduction to the World of Testing for Front-End Developers
An Introduction to the World of Testing for Front-End Developers

Presented at Web Unleashed 2017. More info at www.fitc.ca/webu Presented by Haris Mahmood, Shopify Overview As front-end developers become more and more capable of building web applications, the value of testing front-end code is now more valuable than ever. Unfortunately, the testing ecosystem can be confusing, and daunting to those just getting started with the vast number of libraries and testing frameworks offering various tools and capabilities. This talk aims to navigate the world of testing front-end code, and provide steps for front-end developers to incorporate testing into their work and projects quickly and with ease! Objective Provide an introduction and overview of the world of testing for front-end development, and tips and steps to get started today. Target Audience Front-end developers with no or little experience with testing. Five Things Audience Members Will Learn Understanding on why testing is important What options exist for testing today What type of tests are best for what scenario How to assess what frameworks and libraries to use Steps on getting started with testing

 
by FITC
web designweb developmentfront-end developers
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
Ø  Set implementation class of entity instances
Ø  Add agile attributes
Ø  Resolve and register the definition object
	
  
public	
  class	
  En0tyAgileDefImpl	
  extends	
  En0tyDefImpl	
  {	
  
public	
  En0tyAgileDefImpl(String	
  en0tyName,	
  VAgileEn0tyDefini0onRowImpl	
  agileEn0tyDefini0on)	
  {	
  
	
  	
  	
  	
  super(en0tyName);	
  
	
  	
  	
  	
  setRowClass(En0tyAgileImpl.class);	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  
	
  	
  	
  	
  RowIterator	
  agileABributes	
  =	
  agileEn0tyDefini0on.getAgileABributes();	
  
	
  	
  	
  	
  while	
  (agileABributes.hasNext())	
  {	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  addAgileABribute((VAgileABributesRowImpl)	
  agileABributes.next());	
  }	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  //Two	
  magic	
  calls	
  
	
  	
  	
  	
  resolveDefObject();	
  
	
  	
  	
  	
  registerDefObject();	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  }	
  
Dynamic	
  EnOty	
  DefiniOon	
  
13	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
	
  private	
  void	
  addAgileABribute(VAgileParamDefini0onRowImpl	
  agileABr)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  ABributeDefImpl	
  at	
  =	
  addABribute(/*aBrName*/	
  agileABr.getName(),	
  	
  /*columnName*/	
  	
  agileABr.getName(),	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  /*javaType*/	
  agileABr.getJavaType(),	
  	
  /*isPrimaryKey*/	
  	
  agileABr.isPK(),	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  /*isDiscriminator*/	
  false,	
  	
  	
  /*isPersistent*/	
  !	
  agileABr.isTransient());	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  at.setMandatory(agileABr.isMandatory());	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  at.setDefaultValue(agileABr.getDefaultvalueliteral());	
  
	
  	
  	
  	
  	
  	
  	
  	
  at.setTransientExpression(agileABr.getDefaultvalueexpression());	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  if	
  (agileABr.isReadonly())	
  at.setUpdateableFlag(ABributeDef.READONLY);	
  
	
  	
  	
  	
  	
  	
  	
  	
  if	
  (agileABr.getDependencies()!=null)	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  at.setBackwardDependencies(Arrays.asList(agileABr.getDependencies().split("	
  ")));	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  at.setProperty(ABributeHints.ATTRIBUTE_LABEL,	
  agileABr.getLabel());	
  
	
  	
  	
  	
  	
  	
  	
  	
  at.setProperty(ABributeHints.ATTRIBUTE_TOOLTIP,	
  agileABr.getDescrip0on());	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  at.setProperty(ABributeHints.ATTRIBUTE_AUTOSUBMIT,	
  agileABr.isAutoSubmit());	
  	
  	
  	
  	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  if	
  (agileABr.getMaxlength()!=null)	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  at.addValidator(AgileValidatorFactory.getLengthValidator(agileABr.getMaxlength()));	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  …	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  }	
  
Agile	
  APribute	
  
14	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
Ø  There is a set of pre-defined validators
Ø  JboLengthValidator, JboCompareValidator, JboExpressionValidator, …
Ø  Extend JboAbstractValidator
Ø  Invoke a constructor and specify the error message
	
  public	
  sta0c	
  JboLengthValidator	
  getLengthValidator(int	
  maxLength)	
  {	
  
	
  	
  	
  	
  JboLengthValidator	
  jlv	
  =	
  	
  
	
  	
  	
  	
  	
  	
  	
  new	
  JboLengthValidator(/*inverse*/	
  	
  	
  	
  	
  false,	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  /*operType*/	
  JboLengthValidator.LESSTHANEQUALTO,	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  /*dataType*/	
  JboLengthValidator.CHARACTER,	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  /*value*/	
  	
  	
  	
  	
  	
  	
  	
  maxLength);	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  //maxlength_err=Value	
  must	
  not	
  be	
  longer	
  than	
  {0}	
  characters	
  
	
  	
  	
  	
  jlv.setErrorMsgId(MAX_LENGTH_ERROR);	
  
	
  	
  	
  	
  HashMap	
  errvaluesMap	
  =	
  new	
  HashMap();	
  
	
  	
  	
  	
  errvaluesMap.put("0",	
  	
  Integer.toString(maxLength));	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  jlv.setErrorMsgExpressions(errvaluesMap);	
  	
  	
  
	
  	
  	
  	
  return	
  jlv;	
  }	
  
Length	
  Validator	
  Example	
  
15	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
Ø  Create Resource Bundle Definition
Ø  Implement ResourceBundleDef interface
Ø  Link entity definition to the resource bundle
	
  <ResourceBundle>	
  
	
  	
  	
  	
  <Proper0esBundle	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  Proper0esFile="com.cs.blog.En0tyAgileBundle"/>	
  
	
  	
  </ResourceBundle>	
  
	
  
	
  
public	
  class	
  En0tyAgileDefImpl	
  extends	
  En0tyDefImpl	
  {	
  
private	
  sta0c	
  String	
  RESOURCE_BUNDLE_FILE="com.cs.blog.En0tyAgileBundle";	
  
	
  
private	
  void	
  	
  linkToResourceBundle()	
  {	
  
	
  	
  	
  Proper0esBundleDef	
  rb	
  =	
  new	
  Proper0esBundleDef(this);	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  rb.setProper0esFile(RESOURCE_BUNDLE_FILE);	
  
	
  	
  	
  setResourceBundleDef(rb);	
  }	
  
	
  
	
  
	
  
	
  
Link	
  to	
  the	
  Resource	
  Bundle	
  
16	
  

Recommended for you

FITC Web Unleashed 2017 - Introduction to the World of Testing for Front-End ...
FITC Web Unleashed 2017 - Introduction to the World of Testing for Front-End ...FITC Web Unleashed 2017 - Introduction to the World of Testing for Front-End ...
FITC Web Unleashed 2017 - Introduction to the World of Testing for Front-End ...

The document provides an introduction to testing for front-end developers. It discusses why testing is important, common test types like unit, integration and functional tests, popular testing frameworks like Jest and Mocha, and how to set up a basic testing environment and write tests using Jest. It also covers test concepts like assertions, spies and stubs. An example movie app is used to demonstrate setting up Jest and writing tests to validate functions.

front-endtestingjavascript
Unbreakable: The Craft of Code
Unbreakable: The Craft of CodeUnbreakable: The Craft of Code
Unbreakable: The Craft of Code

The document discusses craftsmanship in software development. It provides examples of Wozniak's meticulous and perfectionist approach to engineering when designing Apple hardware and software. It also discusses different stages of craftsmanship like apprentice, journeyman, and master, and how these relate to becoming better at software development through continually learning, building, and improving skills. The emphasis is on cultivating high standards of quality and care in one's work.

codejavascriptcraft
PHPUnit Episode iv.iii: Return of the tests
PHPUnit Episode iv.iii: Return of the testsPHPUnit Episode iv.iii: Return of the tests
PHPUnit Episode iv.iii: Return of the tests

The document discusses the importance of unit testing and describes how developers are returning to write good tests after cutting corners during economic difficulties. It provides examples of unit tests being written for an order management system using PHPUnit to test the createOrder method by mocking dependencies and asserting the return value.

phpunitunit testingphp
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
ü  Custom View Definition for an entity-based VO is created and registered
ü  Custom Entity Definition is created and registered
ü  Contains all necessary attributes
ü  UI hints are set up
ü  Validators are created
ü  Resource Bundle is linked
ü  View Object instance is created
ü  Only standard ADF BC API is used
	
  
	
  
	
  
Check	
  Point	
  
17	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
Ø  Dynamic table
Ø  Dynamic binding approach
Ø  EL expression in Binds attribute
Ø  #{pageFlowScope.vo} != #{pageFlowScope.vo.name}
	
  
	
  <executables>	
  
	
  	
  	
  	
  <iterator	
  Binds="#{pageFlowScope.vo.name}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  DataControl="AgileDataModelServiceDataControl“	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  RangeSize="25"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  id="VAgileIterator"/>	
  
	
  </executables>	
  
	
  
	
  
<dynamic:table	
  value="#{bindings.VAgileIterator}"	
  id="t1"/>	
  
	
  
	
  
	
  
Give	
  It	
  a	
  Try!	
  
18	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
Live	
  Demo	
  
19	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
ProgrammaOcally	
  Populated	
  View	
  Object	
  
ResultSet
20	
  

Recommended for you

Instant Dynamic Forms with #states
Instant Dynamic Forms with #statesInstant Dynamic Forms with #states
Instant Dynamic Forms with #states

The document discusses Drupal's #states functionality for dynamically showing and hiding form elements based on user interactions. It describes the anatomy of state definitions, how dependencies between elements are defined, targeting elements using CSS selectors, built-in state names like visible and checked, and how to define custom triggers for state changes beyond default DOM events.

Advanced php testing in action
Advanced php testing in actionAdvanced php testing in action
Advanced php testing in action

The document contains code for unit testing a PHP MVC application using PHPUnit. It includes: - Code for the Todo model and its tests using PHPUnit assertions. - Configuration for PHPUnit to run tests for the application and library. - Tests for the IndexController using a Test_ControllerTestCase class with helper methods. - Code for Request, Response and View classes to mock the MVC framework. - A test to interact with the application interface using Selenium. The document shows the project structure for an MVC application and library with tests. It demonstrates how to test models, controllers and the user interface using test doubles, assertions and helper methods in PHPUnit.

phpunit
Redux for ReactJS Programmers
Redux for ReactJS ProgrammersRedux for ReactJS Programmers
Redux for ReactJS Programmers

This is the support of a course to teach mainly Redux, and Redux with React for Java and C# programmers. It is the third part of the course to recycle programmers from desktop app programming to web app programming. This course covers from history of Redux, its origin, step by step what is a reducer, and later concepts like reducer splitting, action handling, async and many more. You also can use repositories: - https://github.com/drpicox/learn-redux-bytesting - https://github.com/drpicox/learn-redux-zoo-bytesting To improve your skills.

programmersreduxcourse
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
ProgrammaOcally	
  Populated	
  View	
  Object	
  
21	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
public VAgileImpl
q  Constructor
protected void executeQueryForCollection
q  Retrieve and store a pointer to data from alternative data source
protected boolean hasNextForCollection
q  Whether there is any data to fetch out
protected ViewRowImpl createRowFromResultSet
q  Actually create and populate new VO’s row
public long getQueryHitCount
q  Return an estimated count of the rows
protected void releaseUserDataForCollection
q  Release and close resources
ProgrammaOcally	
  Populated	
  View	
  Object	
  
22	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
ProgrammaOcally	
  Populated	
  View	
  Object	
  
23	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
	
  protected	
  ViewRowImpl	
  createRowFromResultSet(Object	
  qc,	
  ResultSet	
  resultSet)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  resultSet	
  =	
  (ResultSet)getUserDataForCollec0on(qc);	
  
	
  	
  	
  	
  	
  	
  	
  	
  ViewRowImpl	
  r	
  =	
  null;	
  
	
  	
  	
  	
  	
  	
  	
  	
  if	
  (resultSet	
  !=	
  null)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  r	
  =	
  createNewRowForCollec0on(qc);	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  boolean	
  theSameEn0tyRow	
  =	
  true;	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  try	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  Object	
  keyValue	
  =	
  resultSet.getObject("PKVALUE");	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  while	
  (theSameEn0tyRow)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  int	
  aBrIndex	
  =	
  getABributeIndexOf(resultSet.getString("ATTRNAME"));	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ABributeDef	
  at	
  =	
  getABributeDef(aBrIndex);	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  populateABributeForRow(r,	
  aBrIndex,	
  resultSet.getObject("ATTRVALUE"));	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  theSameEn0tyRow	
  =	
  resultSet.next()	
  &&	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  keyValue.equals(resultSet.getObject("PKVALUE"));	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  catch	
  (SQLExcep0on	
  s)	
  {	
  throw	
  new	
  JboExcep0on(s);	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  else	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  setFetchCompleteForCollec0on(qc,	
  true);	
  
	
  	
  	
  	
  	
  	
  	
  	
  return	
  r;	
  
	
  	
  	
  	
  }	
  
	
  
	
  
ProgrammaOcally	
  Populated	
  View	
  Object	
  
24	
  

Recommended for you

Dealing with Legacy PHP Applications
Dealing with Legacy PHP ApplicationsDealing with Legacy PHP Applications
Dealing with Legacy PHP Applications

The document discusses refactoring legacy PHP code, specifically dealing with code that has no separation between PHP and HTML. It recommends separating code into controllers and views by gathering all code, separating controller and view code, assigning variables to a view object, changing variable references in the view code, and splitting the files. Specific problems in legacy PHP code like no separation of concerns, global variables, and reliance on includes can be addressed through techniques like creating view classes, encapsulating logic in objects, and wrapping includes in functions to untangle dependency webs. The goal is to safely change code implementation without changing behavior through refactoring.

ES6 patterns in the wild
ES6 patterns in the wildES6 patterns in the wild
ES6 patterns in the wild

The document discusses ES6 patterns used in Redux code. It explains how Redux uses functional programming patterns like higher-order functions, pure functions, and immutable data structures. Specifically, it analyzes code from Redux that uses arrow functions, rest/spread syntax, and avoids mutations to create middleware and handle state updates immutably. Reading wild code helps improve the skill of code comprehension and builds intuition about how to apply new patterns.

javascriptes6
Efedorenko.deepdive.presentation
Efedorenko.deepdive.presentationEfedorenko.deepdive.presentation
Efedorenko.deepdive.presentation
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
Live	
  Demo	
  
25	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
Dynamic	
  List	
  of	
  Values	
  
select	
  Id,	
  Name	
  from	
  Language	
  
26	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
Ø  Create and register lookup View Definition
Ø  Create and add View Accessor
Ø  Create and add List Binding Definition
Ø  Set the LOV for the attribute
Dynamic	
  List	
  of	
  Values	
  
27	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
Ø  Create and register lookup View Definition
Ø  Create and add View Accessor
Ø  Create and add List Binding Definition
Ø  Set the LOV for the attribute
	
  ViewDefImpl	
  vaViewDef	
  =	
  new	
  ViewDefImpl();	
  
	
  vaViewDef.setQuery(lookupSql);	
  
	
  vaViewDef.setFullSql(true)	
  
	
  
	
  String	
  lookupViewDefName	
  =	
  generateName(viewName,	
  aBr.getName());	
  
	
  vaViewDef.setName(lookupViewDefName);	
  
	
  vaViewDef.setFullName(lookupViewDefName);	
  
	
  
	
  vaViewDef.addViewABribute(lookupValueABrName,	
  lookupValueABrName,	
  Object.class);	
  	
  	
  	
  	
  	
  	
  	
  
	
  vaViewDef.addViewABribute(lookupDisplayABrName,	
  lookupDisplayABrName,	
  Object.class);	
  
	
  ((ABributeDefImpl)	
  vaViewDef.getABributeDef(0)).setPrimaryKey(true);	
  	
  	
  	
  	
  	
  	
  
	
  vaViewDef.resolveDefObject();	
  
	
  vaViewDef.registerDefObject();	
  
	
  
Dynamic	
  List	
  of	
  Values	
  
28	
  

Recommended for you

TeKslate Oracle ADF
TeKslate Oracle ADFTeKslate Oracle ADF
TeKslate Oracle ADF

Built on top of the MVC-based JavaServer Faces framework, Oracle Application Development Framework (ADF) forms the foundation for WebCenter Portal's components and services. ADF is an innovative, yet mature Java EE development framework available from Oracle, and, unlike most other frameworks, is directly supported and enabled by the award winning development environment, Oracle JDeveloper 11g. ADF provides unified access to back-end technologies like databases, web services, XML, CSV, BPEL, and many more. Furthermore, ADF provides data binding to connect UI with back-end data controls.Out of the box, ADF provides more than 100 data aware, JSF view components. The fine-grained JAAS security model gives developers and administrators full control over all aspects of application security.

oracle adf online training
Cloud foundry architecture and deep dive
Cloud foundry architecture and deep diveCloud foundry architecture and deep dive
Cloud foundry architecture and deep dive

This document provides an overview of the key components of Cloud Foundry, including: - The Cloud Controller which manages application deployments, services, user roles, and more. - Buildpacks which stage and compile applications to create droplets run by DEAs on VMs. - DEAs which manage application container lifecycles using Warden containers for isolation. - Routers which route traffic to applications and maintain dynamic routing tables. - Services which provide interfaces to both native and 3rd party services running on Service Nodes. - UAA which handles user authentication, authorization, and manages OAuth access credentials. It also describes how organizations and spaces segment the platform and how domains

bluemixcloudfoundryibm
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
Ø  Create and register lookup View Definition
Ø  Create and add View Accessor
Ø  Create and add List Binding Definition
Ø  Set the LOV for the attribute
	
  ViewAccessorDef	
  vaccessdef	
  =	
  new	
  ViewAccessorDef();	
  
	
  
	
  vaccessdef.setName(lookupViewDefName);	
  
	
  
	
  vaccessdef.setViewDefFullName(lookupViewDefName);	
  
	
  
	
  addViewAccessorDef(vaccessdef);	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
Dynamic	
  List	
  of	
  Values	
  
29	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
Ø  Create and register lookup View Definition
Ø  Create and add View Accessor
Ø  Create and add List Binding Definition
Ø  Set the LOV for the attribute
	
  
	
  ListBindingDef	
  lov	
  =	
  new	
  ListBindingDef(getDefManager(),	
  Defini0onObject.DEF_SCOPE_SESSION);	
  
	
  String	
  LOVName	
  =	
  generateLOVName(aBr.getName());	
  
	
  lov.setName(LOVName);	
  
	
  lov.setListVOName(viewAccessorDefName);	
  
	
  
	
  lov.setABrNames(new	
  String[]	
  {aBr.getName()});	
  
	
  lov.setListABrNames(new	
  String[]	
  {lookupValueABrName});	
  
	
  lov.setListDisplayABrNames(new	
  String[]	
  {lookupValueABrName,	
  lookupDisplayABrName});	
  
	
  addListBindingDef(lov);	
  	
  	
  	
  	
  
	
  ((ABributeDefImpl)	
  aBr).setLOVName(LOVName);	
  
	
  ((ABributeDefImpl)	
  aBr).setProperty(ABributeHints.ATTRIBUTE_CTL_TYPE,	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ABributeHints.CTLTYPE_COMBOLOV);	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  
Dynamic	
  List	
  of	
  Values	
  
30	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
Live	
  Demo	
  
31	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
	
  public	
  class	
  En0tyAgileImpl	
  extends	
  En0tyImpl	
  
	
  
	
  protected	
  void	
  doDML(int	
  opera0on,	
  Transac0onEvent	
  e)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  switch	
  (opera0on)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  case	
  DML_INSERT:	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  executeDMLprocedure(getInsertProcedureName());	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  break;	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  case	
  DML_UPDATE:	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  executeDMLprocedure(getUpdateProcedureName());	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  break;	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  case	
  DML_DELETE:	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  executeDMLprocedure(getDeleteProcedureName());	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  break;	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  }	
  
	
  
	
  
Create,	
  Update	
  and	
  Delete	
  
32	
  

Recommended for you

Cloud foundry presentation
Cloud foundry presentation Cloud foundry presentation
Cloud foundry presentation

Cloudfoundry is the open platform as a service providing a faster and easier way to build, test, deploy and scale applications.Deploy & Scale in seconds on your choice of clouds.

cloudfoundrycloud computingplatform as a service
Cloud Foundry Technical Overview
Cloud Foundry Technical OverviewCloud Foundry Technical Overview
Cloud Foundry Technical Overview

This presentation covers both the Cloud Foundry Elastic Runtime (known by many as just "Cloud Foundry") as well as the Operations Manager (known by many as BOSH). For each, the main components are covered with interactions between them.

boshcloud foundryarchitecture
Construire une application JavaFX 8 avec gradle
Construire une application JavaFX 8 avec gradleConstruire une application JavaFX 8 avec gradle
Construire une application JavaFX 8 avec gradle

JavaFX 8 est disponible depuis mars 2014 et apporte son lot de nouveautés. Gradle est en version 2 depuis juillet 2014. Deux technologies plus que prometteuses: JavaFX donne un coup de jeune au développement d’applications desktop en Java en apportant un navigateur web intégré, le support des WebSockets, de la 3D, et bien d’autres. Gradle est l’outil de d’automatisation de build à la mode, apportant de superbes possibilités par rapport rapport à maven, outil vieillissant, grâce à l’engouement de la communauté vis à vis de cet outil mais aussi par le fait de la technologie utilisée en son sein: groovy. Venez découvrir comment il est possible de réaliser rapidement une application à la mode en JavaFX avec un outil à la mode également. Bref venez à une session trendy.

bindinggradlejavafx
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
Ø  Get IStoredProc instance
Ø  Set input parameters values
Ø  Execute PL/SQL procedure
Ø  Populate attributes from output parameters
	
  
	
  private	
  void	
  executeDMLprocedure(String	
  procedureName)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  IStoredProc	
  storedProc	
  =	
  getStoredProc(procedureName);	
  
	
  	
  	
  	
  	
  	
  	
  	
  for	
  (IStoredProcParam	
  param	
  :	
  storedProc.getParams())	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  if	
  (param.isIn())	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  param.setParamValue(getABribute(param.getParamName()));	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  storedProc.execute();	
  
	
  	
  	
  	
  	
  	
  	
  	
  for	
  (IStoredProcParam	
  param	
  :	
  storedProc.getParams())	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  if	
  (param.isOut())	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  populateABribute(getEn0tyDef().getABributeIndexOf(param.getParamName()),	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  param.getParamValue());	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  
}	
  
	
  
Create,	
  Update	
  and	
  Delete	
  
33	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
Ø  findByPrimaryKey is invoked on activation of modified entity
	
  
public	
  En0tyImpl	
  findByPrimaryKey(DBTransac0on	
  txn,	
  Key	
  key)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  En0tyImpl	
  en0ty	
  =	
  super.findByPrimaryKey(txn,	
  key);	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  if	
  (en0ty	
  ==	
  null)	
  {	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  en0ty	
  =	
  createBlankInstance(txn);	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ABributeDef[]	
  keyABrs	
  =getPrimaryKeys();	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  //Populate	
  key	
  aBributes	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  for	
  (int	
  i	
  =	
  keyABrs.length	
  -­‐	
  1;	
  i	
  >=	
  0;	
  i-­‐-­‐)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ((En0tyAgileImpl)	
  en0ty).populateABribute(keyABrs[i].getIndex(),	
  key.getKeyValues()[i]);	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ((En0tyAgileImpl)	
  en0ty).doSelect();	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ((En0tyAgileCollImpl)	
  en0ty.getEn0tyCache()).add(en0ty);	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  return	
  en0ty;	
  
	
  	
  	
  	
  }	
  
PassivaOon	
  /	
  AcOvaOon	
  Issue	
  
34	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
<af:table	
  rows="#{bindings.VAgile.rangeSize}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  fetchSize="#{bindings.VAgile.rangeSize}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  emptyText="#{bindings.VAgile.viewable	
  ?	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'No	
  data	
  to	
  display.'	
  :	
  'Access	
  Denied.'}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  var="row"	
  rowBandingInterval="0”	
  value="#{bindings.VAgile.collec0onModel}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  selectedRowKeys="#{bindings.VAgile.collec0onModel.selectedRow}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  selec0onListener="#{bindings.VAgile.collec0onModel.makeCurrent}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  rowSelec0on="single"	
  id="t1">	
  
	
  	
  	
  	
  <af:forEach	
  items="#{bindings.VAgile.aBributeDefs}”	
  var="def">	
  
	
  	
  	
  	
  	
  	
  	
  	
  <af:column	
  headerText="#{bindings.VAgile.labels[def.name]}“	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  sortable="true"	
  sortProperty="#{def.name}“	
  id="c2">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <af:outputText	
  value="#{row[def.name]}"	
  id="ot2"/>	
  
	
  	
  	
  	
  	
  	
  	
  	
  </af:column>	
  
	
  	
  	
  	
  </af:forEach>	
  
</af:table>	
  
	
  
	
  
Dynamic	
  Table	
  
35	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
	
  <executables>	
  
	
  	
  	
  	
  	
  	
  <iterator	
  Binds="#{pageFlowScope.vo.name}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  DataControl="AgileDataModelServiceDataControl“	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  id="VAgileIterator"/>	
  
	
  </executables>	
  
	
  
	
  <bindings>	
  
	
  	
  	
  	
  	
  <tree	
  IterBinding="VAgileIterator"	
  id="VAgile">	
  
	
  	
  	
  	
  	
  	
  	
  	
  <nodeDefini0on	
  Name="VAgile0"/>	
  
	
  	
  	
  	
  </tree>	
  
	
  </bindings>	
  
	
  
	
  
Dynamic	
  Table	
  
<af:table	
  rows="#{bindings.VAgile.rangeSize}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  fetchSize="#{bindings.VAgile.rangeSize}”	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  …	
  
36	
  

Recommended for you

20150516 modern web_conf_tw
20150516 modern web_conf_tw20150516 modern web_conf_tw
20150516 modern web_conf_tw

The document discusses integrating ReactJS and Webpack into Ruby on Rails applications. It covers using modules with CommonJS, RequireJS, and ECMAScript 6. It also discusses using Webpack for bundling assets, setting up entry points, loaders, and plugins. Webpack can be configured to work with Rails by defining webpack.config.js and using the assets:webpack task for deployment. This provides a modular approach for JavaScript development while still leveraging Rails.

webpackreactrails
Javascript Frameworks for Joomla
Javascript Frameworks for JoomlaJavascript Frameworks for Joomla
Javascript Frameworks for Joomla

The document discusses how JavaScript frameworks like MooTools can be leveraged in Joomla sites to provide features like DOM manipulation, classes, event listeners, and effects. It describes how MooTools is the default framework used by Joomla and provides examples of its key capabilities. Additionally, it offers suggestions for optimizing framework usage, such as implementing the Google Loader API to decrease page load times.

jdmw
jQuery secrets
jQuery secretsjQuery secrets
jQuery secrets

This document summarizes jQuery secrets presented by Bastian Feder. It discusses utilities like jQuery.data() and jQuery.removeData() for saving and removing state on DOM elements. It also covers AJAX settings, events, extending jQuery, and jQuery plugins. The presentation provides code examples for working with data, events, namespaces, AJAX, and extending jQuery functionality.

secretsjavascriptfrontend
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
<dynamic:form value="#{bindings.VAgileIterator}" id="f1"/>
	
  
Dynamic	
  Form	
  
37	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
<af:iterator	
  id="i1"	
  value="#{bindings.VAgile.aBributesModel.aBributes}"	
  var="aBr">	
  
	
  	
  	
  	
  	
  	
  	
  	
  <af:dynamicComponent	
  id="d2"	
  aBributeModel="#{aBr}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  value="#{bindings[aBr.containerName][aBr.name].inputValue}"/>	
  
	
  </af:iterator>	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <tree	
  IterBinding="VAgileIterator"	
  id="VAgile">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <nodeDefini0on	
  Name="VAgile0"/>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  </tree>	
  
	
  
Dynamic	
  Component	
  (12c)	
  
38	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
Ø  DynamicComponent has limitations
Ø  af:Iterator + af:switcher approach can be used
	
  
	
  <af:iterator	
  value=”#{bindings.VAgile.aBributesModel.aBributes}"	
  var="aBr"	
  id="dc_i1">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <af:switcher	
  id="dc_s1"	
  defaultFacet="Default"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  facetName=”#{bindings[aBr.containerName][aBr.name].agileTypeID}”>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <f:facet	
  name="DATE">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <af:inputDate	
  id="dc_id1"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  label=”#{bindings[aBr.containerName][aBr.name].label}”	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  value=”#{bindings[aBr.containerName][aBr.name].inputValue}”	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  shortDesc="#{bindings[aBr.containerName][aBr.name].tool0p}”	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  />	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  </f:facet>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <f:facet	
  name=”INT”>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  …	
  
Hand	
  made	
  Dynamic	
  Form	
  
	
  <tree	
  IterBinding="VAgileIterator"	
  id="VAgile">	
  
	
  	
  	
  	
  	
  	
  	
  	
  <nodeDefini0on	
  Name="VAgile0"/>	
  
	
  </tree>	
  
39	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
Live	
  Demo	
  
40	
  

Recommended for you

Advance jquery-plugin
Advance jquery-pluginAdvance jquery-plugin
Advance jquery-plugin

This document discusses creating and customizing jQuery plugins. It begins with an overview and agenda, then covers topics like common jQuery plugins, rules for developing plugins, how to create a basic plugin, customizing existing plugins, and debugging JavaScript/jQuery issues. The document provides code examples for each topic and emphasizes naming conventions, default options, the plugin constructor, and animations.

College management system.pptx
College management system.pptxCollege management system.pptx
College management system.pptx

This document contains source code for a college student management system created in Java. It includes the source code for the home page class, which defines the main GUI containing buttons to add, delete, search for, and update student details. It also displays source code for other classes like the search page class, which allows the user to search for a student by ID and displays the results in a table. The project aims to simplify tasks like adding, editing, and deleting student information over time.

meet.js - QooXDoo
meet.js - QooXDoomeet.js - QooXDoo
meet.js - QooXDoo

The document provides an overview of the qooxdoo framework and toolkit. It demonstrates how to download and explore the qooxdoo SDK which contains over 15,000 files. Code examples are provided to illustrate defining a class with properties, mixins, inheritance and interfaces. Additional features highlighted include extensive documentation, GUI components, easy key/command binding, layouts for positioning elements, and REST call capabilities.

javascriptmeetupqooxdoo
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
<dynamic:form value="#{bindings.VAgileIterator}" id="f1“
category="General"/>
	
  
UI	
  Categories	
  
41	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
public	
  class	
  VAgileDefImpl	
  extends	
  ViewDefImpl	
  
	
  
private	
  void	
  createUICategories(RowIterator	
  uiCategories)	
  {	
  
	
  	
  	
  	
  if	
  (uiCategories.hasNext())	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  CategoryManager	
  cm	
  =	
  ensureCategoryManager();	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  while	
  (uiCategories.hasNext())	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  VAgileEn0tyGroupRowImpl	
  r	
  =	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  (VAgileEn0tyGroupRowImpl)uiCategories.next();	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  DefaultVOCategoryImpl	
  defaultCategory	
  =	
  new	
  DefaultVOCategoryImpl(r.getName());	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  defaultCategory.setProperty(GenericHints.PROPERTY_LABEL,	
  r.getLabel());	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  defaultCategory.setCategoryManager(cm);	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  cm.addCategory(defaultCategory);	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  }	
  
}	
  
	
  
UI	
  Categories	
  
42	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
	
  private	
  void	
  addAgileABribute(VAgileParamDefini0onRowImpl	
  agileParam)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  ABributeDefImpl	
  at	
  =	
  addABribute(/*aBrName*/	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  agileParam.getName(),	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  /*columnName*/	
  	
  	
  	
  	
  agileParam.getName(),	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  /*javaType*/	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  agileParam.getJavaType(),	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  /*isPrimaryKey*/	
  	
  	
  	
  	
  	
  agileParam.isPK(),	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  /*isDiscriminator*/	
  	
  false,	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  /*isPersistent*/	
  	
  	
  	
  	
  	
  	
  	
  	
  !agileParam.isTransient());	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  …	
  
	
  
	
  	
  if	
  (agileParam.getAgilegroupname()!=null)	
  
	
  	
  	
  	
  	
  	
  at.setProperty(ABributeHints.ATTRIBUTE_CTL_CATEGORY,	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  agileParam.getAgilegroupname());	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
…	
  	
  	
  	
  	
  	
  
	
  }	
  
	
  
UI	
  Categories	
  
43	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
	
  <af:iterator	
  id="i2"	
  value="#{bindings.VAgile.aBributesModel.hierarchicalABributes}”	
  	
  	
  var="aBr">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <af:switcher	
  id="sw1"	
  facetName="#{aBr.descriptorType}"	
  defaultFacet="ATTRIBUTE">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <f:facet	
  name="GROUP">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <af:group	
  0tle="#{aBr.label}"	
  id="g1">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  …	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  </f:facet>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <f:facet	
  name="ATTRIBUTE">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <af:dynamicComponent	
  id="ad1"	
  aBributeModel="#{aBr}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  value="#{bindings[aBr.containerName][aBr.name].inputValue}"/>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  </f:facet>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  </af:switcher>	
  
	
  	
  </af:iterator>	
  
UI	
  Categories	
  (12c)	
  
44	
  

Recommended for you

Hooks WCSD12
Hooks WCSD12Hooks WCSD12
Hooks WCSD12

WordPress allows plugins and themes to modify its core functionality through hooks called actions and filters. Actions allow plugins to specify functions that are executed at certain points, like before or after specific events. Filters allow functions to modify content, like text, before it is saved or output. The document discusses how a basic widget can be modified to use actions and filters to allow other code to add puppy images and warnings. This allows expanding the widget's capabilities without directly editing its code.

actionswordpresswordcamp
Unittests für Dummies
Unittests für DummiesUnittests für Dummies
Unittests für Dummies

Refactoring, Agile Entwicklung, Continuous Integration – all diese für nachhaltigen Erfolg wichtigen Vorgehensweisen setzen Erfahrung mit Unit Testing voraus. Abseits von den üblichen "Bowling"-Beispielen möchten wir gerne einen Crashkurs inkl. Best Practices für das erfolgreiche Unit Testing durchführen. Anhand eines Beispielprojekts auf Basis des Zend Frameworks werden wir nach der Installation von PHPUnit auf allen Notebooks gemeinsam eine kleine Applikation aufbauen, die durchgehend Test-driven entwickelt wird.

ipc09
20-Arid-850 Ali Haider Cheema BSSE(5A) Evening MPL Assignement 08.docx
20-Arid-850 Ali Haider Cheema BSSE(5A) Evening MPL Assignement 08.docx20-Arid-850 Ali Haider Cheema BSSE(5A) Evening MPL Assignement 08.docx
20-Arid-850 Ali Haider Cheema BSSE(5A) Evening MPL Assignement 08.docx

The document describes a Java program that creates a graphical user interface (GUI) calculator application. It defines variables to store numeric values and operations, initializes GUI components like buttons and text fields, and includes event handler methods for each button that perform number entry, arithmetic operations, and result display when the equals button is pressed. The main method creates an instance of the calculator class and makes it visible, launching the application.

java language
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
<af:naviga0onPane	
  id="catPane"	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  rendered="#{not	
  empty	
  viewScope.EditViewBean.tabMenuModel}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  value="#{viewScope.EditViewBean.tabMenuModel}"	
  var="tab">	
  
	
  	
  	
  	
  <f:facet	
  name="nodeStamp">	
  
	
  	
  	
  	
  	
  	
  	
  	
  <af:commandNaviga0onItem	
  id="catPaneID"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ac0onListener="#{viewScope.EditViewBean.tabAc0vatedEvent}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  textAndAccessKey="#{tab.propertyMap['LABEL']}">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <f:aBribute	
  name="tabId"	
  value="#{tab.name}"/>	
  
	
  	
  	
  	
  	
  	
  	
  	
  </af:commandNaviga0onItem>	
  
	
  	
  	
  	
  </f:facet>	
  
</af:naviga0onPane>	
  
	
  
	
  
	
  
UI	
  Categories	
  
45	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
	
  public	
  MenuModel	
  getTabMenuModel()	
  {	
  
	
  	
  	
  	
  	
  	
  List	
  pageList	
  =	
  getAgileVO().getCategoriesList();	
  
	
  	
  	
  	
  	
  	
  if	
  (pageList!=null	
  &&	
  pageList.size()>1)	
  
	
  	
  	
  	
  	
  	
  	
  	
  return	
  new	
  ChildPropertyMenuModel(pageList,	
  null,	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  CollecOons.singletonList(pageList.indexOf(getSelectedPage())));	
  
	
  	
  	
  	
  	
  	
  else	
  
	
  	
  	
  	
  	
  	
  	
  	
  return	
  null;	
  	
  	
  
	
  	
  	
  	
  }	
  
	
  
UI	
  Categories	
  
46	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
<dynamic:form	
  value="#{bindings.VAgileIterator}"	
  id="f1"	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  binding="#{viewScope.EditViewBean.dynform}"	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  category="#{viewScope.EditViewBean.selectedCategoryName}"/>	
  
	
  
<dynamic:form	
  value="#{bindings.VAgileIterator}"	
  id="f1"	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  binding="#{viewScope.EditViewBean.dynform}"	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  forceRefresh="#{viewScope.EditViewBean.formNeedRefresh}"/>	
  
	
  
public	
  Boolean	
  getFormNeedRefresh()	
  {	
  
	
  	
  	
  if	
  (ObjectU0ls.equal(dynform.getCategory(),	
  getSelectedCategoryName()))	
  
	
  	
  	
  	
  	
  	
  	
  return	
  false;	
  
	
  	
  	
  else	
  {	
  
	
  	
  	
  	
  	
  	
  	
  this.dynform.setCategory(getSelectedCategoryName());	
  
	
  	
  	
  	
  	
  	
  	
  return	
  true;	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  }	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
}	
  
	
  
	
  
UI	
  Categories	
  
47	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
<af:train	
  id="t2"	
  value="#{viewScope.InsertViewBean.trainMenuModel}"	
  var="node"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  rendered="#{not	
  empty	
  viewScope.InsertViewBean.trainMenuModel}">	
  
	
  	
  	
  	
  <f:facet	
  name="nodeStamp">	
  
	
  	
  	
  	
  	
  	
  	
  	
  <af:commandNaviga0onItem	
  textAndAccessKey="#{node.propertyMap['LABEL']}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  immediate="#{viewScope.InsertViewBean.trainMenuModel.immediate}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  disabled="#{viewScope.InsertViewBean.trainMenuModel.readOnly}"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  visited="#{viewScope.InsertViewBean.trainMenuModel.visited}"	
  id="cni"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ac0onListener="#{viewScope.InsertViewBean.trainAc0on}">	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <f:aBribute	
  name="stopName"	
  value="#{node.name}"/>	
  
	
  	
  	
  	
  	
  	
  	
  	
  </af:commandNaviga0onItem>	
  
	
  	
  	
  	
  </f:facet>	
  
</af:train>	
  
	
  
Dynamic	
  Train	
  
48	
  

Recommended for you

Avinash Kundaliya: Javascript and WordPress
Avinash Kundaliya: Javascript and WordPressAvinash Kundaliya: Javascript and WordPress
Avinash Kundaliya: Javascript and WordPress

This document discusses JavaScript and how it is used on over 92% of websites. It covers JavaScript fundamentals like variable scope, hoisting, and the this keyword. It also discusses how JavaScript allows first-class functions and functional programming. The document then covers how to properly manage scripts in WordPress using functions like wp_register_script, wp_enqueue_script, and wp_localize_script to internationalize scripts. It concludes by mentioning additional JavaScript topics to explore like closures and functional programming.

Joomla! Components - Uma visão geral
Joomla! Components - Uma visão geralJoomla! Components - Uma visão geral
Joomla! Components - Uma visão geral

This document provides an overview of Joomla components. It discusses PHP and object-oriented programming concepts like classes, objects and the MVC pattern. It then explains how to create a basic "Hello World" Joomla component with 5 required files - a controller, view files and an XML installation file. The document is intended to introduce developers to creating Joomla components.

componentesrio de janeirojoomla
Improving android experience for both users and developers
Improving android experience for both users and developersImproving android experience for both users and developers
Improving android experience for both users and developers

Android UI and User Experience has changed dramatically in the recent version(s) and while users generally enjoy the new features, there are still several areas that are left to application-level-DIY-patterns. For developers, this is double challenge, they want to provide users with the bleeding edge UI patterns and at the same time, they have to deal with evolving API, that sometimes changes dramatically. Presentation covers the gotchas developer might face dealing with ever-moving Android API, and how to utilize Java language and the tools it have to make the experience for developer more pleasant. Typical trends in the API will get analyzed and divided into several areas or "patterns", discussing typical scenarios how these components are designed and implemented. This talk will propose several such UI patterns, that will compete to become "de facto" standards and details on the implementation, including possible impact on existing API as we have both end users and developers in mind. The list of patterns/areas discussed in the talk include following : ActionBar ListView TimePicker KineticGestureComponent

android ux components programming
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
public	
  ProcessMenuModel	
  getTrainMenuModel()	
  {	
  
	
  	
  	
  	
  	
  ProcessMenuModel	
  processMenuModel	
  ==	
  null;	
  
	
  	
  	
  	
  	
  List	
  pageList	
  =	
  getAgileVO().getCategoriesList();	
  
	
  	
  	
  	
  	
  if	
  (pageList!=null	
  &&	
  pageList.size()>1)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  ChildPropertyTreeModel	
  childPropertyTreeModel	
  =	
  new	
  ChildPropertyTreeModel(pageList,	
  null);	
  
	
  	
  	
  	
  	
  	
  	
  	
  processMenuModel	
  =	
  new	
  CategoryTrainMenuModel(childPropertyTreeModel,	
  NAME);	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  processMenuModel.setCurrentStop(getCurrentStopName());	
  	
  }	
  	
  	
  
	
  	
  	
  	
  	
  return	
  processMenuModel;	
  
}	
  
Dynamic	
  Train	
  
49	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
public	
  class	
  CategoryTrainMenuModel	
  extends	
  ProcessMenuModel{	
  
	
  	
  	
  	
  private	
  String	
  currentStop;	
  
	
  	
  	
  	
  @Override	
  
	
  	
  	
  	
  protected	
  String	
  getCurrentViewId()	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  return	
  currentStop;	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  }	
  
	
  
	
  public	
  CategoryTrainMenuModel(Object	
  instance,	
  	
  String	
  viewIdProperty)	
  {	
  
	
  	
  	
  	
  	
  	
  super(instance,	
  viewIdProperty);	
  
	
  	
  	
  	
  }	
  
	
  
public	
  void	
  setCurrentStop(String	
  currentStop)	
  {	
  
	
  	
  	
  	
  this.currentStop	
  =	
  currentStop;	
  
}	
  
public	
  String	
  getCurrentStop()	
  {	
  
	
  	
  	
  	
  return	
  currentStop;	
  
}	
  
}	
  
	
  
Dynamic	
  Train	
  
50	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
Live	
  Demo	
  
51	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
	
  
@Override	
  	
  
public	
  String	
  getCriteriaItemClause(ViewCriteriaItem	
  crieriaItem)	
  {	
  
	
  	
  	
  	
  	
  	
  return	
  (String)	
  crieriaItem.getValue();	
  	
  
	
  	
  	
  }	
  	
  
Dynamic	
  View	
  Criteria	
  
View	
  Object	
  
View	
  Criteria	
  
View	
  Criteria	
  Row	
  
View	
  Criteria	
  Item	
  
ABribute	
   Opera0on	
   Operand	
  
1	
  
1	
  
1	
  
*	
  
*	
  
*	
  
setValue()
52	
  

Recommended for you

Droidcon2013 android experience lahoda
Droidcon2013 android experience lahodaDroidcon2013 android experience lahoda
Droidcon2013 android experience lahoda

The document discusses opportunities to improve the Android user experience through more flexible and responsive layouts, improved action bar designs, and innovative input methods like gesture and sensor-based interactions. It presents examples of custom view groups and adapters that provide flexible resizing and binding of data to views. The talk argues the action bar could be improved through more consistent behavior and use of available screen space. Ideas for new date/time pickers and gesture-based interactions are also proposed to enhance the Android experience.

jQuery & 10,000 Global Functions: Working with Legacy JavaScript
jQuery & 10,000 Global Functions: Working with Legacy JavaScriptjQuery & 10,000 Global Functions: Working with Legacy JavaScript
jQuery & 10,000 Global Functions: Working with Legacy JavaScript

Long ago, in the late days of the first Internet boom, before jQuery, before Underscore, before Angular, there was a web application built by a large corporation. This application was written as a server-side application using server-side technology like Java or PHP. A tiny seed of JavaScript was added to some of the pages of this application to give it a little sizzle. Over the ages, this tiny bit of JavaScript grew like kudzu. Most of it was embedded in the HTML in

refactoringjavascriptlegacy
international PHP2011_Bastian Feder_jQuery's Secrets
international PHP2011_Bastian Feder_jQuery's Secretsinternational PHP2011_Bastian Feder_jQuery's Secrets
international PHP2011_Bastian Feder_jQuery's Secrets

This document contains a summary of jQuery secrets presented by Bastian Feder. It discusses various techniques including saving and removing state from DOM elements using jQuery.data() and jQuery.removeData(), extending jQuery functionality through plugins, and customizing AJAX requests and event handling. The presentation provides code examples for working with jQuery's data storage methods, namespaces, promises/deferreds, global AJAX settings, and extending jQuery.

Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
Ø  Create	
  View	
  Criteria	
  and	
  set	
  name	
  
Ø  Create	
  View	
  Criteria	
  Row	
  
Ø  Create	
  View	
  Criteria	
  Item	
  for	
  the	
  first	
  aBribute	
  
Ø  Set	
  where	
  clause	
  as	
  value	
  
Ø  Set	
  CRITERIA_MODE_CACHE	
  to	
  ensure	
  memory	
  filtering	
  
Ø  Add	
  View	
  Criteria	
  to	
  View	
  Defini0on	
  
	
  
ViewCriteriaImpl	
  viewCriteria	
  =	
  	
  (ViewCriteriaImpl)	
  createViewCriteria();	
  
viewCriteria.setName(userFilter.getName());	
  
ViewCriteriaRow	
  vcr	
  =	
  viewCriteria.createViewCriteriaRow();	
  
String	
  firstABributeName	
  =	
  getABributeDef(0).getName();	
  
ViewCriteriaItem	
  vci	
  =	
  new	
  ViewCriteriaItem(firstABributeName,	
  vcr);	
  
vci.setValue(userFilter.getWhereclause());	
  
vcr.addCriteriaItem(firstABributeName,	
  vci);	
  	
  	
  	
  	
  	
  	
  	
  	
  
viewCriteria.add(vcr);	
  
viewCriteria.setCriteriaMode(ViewCriteria.CRITERIA_MODE_CACHE);	
  
putViewCriteria(viewCriteria.getName(),	
  viewCriteria);	
  
	
  	
  	
  	
  	
  	
  	
  
Dynamic	
  View	
  Criteria	
  
53	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
<BC4JDataControl	
  id="AgileDataModelServiceDataControl"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  Package="com.cs.blog.deepdiveadf.agiledatamodel"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  FactoryClass="com.cs.blog.deepdiveadf.agiledatamodel.datacontrol.AgileDataControlFactory”	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  …	
  
public	
  class	
  AgileDataControlFactory	
  	
  extends	
  DataControlFactoryImpl	
  {	
  
	
  	
  @Override	
  
	
  	
  protected	
  String	
  getDataControlClassName()	
  {	
  return	
  AgileDataControl.class.getName();	
  }	
  	
  
}	
  
	
  
public	
  class	
  AgileDataControl	
  	
  extends	
  JUApplica0on	
  {	
  
	
  	
  @Override	
  
	
  	
  	
  protected	
  void	
  applySortCriteria(DCIteratorBinding	
  iter,	
  SortCriteria[]	
  sortBy)	
  {	
  
	
  	
  	
  	
  	
  	
  if	
  (sortBy	
  !=	
  null)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  ViewObject	
  vo	
  =	
  iter.getViewObject();	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  JboEnvUOl.applyVOSortCriteria(vo,	
  sortBy,	
  	
  true	
  /*Transient*/)	
 ��;	
  
	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  }	
  
Memory	
  SorOng	
  
54	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
Ø  Set	
  VO	
  property	
  PROP_ALWAYS_USE_SORT	
  to	
  true	
  
Ø  Sor0ng	
  is	
  always	
  performed	
  in	
  memory	
  
public	
  class	
  VAgileImpl	
  extends	
  ViewObjectImpl	
  
…	
  
@Override	
  
protected	
  void	
  create()	
  {	
  
	
  	
  	
  super.create()	
  
	
  	
  	
  setProperty(PROP_ALWAYS_USE_SORT,	
  "true");	
  
}	
  
	
  
…	
  
Memory	
  SorOng	
  (11.1.1.7.0	
  &	
  12c)	
  
55	
  
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
Live	
  Demo	
  
56	
  

Recommended for you

Android Best Practices
Android Best PracticesAndroid Best Practices
Android Best Practices

This document provides an overview of key Android development concepts and techniques. It discusses fragments, the support library, dependency injection, image caching, threading and AsyncTask, notifications, supporting multiple screens, and optimizing ListView performance. The document also recommends several popular Android libraries and open source apps that demonstrate best practices.

androidjava
Adding a modern twist to legacy web applications
Adding a modern twist to legacy web applicationsAdding a modern twist to legacy web applications
Adding a modern twist to legacy web applications

Avoid misery of working with legacy code We will see how you can add independent and isolated components to existing pages; pages that may be difficult to change React and Flux allow you to make self-contained additions that handle their own data access/persistence

reactweb developmentbrowserify
Writing your Third Plugin
Writing your Third PluginWriting your Third Plugin
Writing your Third Plugin

Jenkins User Conference 2012 Only by the third plugin do you get the hang of writing a plugin. I thought as a developer coming to the build side of things it'd be easy to jump in and write some plugins. I was wrong. Don't be fooled by the extremely friendly Jenkins community, writing a plugin from scratch is harder than they let on. This talk will explain the hurdles that I had to cross to make writing plugins easy.

pluginsjenkinshudson
Eugene	
  Fedorenko	
  
adfprac0ce-­‐fedor.blogspot.com	
  
Safety	
  Stop.	
  QuesOons	
  &	
  Answers	
  
57	
  

More Related Content

What's hot

eROSE: Guiding programmers in Eclipse
eROSE: Guiding programmers in EclipseeROSE: Guiding programmers in Eclipse
eROSE: Guiding programmers in Eclipse
Thomas Zimmermann
 
05 JavaScript #burningkeyboards
05 JavaScript #burningkeyboards05 JavaScript #burningkeyboards
05 JavaScript #burningkeyboards
Denis Ristic
 
Frontin like-a-backer
Frontin like-a-backerFrontin like-a-backer
Frontin like-a-backer
Frank de Jonge
 
06 jQuery #burningkeyboards
06 jQuery  #burningkeyboards06 jQuery  #burningkeyboards
06 jQuery #burningkeyboards
Denis Ristic
 
Min-Maxing Software Costs
Min-Maxing Software CostsMin-Maxing Software Costs
Min-Maxing Software Costs
Konstantin Kudryashov
 
JavaScript Unit Testing with Jasmine
JavaScript Unit Testing with JasmineJavaScript Unit Testing with Jasmine
JavaScript Unit Testing with Jasmine
Raimonds Simanovskis
 
Workshop 5: JavaScript testing
Workshop 5: JavaScript testingWorkshop 5: JavaScript testing
Workshop 5: JavaScript testing
Visual Engineering
 
node.js Module Development
node.js Module Developmentnode.js Module Development
node.js Module Development
Jay Harris
 
A New Baseline for Front-End Devs
A New Baseline for Front-End DevsA New Baseline for Front-End Devs
A New Baseline for Front-End Devs
Rebecca Murphey
 
Web Optimization Summit: Coding for Performance
Web Optimization Summit: Coding for PerformanceWeb Optimization Summit: Coding for Performance
Web Optimization Summit: Coding for Performance
johndaviddalton
 
Decoupling with Design Patterns and Symfony2 DIC
Decoupling with Design Patterns and Symfony2 DICDecoupling with Design Patterns and Symfony2 DIC
Decoupling with Design Patterns and Symfony2 DIC
Konstantin Kudryashov
 
An Introduction to the World of Testing for Front-End Developers
An Introduction to the World of Testing for Front-End DevelopersAn Introduction to the World of Testing for Front-End Developers
An Introduction to the World of Testing for Front-End Developers
FITC
 
FITC Web Unleashed 2017 - Introduction to the World of Testing for Front-End ...
FITC Web Unleashed 2017 - Introduction to the World of Testing for Front-End ...FITC Web Unleashed 2017 - Introduction to the World of Testing for Front-End ...
FITC Web Unleashed 2017 - Introduction to the World of Testing for Front-End ...
Haris Mahmood
 
Unbreakable: The Craft of Code
Unbreakable: The Craft of CodeUnbreakable: The Craft of Code
Unbreakable: The Craft of Code
Joe Morgan
 
PHPUnit Episode iv.iii: Return of the tests
PHPUnit Episode iv.iii: Return of the testsPHPUnit Episode iv.iii: Return of the tests
PHPUnit Episode iv.iii: Return of the tests
Michelangelo van Dam
 
Instant Dynamic Forms with #states
Instant Dynamic Forms with #statesInstant Dynamic Forms with #states
Instant Dynamic Forms with #states
Konstantin Käfer
 
Advanced php testing in action
Advanced php testing in actionAdvanced php testing in action
Advanced php testing in action
Jace Ju
 
Redux for ReactJS Programmers
Redux for ReactJS ProgrammersRedux for ReactJS Programmers
Redux for ReactJS Programmers
David Rodenas
 
Dealing with Legacy PHP Applications
Dealing with Legacy PHP ApplicationsDealing with Legacy PHP Applications
Dealing with Legacy PHP Applications
Clinton Dreisbach
 
ES6 patterns in the wild
ES6 patterns in the wildES6 patterns in the wild
ES6 patterns in the wild
Joe Morgan
 

What's hot (20)

eROSE: Guiding programmers in Eclipse
eROSE: Guiding programmers in EclipseeROSE: Guiding programmers in Eclipse
eROSE: Guiding programmers in Eclipse
 
05 JavaScript #burningkeyboards
05 JavaScript #burningkeyboards05 JavaScript #burningkeyboards
05 JavaScript #burningkeyboards
 
Frontin like-a-backer
Frontin like-a-backerFrontin like-a-backer
Frontin like-a-backer
 
06 jQuery #burningkeyboards
06 jQuery  #burningkeyboards06 jQuery  #burningkeyboards
06 jQuery #burningkeyboards
 
Min-Maxing Software Costs
Min-Maxing Software CostsMin-Maxing Software Costs
Min-Maxing Software Costs
 
JavaScript Unit Testing with Jasmine
JavaScript Unit Testing with JasmineJavaScript Unit Testing with Jasmine
JavaScript Unit Testing with Jasmine
 
Workshop 5: JavaScript testing
Workshop 5: JavaScript testingWorkshop 5: JavaScript testing
Workshop 5: JavaScript testing
 
node.js Module Development
node.js Module Developmentnode.js Module Development
node.js Module Development
 
A New Baseline for Front-End Devs
A New Baseline for Front-End DevsA New Baseline for Front-End Devs
A New Baseline for Front-End Devs
 
Web Optimization Summit: Coding for Performance
Web Optimization Summit: Coding for PerformanceWeb Optimization Summit: Coding for Performance
Web Optimization Summit: Coding for Performance
 
Decoupling with Design Patterns and Symfony2 DIC
Decoupling with Design Patterns and Symfony2 DICDecoupling with Design Patterns and Symfony2 DIC
Decoupling with Design Patterns and Symfony2 DIC
 
An Introduction to the World of Testing for Front-End Developers
An Introduction to the World of Testing for Front-End DevelopersAn Introduction to the World of Testing for Front-End Developers
An Introduction to the World of Testing for Front-End Developers
 
FITC Web Unleashed 2017 - Introduction to the World of Testing for Front-End ...
FITC Web Unleashed 2017 - Introduction to the World of Testing for Front-End ...FITC Web Unleashed 2017 - Introduction to the World of Testing for Front-End ...
FITC Web Unleashed 2017 - Introduction to the World of Testing for Front-End ...
 
Unbreakable: The Craft of Code
Unbreakable: The Craft of CodeUnbreakable: The Craft of Code
Unbreakable: The Craft of Code
 
PHPUnit Episode iv.iii: Return of the tests
PHPUnit Episode iv.iii: Return of the testsPHPUnit Episode iv.iii: Return of the tests
PHPUnit Episode iv.iii: Return of the tests
 
Instant Dynamic Forms with #states
Instant Dynamic Forms with #statesInstant Dynamic Forms with #states
Instant Dynamic Forms with #states
 
Advanced php testing in action
Advanced php testing in actionAdvanced php testing in action
Advanced php testing in action
 
Redux for ReactJS Programmers
Redux for ReactJS ProgrammersRedux for ReactJS Programmers
Redux for ReactJS Programmers
 
Dealing with Legacy PHP Applications
Dealing with Legacy PHP ApplicationsDealing with Legacy PHP Applications
Dealing with Legacy PHP Applications
 
ES6 patterns in the wild
ES6 patterns in the wildES6 patterns in the wild
ES6 patterns in the wild
 

Viewers also liked

Efedorenko.deepdive.presentation
Efedorenko.deepdive.presentationEfedorenko.deepdive.presentation
Efedorenko.deepdive.presentation
Euegene Fedorenko
 
TeKslate Oracle ADF
TeKslate Oracle ADFTeKslate Oracle ADF
TeKslate Oracle ADF
tekslate1
 
Cloud foundry architecture and deep dive
Cloud foundry architecture and deep diveCloud foundry architecture and deep dive
Cloud foundry architecture and deep dive
Animesh Singh
 
Cloud foundry presentation
Cloud foundry presentation Cloud foundry presentation
Cloud foundry presentation
Vivek Parihar
 
Cloud Foundry Technical Overview
Cloud Foundry Technical OverviewCloud Foundry Technical Overview
Cloud Foundry Technical Overview
cornelia davis
 

Viewers also liked (6)

Efedorenko.deepdive.presentation
Efedorenko.deepdive.presentationEfedorenko.deepdive.presentation
Efedorenko.deepdive.presentation
 
Ood 2013 copy
Ood 2013 copyOod 2013 copy
Ood 2013 copy
 
TeKslate Oracle ADF
TeKslate Oracle ADFTeKslate Oracle ADF
TeKslate Oracle ADF
 
Cloud foundry architecture and deep dive
Cloud foundry architecture and deep diveCloud foundry architecture and deep dive
Cloud foundry architecture and deep dive
 
Cloud foundry presentation
Cloud foundry presentation Cloud foundry presentation
Cloud foundry presentation
 
Cloud Foundry Technical Overview
Cloud Foundry Technical OverviewCloud Foundry Technical Overview
Cloud Foundry Technical Overview
 

Similar to Deep dive into Oracle ADF

Construire une application JavaFX 8 avec gradle
Construire une application JavaFX 8 avec gradleConstruire une application JavaFX 8 avec gradle
Construire une application JavaFX 8 avec gradle
Thierry Wasylczenko
 
20150516 modern web_conf_tw
20150516 modern web_conf_tw20150516 modern web_conf_tw
20150516 modern web_conf_tw
Tse-Ching Ho
 
Javascript Frameworks for Joomla
Javascript Frameworks for JoomlaJavascript Frameworks for Joomla
Javascript Frameworks for Joomla
Luke Summerfield
 
jQuery secrets
jQuery secretsjQuery secrets
jQuery secrets
Bastian Feder
 
Advance jquery-plugin
Advance jquery-pluginAdvance jquery-plugin
Advance jquery-plugin
adm_exoplatform
 
College management system.pptx
College management system.pptxCollege management system.pptx
College management system.pptx
ManujArora3
 
meet.js - QooXDoo
meet.js - QooXDoomeet.js - QooXDoo
meet.js - QooXDoo
Radek Benkel
 
Hooks WCSD12
Hooks WCSD12Hooks WCSD12
Hooks WCSD12
Jeffrey Zinn
 
Unittests für Dummies
Unittests für DummiesUnittests für Dummies
Unittests für Dummies
Lars Jankowfsky
 
20-Arid-850 Ali Haider Cheema BSSE(5A) Evening MPL Assignement 08.docx
20-Arid-850 Ali Haider Cheema BSSE(5A) Evening MPL Assignement 08.docx20-Arid-850 Ali Haider Cheema BSSE(5A) Evening MPL Assignement 08.docx
20-Arid-850 Ali Haider Cheema BSSE(5A) Evening MPL Assignement 08.docx
AliHaiderCheema2
 
Avinash Kundaliya: Javascript and WordPress
Avinash Kundaliya: Javascript and WordPressAvinash Kundaliya: Javascript and WordPress
Avinash Kundaliya: Javascript and WordPress
wpnepal
 
Joomla! Components - Uma visão geral
Joomla! Components - Uma visão geralJoomla! Components - Uma visão geral
Joomla! Components - Uma visão geral
Fábrica Livre
 
Improving android experience for both users and developers
Improving android experience for both users and developersImproving android experience for both users and developers
Improving android experience for both users and developers
Pavel Lahoda
 
Droidcon2013 android experience lahoda
Droidcon2013 android experience lahodaDroidcon2013 android experience lahoda
Droidcon2013 android experience lahoda
Droidcon Berlin
 
jQuery & 10,000 Global Functions: Working with Legacy JavaScript
jQuery & 10,000 Global Functions: Working with Legacy JavaScriptjQuery & 10,000 Global Functions: Working with Legacy JavaScript
jQuery & 10,000 Global Functions: Working with Legacy JavaScript
Guy Royse
 
international PHP2011_Bastian Feder_jQuery's Secrets
international PHP2011_Bastian Feder_jQuery's Secretsinternational PHP2011_Bastian Feder_jQuery's Secrets
international PHP2011_Bastian Feder_jQuery's Secrets
smueller_sandsmedia
 
Android Best Practices
Android Best PracticesAndroid Best Practices
Android Best Practices
Yekmer Simsek
 
Adding a modern twist to legacy web applications
Adding a modern twist to legacy web applicationsAdding a modern twist to legacy web applications
Adding a modern twist to legacy web applications
Jeff Durta
 
Writing your Third Plugin
Writing your Third PluginWriting your Third Plugin
Writing your Third Plugin
Justin Ryan
 
Using Reflections and Automatic Code Generation
Using Reflections and Automatic Code GenerationUsing Reflections and Automatic Code Generation
Using Reflections and Automatic Code Generation
Ivan Dolgushin
 

Similar to Deep dive into Oracle ADF (20)

Construire une application JavaFX 8 avec gradle
Construire une application JavaFX 8 avec gradleConstruire une application JavaFX 8 avec gradle
Construire une application JavaFX 8 avec gradle
 
20150516 modern web_conf_tw
20150516 modern web_conf_tw20150516 modern web_conf_tw
20150516 modern web_conf_tw
 
Javascript Frameworks for Joomla
Javascript Frameworks for JoomlaJavascript Frameworks for Joomla
Javascript Frameworks for Joomla
 
jQuery secrets
jQuery secretsjQuery secrets
jQuery secrets
 
Advance jquery-plugin
Advance jquery-pluginAdvance jquery-plugin
Advance jquery-plugin
 
College management system.pptx
College management system.pptxCollege management system.pptx
College management system.pptx
 
meet.js - QooXDoo
meet.js - QooXDoomeet.js - QooXDoo
meet.js - QooXDoo
 
Hooks WCSD12
Hooks WCSD12Hooks WCSD12
Hooks WCSD12
 
Unittests für Dummies
Unittests für DummiesUnittests für Dummies
Unittests für Dummies
 
20-Arid-850 Ali Haider Cheema BSSE(5A) Evening MPL Assignement 08.docx
20-Arid-850 Ali Haider Cheema BSSE(5A) Evening MPL Assignement 08.docx20-Arid-850 Ali Haider Cheema BSSE(5A) Evening MPL Assignement 08.docx
20-Arid-850 Ali Haider Cheema BSSE(5A) Evening MPL Assignement 08.docx
 
Avinash Kundaliya: Javascript and WordPress
Avinash Kundaliya: Javascript and WordPressAvinash Kundaliya: Javascript and WordPress
Avinash Kundaliya: Javascript and WordPress
 
Joomla! Components - Uma visão geral
Joomla! Components - Uma visão geralJoomla! Components - Uma visão geral
Joomla! Components - Uma visão geral
 
Improving android experience for both users and developers
Improving android experience for both users and developersImproving android experience for both users and developers
Improving android experience for both users and developers
 
Droidcon2013 android experience lahoda
Droidcon2013 android experience lahodaDroidcon2013 android experience lahoda
Droidcon2013 android experience lahoda
 
jQuery & 10,000 Global Functions: Working with Legacy JavaScript
jQuery & 10,000 Global Functions: Working with Legacy JavaScriptjQuery & 10,000 Global Functions: Working with Legacy JavaScript
jQuery & 10,000 Global Functions: Working with Legacy JavaScript
 
international PHP2011_Bastian Feder_jQuery's Secrets
international PHP2011_Bastian Feder_jQuery's Secretsinternational PHP2011_Bastian Feder_jQuery's Secrets
international PHP2011_Bastian Feder_jQuery's Secrets
 
Android Best Practices
Android Best PracticesAndroid Best Practices
Android Best Practices
 
Adding a modern twist to legacy web applications
Adding a modern twist to legacy web applicationsAdding a modern twist to legacy web applications
Adding a modern twist to legacy web applications
 
Writing your Third Plugin
Writing your Third PluginWriting your Third Plugin
Writing your Third Plugin
 
Using Reflections and Automatic Code Generation
Using Reflections and Automatic Code GenerationUsing Reflections and Automatic Code Generation
Using Reflections and Automatic Code Generation
 

Recently uploaded

Effective-Recruitment-Strategies and leveraging linkedin
Effective-Recruitment-Strategies and leveraging linkedinEffective-Recruitment-Strategies and leveraging linkedin
Effective-Recruitment-Strategies and leveraging linkedin
DivyaMehta193660
 
Marketing Articles and ppt on how to do marketing ..Challenges faced during M...
Marketing Articles and ppt on how to do marketing ..Challenges faced during M...Marketing Articles and ppt on how to do marketing ..Challenges faced during M...
Marketing Articles and ppt on how to do marketing ..Challenges faced during M...
ankitamarik05
 
HERO.pdf hero company working cap management project
HERO.pdf hero company working cap management projectHERO.pdf hero company working cap management project
HERO.pdf hero company working cap management project
SambalpurTokaSatyaji
 
Recruitment articles and posts- different & effective ways of recruitment
Recruitment articles and posts- different & effective ways of recruitmentRecruitment articles and posts- different & effective ways of recruitment
Recruitment articles and posts- different & effective ways of recruitment
Rashi427200
 
TEST WORTHINESS: VALIDITY, RELIABILITY, PRACTICALITY
TEST WORTHINESS: VALIDITY, RELIABILITY, PRACTICALITYTEST WORTHINESS: VALIDITY, RELIABILITY, PRACTICALITY
TEST WORTHINESS: VALIDITY, RELIABILITY, PRACTICALITY
AaSs197122
 
Biography of the late Mrs. Stella Atsupui Eddah.pdf
Biography of the late Mrs. Stella Atsupui Eddah.pdfBiography of the late Mrs. Stella Atsupui Eddah.pdf
Biography of the late Mrs. Stella Atsupui Eddah.pdf
AbdulSadickZutah
 
Pengukuran berat badan anak dan tinggi badan anak
Pengukuran berat badan anak dan tinggi badan anakPengukuran berat badan anak dan tinggi badan anak
Pengukuran berat badan anak dan tinggi badan anak
DeviDamayanti53
 
calcaneal fracture seminar by dr vishu.pptx
calcaneal fracture seminar by dr vishu.pptxcalcaneal fracture seminar by dr vishu.pptx
calcaneal fracture seminar by dr vishu.pptx
Skmch
 
the sparks foundation JOB READINESS- how to be job ready. task 2
the sparks foundation JOB READINESS- how to be job ready. task 2the sparks foundation JOB READINESS- how to be job ready. task 2
the sparks foundation JOB READINESS- how to be job ready. task 2
Rashi427200
 
Destyney Duhon personal brand exploration
Destyney Duhon personal brand explorationDestyney Duhon personal brand exploration
Destyney Duhon personal brand exploration
minxxmaree
 
Risks & Business Risks Reduce - investment.pdf
Risks & Business Risks Reduce  - investment.pdfRisks & Business Risks Reduce  - investment.pdf
Risks & Business Risks Reduce - investment.pdf
Home
 
stackconf 2024 | On-Prem is the new Black by AJ Jester
stackconf 2024 | On-Prem is the new Black by AJ Jesterstackconf 2024 | On-Prem is the new Black by AJ Jester
stackconf 2024 | On-Prem is the new Black by AJ Jester
NETWAYS
 
stackconf 2024 | Buzzing across the eBPF Landscape and into the Hive by Bill ...
stackconf 2024 | Buzzing across the eBPF Landscape and into the Hive by Bill ...stackconf 2024 | Buzzing across the eBPF Landscape and into the Hive by Bill ...
stackconf 2024 | Buzzing across the eBPF Landscape and into the Hive by Bill ...
NETWAYS
 
stackconf 2024 | Using European Open Source to build a Sovereign Multi-Cloud ...
stackconf 2024 | Using European Open Source to build a Sovereign Multi-Cloud ...stackconf 2024 | Using European Open Source to build a Sovereign Multi-Cloud ...
stackconf 2024 | Using European Open Source to build a Sovereign Multi-Cloud ...
NETWAYS
 
Workshop Wednesday with SaaStr CEO Jason Lemkin - VC Workshop
Workshop Wednesday with SaaStr CEO Jason Lemkin - VC WorkshopWorkshop Wednesday with SaaStr CEO Jason Lemkin - VC Workshop
Workshop Wednesday with SaaStr CEO Jason Lemkin - VC Workshop
saastr
 
Building Digital Products & Content Leadership
Building Digital Products & Content LeadershipBuilding Digital Products & Content Leadership
Building Digital Products & Content Leadership
Rajesh Math
 
At the intersection of SEO & Product - Vanda Pokecz presentation
At the intersection of SEO & Product - Vanda Pokecz presentationAt the intersection of SEO & Product - Vanda Pokecz presentation
At the intersection of SEO & Product - Vanda Pokecz presentation
Vanda Pokecz
 
2024-07-07 Transformed 06 (shared slides).pptx
2024-07-07 Transformed 06 (shared slides).pptx2024-07-07 Transformed 06 (shared slides).pptx
2024-07-07 Transformed 06 (shared slides).pptx
Dale Wells
 
A study on drug utilization evaluation of bronchodilators using DDD method
A study on drug utilization evaluation of bronchodilators using DDD methodA study on drug utilization evaluation of bronchodilators using DDD method
A study on drug utilization evaluation of bronchodilators using DDD method
Dr. Afreen Nasir
 
Call India - AmanTel on the App Store.ppt
Call India - AmanTel on the App Store.pptCall India - AmanTel on the App Store.ppt
Call India - AmanTel on the App Store.ppt
Best International calling app on the market
 

Recently uploaded (20)

Effective-Recruitment-Strategies and leveraging linkedin
Effective-Recruitment-Strategies and leveraging linkedinEffective-Recruitment-Strategies and leveraging linkedin
Effective-Recruitment-Strategies and leveraging linkedin
 
Marketing Articles and ppt on how to do marketing ..Challenges faced during M...
Marketing Articles and ppt on how to do marketing ..Challenges faced during M...Marketing Articles and ppt on how to do marketing ..Challenges faced during M...
Marketing Articles and ppt on how to do marketing ..Challenges faced during M...
 
HERO.pdf hero company working cap management project
HERO.pdf hero company working cap management projectHERO.pdf hero company working cap management project
HERO.pdf hero company working cap management project
 
Recruitment articles and posts- different & effective ways of recruitment
Recruitment articles and posts- different & effective ways of recruitmentRecruitment articles and posts- different & effective ways of recruitment
Recruitment articles and posts- different & effective ways of recruitment
 
TEST WORTHINESS: VALIDITY, RELIABILITY, PRACTICALITY
TEST WORTHINESS: VALIDITY, RELIABILITY, PRACTICALITYTEST WORTHINESS: VALIDITY, RELIABILITY, PRACTICALITY
TEST WORTHINESS: VALIDITY, RELIABILITY, PRACTICALITY
 
Biography of the late Mrs. Stella Atsupui Eddah.pdf
Biography of the late Mrs. Stella Atsupui Eddah.pdfBiography of the late Mrs. Stella Atsupui Eddah.pdf
Biography of the late Mrs. Stella Atsupui Eddah.pdf
 
Pengukuran berat badan anak dan tinggi badan anak
Pengukuran berat badan anak dan tinggi badan anakPengukuran berat badan anak dan tinggi badan anak
Pengukuran berat badan anak dan tinggi badan anak
 
calcaneal fracture seminar by dr vishu.pptx
calcaneal fracture seminar by dr vishu.pptxcalcaneal fracture seminar by dr vishu.pptx
calcaneal fracture seminar by dr vishu.pptx
 
the sparks foundation JOB READINESS- how to be job ready. task 2
the sparks foundation JOB READINESS- how to be job ready. task 2the sparks foundation JOB READINESS- how to be job ready. task 2
the sparks foundation JOB READINESS- how to be job ready. task 2
 
Destyney Duhon personal brand exploration
Destyney Duhon personal brand explorationDestyney Duhon personal brand exploration
Destyney Duhon personal brand exploration
 
Risks & Business Risks Reduce - investment.pdf
Risks & Business Risks Reduce  - investment.pdfRisks & Business Risks Reduce  - investment.pdf
Risks & Business Risks Reduce - investment.pdf
 
stackconf 2024 | On-Prem is the new Black by AJ Jester
stackconf 2024 | On-Prem is the new Black by AJ Jesterstackconf 2024 | On-Prem is the new Black by AJ Jester
stackconf 2024 | On-Prem is the new Black by AJ Jester
 
stackconf 2024 | Buzzing across the eBPF Landscape and into the Hive by Bill ...
stackconf 2024 | Buzzing across the eBPF Landscape and into the Hive by Bill ...stackconf 2024 | Buzzing across the eBPF Landscape and into the Hive by Bill ...
stackconf 2024 | Buzzing across the eBPF Landscape and into the Hive by Bill ...
 
stackconf 2024 | Using European Open Source to build a Sovereign Multi-Cloud ...
stackconf 2024 | Using European Open Source to build a Sovereign Multi-Cloud ...stackconf 2024 | Using European Open Source to build a Sovereign Multi-Cloud ...
stackconf 2024 | Using European Open Source to build a Sovereign Multi-Cloud ...
 
Workshop Wednesday with SaaStr CEO Jason Lemkin - VC Workshop
Workshop Wednesday with SaaStr CEO Jason Lemkin - VC WorkshopWorkshop Wednesday with SaaStr CEO Jason Lemkin - VC Workshop
Workshop Wednesday with SaaStr CEO Jason Lemkin - VC Workshop
 
Building Digital Products & Content Leadership
Building Digital Products & Content LeadershipBuilding Digital Products & Content Leadership
Building Digital Products & Content Leadership
 
At the intersection of SEO & Product - Vanda Pokecz presentation
At the intersection of SEO & Product - Vanda Pokecz presentationAt the intersection of SEO & Product - Vanda Pokecz presentation
At the intersection of SEO & Product - Vanda Pokecz presentation
 
2024-07-07 Transformed 06 (shared slides).pptx
2024-07-07 Transformed 06 (shared slides).pptx2024-07-07 Transformed 06 (shared slides).pptx
2024-07-07 Transformed 06 (shared slides).pptx
 
A study on drug utilization evaluation of bronchodilators using DDD method
A study on drug utilization evaluation of bronchodilators using DDD methodA study on drug utilization evaluation of bronchodilators using DDD method
A study on drug utilization evaluation of bronchodilators using DDD method
 
Call India - AmanTel on the App Store.ppt
Call India - AmanTel on the App Store.pptCall India - AmanTel on the App Store.ppt
Call India - AmanTel on the App Store.ppt
 

Deep dive into Oracle ADF

  • 5. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   Use  Case  (Dive  Site)   5  
  • 6. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   Use  Case  (Dive  Site)   6  
  • 7. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   Dynamic  BC  Model  Structure   En0ty  Defini0on   View  Object  Defini0on   View  Object  Instance   ABributes   UI  Hints   Valida0on  rules   ABributes   LOV’s   View  Accessors   Lookup  View  Defini0on   UI  Categories   View  Criterias   7  
  • 10. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   Giant  Stride  Entry   10  
  • 11. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   Ø  Generate VO’s name Ø  Try to find the VO Ø  Create View Definition Ø  Create VO instance for the View Definition   public  ViewObject  createDynamicVO(String  agileEn0tyName)  {              //Generate  VO  name  for  the  given  en0ty  name  just  by  adding  VAGILE_  prefix              //The  name  for  "DIVERS"  agile  en0ty  is  generated  as  "VAGILE_DIVERS”.  JboNameU0l  class  can  be  used                String  agileVOName  =  getAgileVOName(agileEn0tyName);                ViewObject  agileVO  =  findViewObject(agileVOName);              if  (agileVO  ==  null)  {                                              ViewDefImpl  agileViewDef  =  new  VAgileDefImpl(agileVOName,                                                                                                                                                                                                                    getAgileEn0tyDefini0on(agileEn0tyName));                      agileVO  =  createViewObjectForDef(agileVOName,  agileViewDef);              }                                  return  agileVO;                                                              }   Dynamic  View  Object   11  
  • 12. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   Ø  Extend VAgile view definition Ø  Set row implementation class Ø  Create entity definition Ø  Resolve and register definition object   public  class  VAgileDefImpl  extends  ViewDefImpl  {   public  VAgileDefImpl(String  name,  VAgileEn0tyDefini0onRowImpl  agileEn0tyDefini0on)  {                  super(DEF_SCOPE_SESSION,  name,  "com.cs.blog.deepdiveadf.agiledatamodel.views.VAgile");                  setRowClass(VAgileRowImpl.class);                  String  en0tyName  =  generateAgileEn0tyName(name);    //VAGILE_DIVERS  -­‐>  VAGILE_DIVERS_ENTITY                              En0tyDefImpl  en0tyDefImpl  =  new  En0tyAgileDefImpl(en0tyName,  agileEn0tyDefini0on);                        addEn0tyUsage("En0ty",  en0tyDefImpl.getName(),  false,  false);                  addAllEn0tyABributes("En0ty");                                        //Two  magic  calls                  resolveDefObject();                  registerDefObject();                          }   Dynamic  View  DefiniOon   12  
  • 13. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   Ø  Set implementation class of entity instances Ø  Add agile attributes Ø  Resolve and register the definition object   public  class  En0tyAgileDefImpl  extends  En0tyDefImpl  {   public  En0tyAgileDefImpl(String  en0tyName,  VAgileEn0tyDefini0onRowImpl  agileEn0tyDefini0on)  {          super(en0tyName);          setRowClass(En0tyAgileImpl.class);                                            RowIterator  agileABributes  =  agileEn0tyDefini0on.getAgileABributes();          while  (agileABributes.hasNext())  {                                          addAgileABribute((VAgileABributesRowImpl)  agileABributes.next());  }                                              //Two  magic  calls          resolveDefObject();          registerDefObject();                          }   Dynamic  EnOty  DefiniOon   13  
  • 14. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com    private  void  addAgileABribute(VAgileParamDefini0onRowImpl  agileABr)  {                  ABributeDefImpl  at  =  addABribute(/*aBrName*/  agileABr.getName(),    /*columnName*/    agileABr.getName(),                                                                                                                                                  /*javaType*/  agileABr.getJavaType(),    /*isPrimaryKey*/    agileABr.isPK(),                                                                                                                                                    /*isDiscriminator*/  false,      /*isPersistent*/  !  agileABr.isTransient());                                                                          at.setMandatory(agileABr.isMandatory());                                                at.setDefaultValue(agileABr.getDefaultvalueliteral());                  at.setTransientExpression(agileABr.getDefaultvalueexpression());                                  if  (agileABr.isReadonly())  at.setUpdateableFlag(ABributeDef.READONLY);                  if  (agileABr.getDependencies()!=null)                      at.setBackwardDependencies(Arrays.asList(agileABr.getDependencies().split("  ")));                    at.setProperty(ABributeHints.ATTRIBUTE_LABEL,  agileABr.getLabel());                  at.setProperty(ABributeHints.ATTRIBUTE_TOOLTIP,  agileABr.getDescrip0on());                          at.setProperty(ABributeHints.ATTRIBUTE_AUTOSUBMIT,  agileABr.isAutoSubmit());                            if  (agileABr.getMaxlength()!=null)                          at.addValidator(AgileValidatorFactory.getLengthValidator(agileABr.getMaxlength()));                    …                                }   Agile  APribute   14  
  • 15. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   Ø  There is a set of pre-defined validators Ø  JboLengthValidator, JboCompareValidator, JboExpressionValidator, … Ø  Extend JboAbstractValidator Ø  Invoke a constructor and specify the error message  public  sta0c  JboLengthValidator  getLengthValidator(int  maxLength)  {          JboLengthValidator  jlv  =                  new  JboLengthValidator(/*inverse*/          false,                                                                                                          /*operType*/  JboLengthValidator.LESSTHANEQUALTO,                                                                                                            /*dataType*/  JboLengthValidator.CHARACTER,                                                                                                          /*value*/                maxLength);                    //maxlength_err=Value  must  not  be  longer  than  {0}  characters          jlv.setErrorMsgId(MAX_LENGTH_ERROR);          HashMap  errvaluesMap  =  new  HashMap();          errvaluesMap.put("0",    Integer.toString(maxLength));                            jlv.setErrorMsgExpressions(errvaluesMap);              return  jlv;  }   Length  Validator  Example   15  
  • 16. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   Ø  Create Resource Bundle Definition Ø  Implement ResourceBundleDef interface Ø  Link entity definition to the resource bundle  <ResourceBundle>          <Proper0esBundle                      Proper0esFile="com.cs.blog.En0tyAgileBundle"/>      </ResourceBundle>       public  class  En0tyAgileDefImpl  extends  En0tyDefImpl  {   private  sta0c  String  RESOURCE_BUNDLE_FILE="com.cs.blog.En0tyAgileBundle";     private  void    linkToResourceBundle()  {        Proper0esBundleDef  rb  =  new  Proper0esBundleDef(this);                                            rb.setProper0esFile(RESOURCE_BUNDLE_FILE);        setResourceBundleDef(rb);  }           Link  to  the  Resource  Bundle   16  
  • 17. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   ü  Custom View Definition for an entity-based VO is created and registered ü  Custom Entity Definition is created and registered ü  Contains all necessary attributes ü  UI hints are set up ü  Validators are created ü  Resource Bundle is linked ü  View Object instance is created ü  Only standard ADF BC API is used       Check  Point   17  
  • 18. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   Ø  Dynamic table Ø  Dynamic binding approach Ø  EL expression in Binds attribute Ø  #{pageFlowScope.vo} != #{pageFlowScope.vo.name}    <executables>          <iterator  Binds="#{pageFlowScope.vo.name}"                                            DataControl="AgileDataModelServiceDataControl“                                            RangeSize="25"                                            id="VAgileIterator"/>    </executables>       <dynamic:table  value="#{bindings.VAgileIterator}"  id="t1"/>         Give  It  a  Try!   18  
  • 20. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   ProgrammaOcally  Populated  View  Object   ResultSet 20  
  • 21. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   ProgrammaOcally  Populated  View  Object   21  
  • 22. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   public VAgileImpl q  Constructor protected void executeQueryForCollection q  Retrieve and store a pointer to data from alternative data source protected boolean hasNextForCollection q  Whether there is any data to fetch out protected ViewRowImpl createRowFromResultSet q  Actually create and populate new VO’s row public long getQueryHitCount q  Return an estimated count of the rows protected void releaseUserDataForCollection q  Release and close resources ProgrammaOcally  Populated  View  Object   22  
  • 23. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   ProgrammaOcally  Populated  View  Object   23  
  • 24. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com    protected  ViewRowImpl  createRowFromResultSet(Object  qc,  ResultSet  resultSet)  {                  resultSet  =  (ResultSet)getUserDataForCollec0on(qc);                  ViewRowImpl  r  =  null;                  if  (resultSet  !=  null)  {                          r  =  createNewRowForCollec0on(qc);                          boolean  theSameEn0tyRow  =  true;                          try  {                                  Object  keyValue  =  resultSet.getObject("PKVALUE");                                  while  (theSameEn0tyRow)  {                                          int  aBrIndex  =  getABributeIndexOf(resultSet.getString("ATTRNAME"));                                          ABributeDef  at  =  getABributeDef(aBrIndex);                                          populateABributeForRow(r,  aBrIndex,  resultSet.getObject("ATTRVALUE"));                                          theSameEn0tyRow  =  resultSet.next()  &&                                                                                keyValue.equals(resultSet.getObject("PKVALUE"));                                  }                          }  catch  (SQLExcep0on  s)  {  throw  new  JboExcep0on(s);  }                  }  else                          setFetchCompleteForCollec0on(qc,  true);                  return  r;          }       ProgrammaOcally  Populated  View  Object   24  
  • 26. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   Dynamic  List  of  Values   select  Id,  Name  from  Language   26  
  • 27. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   Ø  Create and register lookup View Definition Ø  Create and add View Accessor Ø  Create and add List Binding Definition Ø  Set the LOV for the attribute Dynamic  List  of  Values   27  
  • 28. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   Ø  Create and register lookup View Definition Ø  Create and add View Accessor Ø  Create and add List Binding Definition Ø  Set the LOV for the attribute  ViewDefImpl  vaViewDef  =  new  ViewDefImpl();    vaViewDef.setQuery(lookupSql);    vaViewDef.setFullSql(true)      String  lookupViewDefName  =  generateName(viewName,  aBr.getName());    vaViewDef.setName(lookupViewDefName);    vaViewDef.setFullName(lookupViewDefName);      vaViewDef.addViewABribute(lookupValueABrName,  lookupValueABrName,  Object.class);                  vaViewDef.addViewABribute(lookupDisplayABrName,  lookupDisplayABrName,  Object.class);    ((ABributeDefImpl)  vaViewDef.getABributeDef(0)).setPrimaryKey(true);                vaViewDef.resolveDefObject();    vaViewDef.registerDefObject();     Dynamic  List  of  Values   28  
  • 29. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   Ø  Create and register lookup View Definition Ø  Create and add View Accessor Ø  Create and add List Binding Definition Ø  Set the LOV for the attribute  ViewAccessorDef  vaccessdef  =  new  ViewAccessorDef();      vaccessdef.setName(lookupViewDefName);      vaccessdef.setViewDefFullName(lookupViewDefName);      addViewAccessorDef(vaccessdef);                           Dynamic  List  of  Values   29  
  • 30. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   Ø  Create and register lookup View Definition Ø  Create and add View Accessor Ø  Create and add List Binding Definition Ø  Set the LOV for the attribute    ListBindingDef  lov  =  new  ListBindingDef(getDefManager(),  Defini0onObject.DEF_SCOPE_SESSION);    String  LOVName  =  generateLOVName(aBr.getName());    lov.setName(LOVName);    lov.setListVOName(viewAccessorDefName);      lov.setABrNames(new  String[]  {aBr.getName()});    lov.setListABrNames(new  String[]  {lookupValueABrName});    lov.setListDisplayABrNames(new  String[]  {lookupValueABrName,  lookupDisplayABrName});    addListBindingDef(lov);            ((ABributeDefImpl)  aBr).setLOVName(LOVName);    ((ABributeDefImpl)  aBr).setProperty(ABributeHints.ATTRIBUTE_CTL_TYPE,                                                                                                                                          ABributeHints.CTLTYPE_COMBOLOV);                                 Dynamic  List  of  Values   30  
  • 32. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com    public  class  En0tyAgileImpl  extends  En0tyImpl      protected  void  doDML(int  opera0on,  Transac0onEvent  e)  {                  switch  (opera0on)  {                  case  DML_INSERT:  {                                  executeDMLprocedure(getInsertProcedureName());                                  break;  }                  case  DML_UPDATE:  {                                  executeDMLprocedure(getUpdateProcedureName());                                  break;  }                  case  DML_DELETE:  {                                  executeDMLprocedure(getDeleteProcedureName());                                  break;  }                  }          }       Create,  Update  and  Delete   32  
  • 33. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   Ø  Get IStoredProc instance Ø  Set input parameters values Ø  Execute PL/SQL procedure Ø  Populate attributes from output parameters    private  void  executeDMLprocedure(String  procedureName)  {                  IStoredProc  storedProc  =  getStoredProc(procedureName);                  for  (IStoredProcParam  param  :  storedProc.getParams())  {                          if  (param.isIn())                                    param.setParamValue(getABribute(param.getParamName()));                  }                  storedProc.execute();                  for  (IStoredProcParam  param  :  storedProc.getParams())  {                          if  (param.isOut())                              populateABribute(getEn0tyDef().getABributeIndexOf(param.getParamName()),                                                        param.getParamValue());                  }   }     Create,  Update  and  Delete   33  
  • 34. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   Ø  findByPrimaryKey is invoked on activation of modified entity   public  En0tyImpl  findByPrimaryKey(DBTransac0on  txn,  Key  key)  {                  En0tyImpl  en0ty  =  super.findByPrimaryKey(txn,  key);                                    if  (en0ty  ==  null)  {                                                  en0ty  =  createBlankInstance(txn);                                                  ABributeDef[]  keyABrs  =getPrimaryKeys();                          //Populate  key  aBributes                          for  (int  i  =  keyABrs.length  -­‐  1;  i  >=  0;  i-­‐-­‐)  {                                ((En0tyAgileImpl)  en0ty).populateABribute(keyABrs[i].getIndex(),  key.getKeyValues()[i]);                          }                                                  ((En0tyAgileImpl)  en0ty).doSelect();                                                  ((En0tyAgileCollImpl)  en0ty.getEn0tyCache()).add(en0ty);                                          }                                  return  en0ty;          }   PassivaOon  /  AcOvaOon  Issue   34  
  • 35. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   <af:table  rows="#{bindings.VAgile.rangeSize}"                                    fetchSize="#{bindings.VAgile.rangeSize}"                                    emptyText="#{bindings.VAgile.viewable  ?                                                                                    'No  data  to  display.'  :  'Access  Denied.'}"                                    var="row"  rowBandingInterval="0”  value="#{bindings.VAgile.collec0onModel}"                                    selectedRowKeys="#{bindings.VAgile.collec0onModel.selectedRow}"                                    selec0onListener="#{bindings.VAgile.collec0onModel.makeCurrent}"                                    rowSelec0on="single"  id="t1">          <af:forEach  items="#{bindings.VAgile.aBributeDefs}”  var="def">                  <af:column  headerText="#{bindings.VAgile.labels[def.name]}“                                                            sortable="true"  sortProperty="#{def.name}“  id="c2">                          <af:outputText  value="#{row[def.name]}"  id="ot2"/>                  </af:column>          </af:forEach>   </af:table>       Dynamic  Table   35  
  • 36. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com    <executables>              <iterator  Binds="#{pageFlowScope.vo.name}"                                                DataControl="AgileDataModelServiceDataControl“                                                id="VAgileIterator"/>    </executables>      <bindings>            <tree  IterBinding="VAgileIterator"  id="VAgile">                  <nodeDefini0on  Name="VAgile0"/>          </tree>    </bindings>       Dynamic  Table   <af:table  rows="#{bindings.VAgile.rangeSize}"                                    fetchSize="#{bindings.VAgile.rangeSize}”                                      …   36  
  • 37. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   <dynamic:form value="#{bindings.VAgileIterator}" id="f1"/>   Dynamic  Form   37  
  • 38. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com                 <af:iterator  id="i1"  value="#{bindings.VAgile.aBributesModel.aBributes}"  var="aBr">                  <af:dynamicComponent  id="d2"  aBributeModel="#{aBr}"                                                                                                          value="#{bindings[aBr.containerName][aBr.name].inputValue}"/>    </af:iterator>                                                                                                                                                    <tree  IterBinding="VAgileIterator"  id="VAgile">                                                                                                                                                              <nodeDefini0on  Name="VAgile0"/>                                                                                                                                                  </tree>     Dynamic  Component  (12c)   38  
  • 39. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   Ø  DynamicComponent has limitations Ø  af:Iterator + af:switcher approach can be used    <af:iterator  value=”#{bindings.VAgile.aBributesModel.aBributes}"  var="aBr"  id="dc_i1">                              <af:switcher  id="dc_s1"  defaultFacet="Default"                                                                            facetName=”#{bindings[aBr.containerName][aBr.name].agileTypeID}”>                                  <f:facet  name="DATE">                                      <af:inputDate  id="dc_id1"                                                                                          label=”#{bindings[aBr.containerName][aBr.name].label}”                                                                                                                                                            value=”#{bindings[aBr.containerName][aBr.name].inputValue}”                                                                                                                                                      shortDesc="#{bindings[aBr.containerName][aBr.name].tool0p}”                                                                                          />                                  </f:facet>                                <f:facet  name=”INT”>                                  …   Hand  made  Dynamic  Form    <tree  IterBinding="VAgileIterator"  id="VAgile">                  <nodeDefini0on  Name="VAgile0"/>    </tree>   39  
  • 41. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   <dynamic:form value="#{bindings.VAgileIterator}" id="f1“ category="General"/>   UI  Categories   41  
  • 42. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   public  class  VAgileDefImpl  extends  ViewDefImpl     private  void  createUICategories(RowIterator  uiCategories)  {          if  (uiCategories.hasNext())  {                  CategoryManager  cm  =  ensureCategoryManager();                    while  (uiCategories.hasNext())  {                          VAgileEn0tyGroupRowImpl  r  =                                  (VAgileEn0tyGroupRowImpl)uiCategories.next();                            DefaultVOCategoryImpl  defaultCategory  =  new  DefaultVOCategoryImpl(r.getName());                          defaultCategory.setProperty(GenericHints.PROPERTY_LABEL,  r.getLabel());                            defaultCategory.setCategoryManager(cm);                          cm.addCategory(defaultCategory);                  }          }   }     UI  Categories   42  
  • 43. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com    private  void  addAgileABribute(VAgileParamDefini0onRowImpl  agileParam)  {                                ABributeDefImpl  at  =  addABribute(/*aBrName*/                        agileParam.getName(),                                                                                                                                              /*columnName*/          agileParam.getName(),                                                                                                                                              /*javaType*/                          agileParam.getJavaType(),                                                                                                                                              /*isPrimaryKey*/            agileParam.isPK(),                                                                                                                                                /*isDiscriminator*/    false,                                                                                                                                              /*isPersistent*/                  !agileParam.isTransient());                    …        if  (agileParam.getAgilegroupname()!=null)              at.setProperty(ABributeHints.ATTRIBUTE_CTL_CATEGORY,                                                                                    agileParam.getAgilegroupname());                                   …              }     UI  Categories   43  
  • 44. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com    <af:iterator  id="i2"  value="#{bindings.VAgile.aBributesModel.hierarchicalABributes}”      var="aBr">                      <af:switcher  id="sw1"  facetName="#{aBr.descriptorType}"  defaultFacet="ATTRIBUTE">                                        <f:facet  name="GROUP">                                                <af:group  0tle="#{aBr.label}"  id="g1">                                                                  …                                        </f:facet>                                        <f:facet  name="ATTRIBUTE">                                                    <af:dynamicComponent  id="ad1"  aBributeModel="#{aBr}"                                                                                                            value="#{bindings[aBr.containerName][aBr.name].inputValue}"/>                                          </f:facet>                      </af:switcher>      </af:iterator>   UI  Categories  (12c)   44  
  • 45. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   <af:naviga0onPane  id="catPane"                                                                            rendered="#{not  empty  viewScope.EditViewBean.tabMenuModel}"                                                                          value="#{viewScope.EditViewBean.tabMenuModel}"  var="tab">          <f:facet  name="nodeStamp">                  <af:commandNaviga0onItem  id="catPaneID"                                                                                                                              ac0onListener="#{viewScope.EditViewBean.tabAc0vatedEvent}"                                                                                                                              textAndAccessKey="#{tab.propertyMap['LABEL']}">                          <f:aBribute  name="tabId"  value="#{tab.name}"/>                  </af:commandNaviga0onItem>          </f:facet>   </af:naviga0onPane>         UI  Categories   45  
  • 46. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com    public  MenuModel  getTabMenuModel()  {              List  pageList  =  getAgileVO().getCategoriesList();              if  (pageList!=null  &&  pageList.size()>1)                  return  new  ChildPropertyMenuModel(pageList,  null,                                  CollecOons.singletonList(pageList.indexOf(getSelectedPage())));              else                  return  null;              }     UI  Categories   46  
  • 47. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   <dynamic:form  value="#{bindings.VAgileIterator}"  id="f1"                                                            binding="#{viewScope.EditViewBean.dynform}"                                       ��                                                                                                                                                          category="#{viewScope.EditViewBean.selectedCategoryName}"/>     <dynamic:form  value="#{bindings.VAgileIterator}"  id="f1"                                                              binding="#{viewScope.EditViewBean.dynform}"                                                                                                                                forceRefresh="#{viewScope.EditViewBean.formNeedRefresh}"/>     public  Boolean  getFormNeedRefresh()  {        if  (ObjectU0ls.equal(dynform.getCategory(),  getSelectedCategoryName()))                return  false;        else  {                this.dynform.setCategory(getSelectedCategoryName());                return  true;                                                      }                         }       UI  Categories   47  
  • 48. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   <af:train  id="t2"  value="#{viewScope.InsertViewBean.trainMenuModel}"  var="node"                                                              rendered="#{not  empty  viewScope.InsertViewBean.trainMenuModel}">          <f:facet  name="nodeStamp">                  <af:commandNaviga0onItem  textAndAccessKey="#{node.propertyMap['LABEL']}"                                                                                                              immediate="#{viewScope.InsertViewBean.trainMenuModel.immediate}"                                                                                                              disabled="#{viewScope.InsertViewBean.trainMenuModel.readOnly}"                                                                                                              visited="#{viewScope.InsertViewBean.trainMenuModel.visited}"  id="cni"                                                                                                              ac0onListener="#{viewScope.InsertViewBean.trainAc0on}">                          <f:aBribute  name="stopName"  value="#{node.name}"/>                  </af:commandNaviga0onItem>          </f:facet>   </af:train>     Dynamic  Train   48  
  • 49. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com                     public  ProcessMenuModel  getTrainMenuModel()  {            ProcessMenuModel  processMenuModel  ==  null;            List  pageList  =  getAgileVO().getCategoriesList();            if  (pageList!=null  &&  pageList.size()>1)  {                  ChildPropertyTreeModel  childPropertyTreeModel  =  new  ChildPropertyTreeModel(pageList,  null);                  processMenuModel  =  new  CategoryTrainMenuModel(childPropertyTreeModel,  NAME);                                          processMenuModel.setCurrentStop(getCurrentStopName());    }                return  processMenuModel;   }   Dynamic  Train   49  
  • 50. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   public  class  CategoryTrainMenuModel  extends  ProcessMenuModel{          private  String  currentStop;          @Override          protected  String  getCurrentViewId()  {                  return  currentStop;                              }      public  CategoryTrainMenuModel(Object  instance,    String  viewIdProperty)  {              super(instance,  viewIdProperty);          }     public  void  setCurrentStop(String  currentStop)  {          this.currentStop  =  currentStop;   }   public  String  getCurrentStop()  {          return  currentStop;   }   }     Dynamic  Train   50  
  • 52. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com                             @Override     public  String  getCriteriaItemClause(ViewCriteriaItem  crieriaItem)  {              return  (String)  crieriaItem.getValue();          }     Dynamic  View  Criteria   View  Object   View  Criteria   View  Criteria  Row   View  Criteria  Item   ABribute   Opera0on   Operand   1   1   1   *   *   *   setValue() 52  
  • 53. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   Ø  Create  View  Criteria  and  set  name   Ø  Create  View  Criteria  Row   Ø  Create  View  Criteria  Item  for  the  first  aBribute   Ø  Set  where  clause  as  value   Ø  Set  CRITERIA_MODE_CACHE  to  ensure  memory  filtering   Ø  Add  View  Criteria  to  View  Defini0on     ViewCriteriaImpl  viewCriteria  =    (ViewCriteriaImpl)  createViewCriteria();   viewCriteria.setName(userFilter.getName());   ViewCriteriaRow  vcr  =  viewCriteria.createViewCriteriaRow();   String  firstABributeName  =  getABributeDef(0).getName();   ViewCriteriaItem  vci  =  new  ViewCriteriaItem(firstABributeName,  vcr);   vci.setValue(userFilter.getWhereclause());   vcr.addCriteriaItem(firstABributeName,  vci);                   viewCriteria.add(vcr);   viewCriteria.setCriteriaMode(ViewCriteria.CRITERIA_MODE_CACHE);   putViewCriteria(viewCriteria.getName(),  viewCriteria);                 Dynamic  View  Criteria   53  
  • 54. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   <BC4JDataControl  id="AgileDataModelServiceDataControl"                                            Package="com.cs.blog.deepdiveadf.agiledatamodel"                                            FactoryClass="com.cs.blog.deepdiveadf.agiledatamodel.datacontrol.AgileDataControlFactory”                                              …   public  class  AgileDataControlFactory    extends  DataControlFactoryImpl  {      @Override      protected  String  getDataControlClassName()  {  return  AgileDataControl.class.getName();  }     }     public  class  AgileDataControl    extends  JUApplica0on  {      @Override        protected  void  applySortCriteria(DCIteratorBinding  iter,  SortCriteria[]  sortBy)  {              if  (sortBy  !=  null)  {                    ViewObject  vo  =  iter.getViewObject();                    JboEnvUOl.applyVOSortCriteria(vo,  sortBy,    true  /*Transient*/)  ;                }          }   Memory  SorOng   54  
  • 55. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   Ø  Set  VO  property  PROP_ALWAYS_USE_SORT  to  true   Ø  Sor0ng  is  always  performed  in  memory   public  class  VAgileImpl  extends  ViewObjectImpl   …   @Override   protected  void  create()  {        super.create()        setProperty(PROP_ALWAYS_USE_SORT,  "true");   }     …   Memory  SorOng  (11.1.1.7.0  &  12c)   55  
  • 57. Eugene  Fedorenko   adfprac0ce-­‐fedor.blogspot.com   Safety  Stop.  QuesOons  &  Answers   57