SlideShare une entreprise Scribd logo
1  sur  18
Interface RecordFilter

Interface RecordFilter
• javax.microedition.rms
• public interface RecordFilter

Interface RecordFilter
• This interface is used to searching in the recordstore.
• Searching is also called as ‘Filtering’.
• It specifies which records should be included in
enumeration
• Returns true if the candidate record is selected by the
RecordFilter.
For example:
• RecordFilter f = new DateRecordFilter(); // class
implements RecordFilter if
(f.matches(recordStore.getRecord(theRecordID)) == true)
DoSomethingUseful(theRecordID);
Interface RecordFilter
Searching Records:
• Here, if records matches a search criteria are
copied into the RecordEnumeration and
unmatched records are not included in the
RecordEnumeration.

Interface RecordFilter
• Record Searching(Filtering) is performed by
using interface RecordFilter interface.
• RecordFilter interface requires two
parameters: (1) match() (2) filterclose()

Interface RecordFilter
Match()
• It is a member method of Filter class
• It is used to read columns from the record and
uses logical operators to verify whether they
are matching the search key or not.
• It contains the searching logic

Interface RecordFilter
Logic for searching
Step 1
• Create a filter class by implementing RecordFilter
• Filter class should contain the logic for comparing
records and search criteria
Step 2:
• Create an object of Filter class and create a
record enumeration using its object:
ie: MyFilter mf=new MyFilter(“searchKey”);
Rec_enum=rec.enumerateRecords(filter,null,false);
Interface RecordFilter
• The enumerateRecords() method calls methods
defined in the Filter class.
Step 3:
• Execute loop record enumeration and copy each record
to a variable.
Step 4:
• Display the data in dialog box
Step 5:
• If any errors occurs display them
Step 6:
• Close and remove RecordEnumeration and record store
Interface RecordFilter
filterClose()
• It is used to free the resources

Interface RecordFilter
•
•
•
•
•
•
•
•
•
•
•
•
•

//searching program and exception handling
import javax.microedition.rms.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.io.*;
public class SearchEx extends MIDlet implements CommandListener
{
private Display d;
private Alert a;
private Form f;
private Command exit;
private Command start;
private RecordStore rec = null;

•

private RecordEnumeration r = null;

•
•
•
•
•
•
•
•
•
•
•
•
•
•

private Filter fil = null;
private boolean b;
public SearchEx ()
{
d = Display.getDisplay(this);
b=false;
exit = new Command("Exit", Command.SCREEN, 1);
start = new Command("Start", Command.SCREEN, 1);
f = new Form("Mixed RecordEnumeration", null);
f.addCommand(exit);
f.addCommand(start);
f.setCommandListener(this);
}

Interface RecordFilter
•
•
•
•
•
•
•
•
•
•
•
•
•
•

public void startApp()
{
d.setCurrent(f);
}
public void pauseApp()
{
}
public void destroyApp( boolean un ) throws MIDletStateChangeException
{
if(un==false)
{
throw new MIDletStateChangeException();
}
}
Interface RecordFilter
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•

public void commandAction(Command c, Displayable dd)
{
if (c == exit)
{
try
{
if(b==false)
{
StringItem s=new StringItem(null,"please press exit once again");
f.append(s);
destroyApp(false);
}
else
{
destroyApp(true);
notifyDestroyed();
}
}//end of try
catch(MIDletStateChangeException e)
{
b=true;
}
}

Interface RecordFilter
•
•
•
•
•
•
•
•
•
•
•
•
•
•

else if (c == start)
{
try
{
rec = RecordStore.openRecordStore(
"myRecordStore", true );
}
catch (Exception error)
{
a = new Alert("Error Creating",
error.toString(), null, AlertType.WARNING);
a.setTimeout(Alert.FOREVER);
d.setCurrent(a);
}
Interface RecordFilter
•
•

try
{

•
•
•
•
•
•
•
•
•
•
•
•
•

String s[] = {"Sita", "Rama", "Anand"};
for (int x = 0 ; x < 3; x++)
{
byte[] by = s[x].getBytes();
rec.addRecord(by, 0,by.length);
}//x,by are lost
}//s is lost
catch ( Exception error)
{
a = new Alert("Error Writing",error.toString(), null, AlertType.WARNING);
a.setTimeout(Alert.FOREVER);
d.setCurrent(a);
}
Interface RecordFilter
•
•
•
•
•
•

try
{
fil = new Filter("Rama");//searching element
r = rec.enumerateRecords(fil, null, false);//Record Enumeration is constructed,search element
//is stored in recordenumeration r
if (r.numRecords() > 0)//It returns no.of records in the RecordEnumeration

•
•
•
•
•
•
•
•
•
•
•
•
•
•

{
String s = new String(r.nextRecord());
a = new Alert("Reading", s,null, AlertType.WARNING);
a.setTimeout(Alert.FOREVER);
d.setCurrent(a);
}
}
catch (Exception error)
{
a = new Alert("Error Reading",
error.toString(), null, AlertType.WARNING);
a.setTimeout(Alert.FOREVER);
d.setCurrent(a);
}

Interface RecordFilter
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•

try
{
rec.closeRecordStore();
}
catch (Exception error)
{
a = new Alert("Error Closing",
error.toString(), null, AlertType.WARNING);
a.setTimeout(Alert.FOREVER);
d.setCurrent(a);
}
if (RecordStore.listRecordStores() != null)
{
try
{
RecordStore.deleteRecordStore("myRecordStore");
r.destroy();
fil.filterClose();
}
catch (Exception error)
{
a = new Alert("Error Removing",
error.toString(), null, AlertType.WARNING);
a.setTimeout(Alert.FOREVER);
d.setCurrent(a);
}
}
}
}
}

