The main purpose of this example is to show you :
Setup Example
The contact column string value will be converted automagically to a PhoneBookEntry using our custom converter PhoneBookEntryTypeConverter.
| setup |
phone book |
| contact |
| Fred, Flintstone, (123) 456-7890 |
| Barney, Rubble, (123) 321-7666 |
| Great, Gazoo, (123) 989-4455 |
List Of Example
We list all PhoneBookEntry found in the PhoneBook in the same order as it was added to the list.
| list of |
phone book |
| First Name |
Last Name |
Number |
| Fred |
Flintstone |
(123) 456-7890 |
| Barney |
Rubble |
(123) 321-7666 |
| Great |
Gazoo |
(123) 989-4455 |
Do With Example
We verify the contact information of Fred Flintstone.
| check |
that number of |
Fred |
|
Flintstone |
is |
(123) 456-7890 |
We update the phone number of Fred Flintstone.
| accept |
update number of |
Fred |
|
Flintstone |
to |
(123) 567-8904 |
We verify that the update of the phone number of Fred Flintstone is correct.
| check |
that number of |
Fred |
|
Flintstone |
is |
(123) 567-8904 |
We verify that Wilma Flinstone is not already in the list of contact.
| check |
that number of |
Wilma |
|
Flintstone |
is |
nothing |
We try to update the contact Wilma Flintstone that do not exist (the check confirms that Wilma Flintstone in not in the list).
| reject |
update number of |
Wilma |
|
Flintstone |
to |
(123) 567-8904 |
We inserts Wilma Flintstone in the list.
| insert |
Wilma |
|
Flintstone |
with number |
(123) 567-8904 |
Subset Of Example
We confirm using the subset of interpreter that Wilma Flintstone now belong to our list of contact.
| subset of |
phone book entries |
| First Name |
Last Name |
Number |
| Wilma |
Flintstone |
(123) 567-8904 |
Source Code
PhoneBook.java
package com.greenpepper.confluence.demo.phonebook;
import java.util.ArrayList;
import java.util.List;
public class PhoneBook
{
private List<PhoneBookEntry> entries = new ArrayList<PhoneBookEntry>();
public void add(PhoneBookEntry entry)
{
entries.add(entry);
}
public List<PhoneBookEntry> getEntries()
{
return entries;
}
public String findNumber(String firstName, String lastName)
{
PhoneBookEntry entry = findEntry(firstName, lastName);
return entry == null ? null : entry.getNumber();
}
public void updateNumber(String firstName, String lastName, String number)
{
PhoneBookEntry entry = findEntry(firstName, lastName);
if (entry == null)
{
throw new IllegalArgumentException("Entry not found");
}
entry.setNumber(number);
}
private PhoneBookEntry findEntry(String firstName, String lastName)
{
for (PhoneBookEntry entry : entries)
{
if (entry.getFirstName().equalsIgnoreCase(firstName)
&& entry.getLastName().equalsIgnoreCase(lastName))
{
return entry;
}
}
return null;
}
}
PhoneBookSystemUnderDevelopment.java
package com.greenpepper.confluence.demo.phonebook;
import com.greenpepper.TypeConversion;
import com.greenpepper.reflect.Fixture;
import com.greenpepper.systemunderdevelopment.DefaultSystemUnderDevelopment;
public class PhoneBookSystemUnderDevelopment
extends DefaultSystemUnderDevelopment
{
private Fixture phoneBookFixture;
static
{
TypeConversion.register(new PhoneBookEntryTypeConverter());
}
public PhoneBookSystemUnderDevelopment()
{
super();
addImport(PhoneBookSystemUnderDevelopment.class.getPackage().getName());
}
@Override
public Fixture getFixture(String name, String... params)
throws Throwable
{
if (phoneBookFixture == null)
{
phoneBookFixture = super.getFixture(name, params);
}
return phoneBookFixture;
}
}
PhoneBookEntry.java
package com.greenpepper.confluence.demo.phonebook;
public class PhoneBookEntry
{
private String firstName;
private String lastName;
private String number;
public PhoneBookEntry(String firstName, String lastName, String number)
{
this.firstName = firstName;
this.lastName = lastName;
this.number = number;
}
public String getFirstName()
{
return firstName;
}
public void setFirstName(String firstName)
{
this.firstName = firstName;
}
public String getLastName()
{
return lastName;
}
public void setLastName(String lastName)
{
this.lastName = lastName;
}
public String getNumber()
{
return number;
}
public void setNumber(String number)
{
this.number = number;
}
}
PhoneBookEntryTypeConverter.java
package com.greenpepper.confluence.demo.phonebook;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.greenpepper.converter.AbstractTypeConverter;
public class PhoneBookEntryTypeConverter
extends AbstractTypeConverter
{
private final static Pattern entryPattern =
Pattern.compile("([\\w- ]+)\\,\\s?([\\w- ]+)\\,\\s?(\\(\\d{3}\\)\\s?\\d{3}-\\d{4})");
public boolean canConvertTo(Class type)
{
return PhoneBookEntry.class.isAssignableFrom(type);
}
protected Object doConvert(String value)
{
Matcher matcher = entryPattern.matcher(value);
if (matcher.find())
{
String firstName = matcher.group(1);
String lastName = matcher.group(2);
String number = matcher.group(3);
return new PhoneBookEntry(firstName, lastName, number);
}
String[] split = value.split(",");
return new PhoneBookEntry(split[0].trim(), split[1].trim(), split[2].trim());
}
}
PhoneBookFixture.java
package com.greenpepper.confluence.demo.phonebook;
import java.util.List;
import com.greenpepper.reflect.EnterRow;
public class PhoneBookFixture
{
private PhoneBook phoneBook;
private PhoneBookEntry contact;
public PhoneBookFixture()
{
phoneBook = new PhoneBook();
}
public PhoneBookEntry getContact()
{
return contact;
}
public void setContact(PhoneBookEntry contact)
{
this.contact = contact;
}
public List<PhoneBookEntry> query()
{
return phoneBook.getEntries();
}
@EnterRow
public void insertNewContact()
{
phoneBook.add(getContact());
}
public boolean insertWithNumber(String firstName, String lastName, String number)
{
try
{
phoneBook.add(new PhoneBookEntry(firstName, lastName, number));
return true;
}
catch (Exception e)
{
return false;
}
}
public String thatNumberOfIs(String firstName, String lastName)
{
return phoneBook.findNumber(firstName, lastName);
}
public boolean updateNumberOfTo(String firstName, String lastName, String number)
{
try
{
phoneBook.updateNumber(firstName, lastName, number);
return true;
}
catch (Exception e)
{
return false;
}
}
}