Interface RecordFilter
RecordFilter
•
•
•

//Filter is user defined class
class Filter implements RecordFilter
{

•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•

private String key = null;
private ByteArrayInputStream bai = null;
private DataInputStream dis = null;
//this constructor is called when enumerateRecords() method is called
public Filter(String key)
{
this.key = key.toLowerCase();
}
//matches() is called automatically after constructor
public boolean matches(byte[] by)
{
String s = new String(by).toLowerCase();//converted into string form frm byte, converted into lowercase
if (s!= null && s.indexOf(key) != -1)//Returns the index within this string of the first
//occurrence of the specified substring.
return true;
else
return false;
}

Interface RecordFilter
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•

public void filterClose()
{
try
{
if (bai != null)
{
bai.close();
}
if (dis != null)
{
dis.close();
}
}
catch ( Exception error)
{
}
}
}

Interface RecordFilter

Contenu connexe

En vedette (9)

Byte arrayoutputstream
Byte arrayoutputstreamByte arrayoutputstream
Byte arrayoutputstream
 
M rec enum
M rec enumM rec enum
M rec enum
 
Interface record comparator
Interface record comparatorInterface record comparator
Interface record comparator
 
Interface record enumeration
Interface record enumerationInterface record enumeration
Interface record enumeration
 
J2 me 1
J2 me 1J2 me 1
J2 me 1
 
Session4 J2ME Mobile Information Device Profile(MIDP) Events
Session4 J2ME Mobile Information Device Profile(MIDP) EventsSession4 J2ME Mobile Information Device Profile(MIDP) Events
Session4 J2ME Mobile Information Device Profile(MIDP) Events
 
Wr ex2
Wr ex2Wr ex2
Wr ex2
 
Record store
Record storeRecord store
Record store
 
Session6 J2ME High Level User Interface(HLUI) part1
Session6 J2ME High Level User Interface(HLUI) part1Session6 J2ME High Level User Interface(HLUI) part1
Session6 J2ME High Level User Interface(HLUI) part1
 

Similaire à Interface Record filter

PROGRAM 2 – Fraction Class Problem For this programming as.pdf
PROGRAM 2 – Fraction Class Problem For this programming as.pdfPROGRAM 2 – Fraction Class Problem For this programming as.pdf
PROGRAM 2 – Fraction Class Problem For this programming as.pdf
ezonesolutions
 
SeaJUG March 2004 - Groovy
SeaJUG March 2004 - GroovySeaJUG March 2004 - Groovy
SeaJUG March 2004 - Groovy
Ted Leung
 

Similaire à Interface Record filter (20)

Golang勉強会
Golang勉強会Golang勉強会
Golang勉強会
 
JavaZone 2014 - goto java;
JavaZone 2014 - goto java;JavaZone 2014 - goto java;
JavaZone 2014 - goto java;
 
PROGRAM 2 – Fraction Class Problem For this programming as.pdf
PROGRAM 2 – Fraction Class Problem For this programming as.pdfPROGRAM 2 – Fraction Class Problem For this programming as.pdf
PROGRAM 2 – Fraction Class Problem For this programming as.pdf
 
SeaJUG March 2004 - Groovy
SeaJUG March 2004 - GroovySeaJUG March 2004 - Groovy
SeaJUG March 2004 - Groovy
 
Deep Dumpster Diving
Deep Dumpster DivingDeep Dumpster Diving
Deep Dumpster Diving
 
Refactoring to Java 8 (Devoxx BE)
Refactoring to Java 8 (Devoxx BE)Refactoring to Java 8 (Devoxx BE)
Refactoring to Java 8 (Devoxx BE)
 
golang_getting_started.pptx
golang_getting_started.pptxgolang_getting_started.pptx
golang_getting_started.pptx
 
PHP 8: Process & Fixing Insanity
PHP 8: Process & Fixing InsanityPHP 8: Process & Fixing Insanity
PHP 8: Process & Fixing Insanity
 
Clean code and Code Smells
Clean code and Code SmellsClean code and Code Smells
Clean code and Code Smells
 
05 pig user defined functions (udfs)
05 pig user defined functions (udfs)05 pig user defined functions (udfs)
05 pig user defined functions (udfs)
 
The Ring programming language version 1.5 book - Part 5 of 31
The Ring programming language version 1.5 book - Part 5 of 31The Ring programming language version 1.5 book - Part 5 of 31
The Ring programming language version 1.5 book - Part 5 of 31
 
Session10 J2ME Record Management System
Session10 J2ME Record Management SystemSession10 J2ME Record Management System
Session10 J2ME Record Management System
 
Java 8 - Lambdas and much more
Java 8 - Lambdas and much moreJava 8 - Lambdas and much more
Java 8 - Lambdas and much more
 
Big Data Day LA 2015 - Compiling DSLs for Diverse Execution Environments by Z...
Big Data Day LA 2015 - Compiling DSLs for Diverse Execution Environments by Z...Big Data Day LA 2015 - Compiling DSLs for Diverse Execution Environments by Z...
Big Data Day LA 2015 - Compiling DSLs for Diverse Execution Environments by Z...
 
Vladymyr Bahrii Understanding polymorphism in C++ 16.11.17
Vladymyr Bahrii Understanding polymorphism in C++ 16.11.17Vladymyr Bahrii Understanding polymorphism in C++ 16.11.17
Vladymyr Bahrii Understanding polymorphism in C++ 16.11.17
 
Java 8
Java 8Java 8
Java 8
 
MongoDB 2.8 Replication Internals: Fitting it all together
MongoDB 2.8 Replication Internals: Fitting it all togetherMongoDB 2.8 Replication Internals: Fitting it all together
MongoDB 2.8 Replication Internals: Fitting it all together
 
Replication Internals: Fitting Everything Together
Replication Internals: Fitting Everything TogetherReplication Internals: Fitting Everything Together
Replication Internals: Fitting Everything Together
 
HashiCorp Vault Plugin Infrastructure
HashiCorp Vault Plugin InfrastructureHashiCorp Vault Plugin Infrastructure
HashiCorp Vault Plugin Infrastructure
 
First Failure Data Capture for your enterprise application with WebSphere App...
First Failure Data Capture for your enterprise application with WebSphere App...First Failure Data Capture for your enterprise application with WebSphere App...
First Failure Data Capture for your enterprise application with WebSphere App...
 

Plus de myrajendra (20)

Fundamentals
FundamentalsFundamentals
Fundamentals
 
Data type
Data typeData type
Data type
 
Hibernate example1
Hibernate example1Hibernate example1
Hibernate example1
 
Jdbc workflow
Jdbc workflowJdbc workflow
Jdbc workflow
 
2 jdbc drivers
2 jdbc drivers2 jdbc drivers
2 jdbc drivers
 
3 jdbc api
3 jdbc api3 jdbc api
3 jdbc api
 
4 jdbc step1
4 jdbc step14 jdbc step1
4 jdbc step1
 
Dao example
Dao exampleDao example
Dao example
 
Sessionex1
Sessionex1Sessionex1
Sessionex1
 
Internal
InternalInternal
Internal
 
3. elements
3. elements3. elements
3. elements
 
2. attributes
2. attributes2. attributes
2. attributes
 
1 introduction to html
1 introduction to html1 introduction to html
1 introduction to html
 
Headings
HeadingsHeadings
Headings
 
Forms
FormsForms
Forms
 
Css
CssCss
Css
 
Views
ViewsViews
Views
 
Views
ViewsViews
Views
 
Views
ViewsViews
Views
 
Starting jdbc
Starting jdbcStarting jdbc
Starting jdbc
 

Dernier

Dernier (20)

What's New in Teams Calling, Meetings and Devices April 2024
What's New in Teams Calling, Meetings and Devices April 2024What's New in Teams Calling, Meetings and Devices April 2024
What's New in Teams Calling, Meetings and Devices April 2024
 
Overview of Hyperledger Foundation
Overview of Hyperledger FoundationOverview of Hyperledger Foundation
Overview of Hyperledger Foundation
 
WSO2CONMay2024OpenSourceConferenceDebrief.pptx
WSO2CONMay2024OpenSourceConferenceDebrief.pptxWSO2CONMay2024OpenSourceConferenceDebrief.pptx
WSO2CONMay2024OpenSourceConferenceDebrief.pptx
 
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
 
Portal Kombat : extension du réseau de propagande russe
Portal Kombat : extension du réseau de propagande russePortal Kombat : extension du réseau de propagande russe
Portal Kombat : extension du réseau de propagande russe
 
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdfIntroduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
Introduction to FDO and How It works Applications _ Richard at FIDO Alliance.pdf
 
Syngulon - Selection technology May 2024.pdf
Syngulon - Selection technology May 2024.pdfSyngulon - Selection technology May 2024.pdf
Syngulon - Selection technology May 2024.pdf
 
Where to Learn More About FDO _ Richard at FIDO Alliance.pdf
Where to Learn More About FDO _ Richard at FIDO Alliance.pdfWhere to Learn More About FDO _ Richard at FIDO Alliance.pdf
Where to Learn More About FDO _ Richard at FIDO Alliance.pdf
 
ASRock Industrial FDO Solutions in Action for Industrial Edge AI _ Kenny at A...
ASRock Industrial FDO Solutions in Action for Industrial Edge AI _ Kenny at A...ASRock Industrial FDO Solutions in Action for Industrial Edge AI _ Kenny at A...
ASRock Industrial FDO Solutions in Action for Industrial Edge AI _ Kenny at A...
 
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdfSimplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
Simplified FDO Manufacturing Flow with TPMs _ Liam at Infineon.pdf
 
Google I/O Extended 2024 Warsaw
Google I/O Extended 2024 WarsawGoogle I/O Extended 2024 Warsaw
Google I/O Extended 2024 Warsaw
 
Designing for Hardware Accessibility at Comcast
Designing for Hardware Accessibility at ComcastDesigning for Hardware Accessibility at Comcast
Designing for Hardware Accessibility at Comcast
 
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
Choosing the Right FDO Deployment Model for Your Application _ Geoffrey at In...
 
AI mind or machine power point presentation
AI mind or machine power point presentationAI mind or machine power point presentation
AI mind or machine power point presentation
 
Long journey of Ruby Standard library at RubyKaigi 2024
Long journey of Ruby Standard library at RubyKaigi 2024Long journey of Ruby Standard library at RubyKaigi 2024
Long journey of Ruby Standard library at RubyKaigi 2024
 
BT & Neo4j _ How Knowledge Graphs help BT deliver Digital Transformation.pptx
BT & Neo4j _ How Knowledge Graphs help BT deliver Digital Transformation.pptxBT & Neo4j _ How Knowledge Graphs help BT deliver Digital Transformation.pptx
BT & Neo4j _ How Knowledge Graphs help BT deliver Digital Transformation.pptx
 
Enterprise Knowledge Graphs - Data Summit 2024
Enterprise Knowledge Graphs - Data Summit 2024Enterprise Knowledge Graphs - Data Summit 2024
Enterprise Knowledge Graphs - Data Summit 2024
 
Using IESVE for Room Loads Analysis - UK & Ireland
Using IESVE for Room Loads Analysis - UK & IrelandUsing IESVE for Room Loads Analysis - UK & Ireland
Using IESVE for Room Loads Analysis - UK & Ireland
 
WebRTC and SIP not just audio and video @ OpenSIPS 2024
WebRTC and SIP not just audio and video @ OpenSIPS 2024WebRTC and SIP not just audio and video @ OpenSIPS 2024
WebRTC and SIP not just audio and video @ OpenSIPS 2024
 
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdfHow Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
 

Interface Record filter

  • 2. • javax.microedition.rms • public interface RecordFilter Interface RecordFilter
  • 3. • This interface is used to searching in the recordstore. • Searching is also called as ‘Filtering’. • It specifies which records should be included in enumeration • Returns true if the candidate record is selected by the RecordFilter. For example: • RecordFilter f = new DateRecordFilter(); // class implements RecordFilter if (f.matches(recordStore.getRecord(theRecordID)) == true) DoSomethingUseful(theRecordID); Interface RecordFilter
  • 4. Searching Records: • Here, if records matches a search criteria are copied into the RecordEnumeration and unmatched records are not included in the RecordEnumeration. Interface RecordFilter
  • 5. • Record Searching(Filtering) is performed by using interface RecordFilter interface. • RecordFilter interface requires two parameters: (1) match() (2) filterclose() Interface RecordFilter
  • 6. Match() • It is a member method of Filter class • It is used to read columns from the record and uses logical operators to verify whether they are matching the search key or not. • It contains the searching logic Interface RecordFilter
  • 7. Logic for searching Step 1 • Create a filter class by implementing RecordFilter • Filter class should contain the logic for comparing records and search criteria Step 2: • Create an object of Filter class and create a record enumeration using its object: ie: MyFilter mf=new MyFilter(“searchKey”); Rec_enum=rec.enumerateRecords(filter,null,false); Interface RecordFilter
  • 8. • The enumerateRecords() method calls methods defined in the Filter class. Step 3: • Execute loop record enumeration and copy each record to a variable. Step 4: • Display the data in dialog box Step 5: • If any errors occurs display them Step 6: • Close and remove RecordEnumeration and record store Interface RecordFilter
  • 9. filterClose() • It is used to free the resources Interface RecordFilter
  • 10. • • • • • • • • • • • • • //searching program and exception handling import javax.microedition.rms.*; import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import java.io.*; public class SearchEx extends MIDlet implements CommandListener { private Display d; private Alert a; private Form f; private Command exit; private Command start; private RecordStore rec = null; • private RecordEnumeration r = null; • • • • • • • • • • • • • • private Filter fil = null; private boolean b; public SearchEx () { d = Display.getDisplay(this); b=false; exit = new Command("Exit", Command.SCREEN, 1); start = new Command("Start", Command.SCREEN, 1); f = new Form("Mixed RecordEnumeration", null); f.addCommand(exit); f.addCommand(start); f.setCommandListener(this); } Interface RecordFilter
  • 11. • • • • • • • • • • • • • • public void startApp() { d.setCurrent(f); } public void pauseApp() { } public void destroyApp( boolean un ) throws MIDletStateChangeException { if(un==false) { throw new MIDletStateChangeException(); } } Interface RecordFilter
  • 12. • • • • • • • • • • • • • • • • • • • • • • • • public void commandAction(Command c, Displayable dd) { if (c == exit) { try { if(b==false) { StringItem s=new StringItem(null,"please press exit once again"); f.append(s); destroyApp(false); } else { destroyApp(true); notifyDestroyed(); } }//end of try catch(MIDletStateChangeException e) { b=true; } } Interface RecordFilter
  • 13. • • • • • • • • • • • • • • else if (c == start) { try { rec = RecordStore.openRecordStore( "myRecordStore", true ); } catch (Exception error) { a = new Alert("Error Creating", error.toString(), null, AlertType.WARNING); a.setTimeout(Alert.FOREVER); d.setCurrent(a); } Interface RecordFilter
  • 14. • • try { • • • • • • • • • • • • • String s[] = {"Sita", "Rama", "Anand"}; for (int x = 0 ; x < 3; x++) { byte[] by = s[x].getBytes(); rec.addRecord(by, 0,by.length); }//x,by are lost }//s is lost catch ( Exception error) { a = new Alert("Error Writing",error.toString(), null, AlertType.WARNING); a.setTimeout(Alert.FOREVER); d.setCurrent(a); } Interface RecordFilter
  • 15. • • • • • • try { fil = new Filter("Rama");//searching element r = rec.enumerateRecords(fil, null, false);//Record Enumeration is constructed,search element //is stored in recordenumeration r if (r.numRecords() > 0)//It returns no.of records in the RecordEnumeration • • • • • • • • • • • • • • { String s = new String(r.nextRecord()); a = new Alert("Reading", s,null, AlertType.WARNING); a.setTimeout(Alert.FOREVER); d.setCurrent(a); } } catch (Exception error) { a = new Alert("Error Reading", error.toString(), null, AlertType.WARNING); a.setTimeout(Alert.FOREVER); d.setCurrent(a); } Interface RecordFilter
  • 16. • • • • • • • • • • • • • • • • • • • • • • • • • • • • • • try { rec.closeRecordStore(); } catch (Exception error) { a = new Alert("Error Closing", error.toString(), null, AlertType.WARNING); a.setTimeout(Alert.FOREVER); d.setCurrent(a); } if (RecordStore.listRecordStores() != null) { try { RecordStore.deleteRecordStore("myRecordStore"); r.destroy(); fil.filterClose(); } catch (Exception error) { a = new Alert("Error Removing", error.toString(), null, AlertType.WARNING); a.setTimeout(Alert.FOREVER); d.setCurrent(a); } } } } } Interface RecordFilter
  • 17. RecordFilter • • • //Filter is user defined class class Filter implements RecordFilter { • • • • • • • • • • • • • • • • • • private String key = null; private ByteArrayInputStream bai = null; private DataInputStream dis = null; //this constructor is called when enumerateRecords() method is called public Filter(String key) { this.key = key.toLowerCase(); } //matches() is called automatically after constructor public boolean matches(byte[] by) { String s = new String(by).toLowerCase();//converted into string form frm byte, converted into lowercase if (s!= null && s.indexOf(key) != -1)//Returns the index within this string of the first //occurrence of the specified substring. return true; else return false; } Interface RecordFilter
  • 18. • • • • • • • • • • • • • • • • • • public void filterClose() { try { if (bai != null) { bai.close(); } if (dis != null) { dis.close(); } } catch ( Exception error) { } } } Interface RecordFilter

Notes de l'éditeur

  1. http://improvejava.blogspot.in