Author: lfryc(a)redhat.com
Date: 2010-11-03 10:24:39 -0400 (Wed, 03 Nov 2010)
New Revision: 19911
Added:
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/model/tree/
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/model/tree/CompactDisc.java
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/model/tree/CompactDiscXmlDescriptor.java
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/model/tree/Company.java
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/model/tree/Country.java
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/model/tree/NamedNode.java
modules/tests/metamer/trunk/application/src/main/resources/org/richfaces/tests/metamer/model/compact-discs.xml
Modified:
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/bean/Model.java
Log:
added model for CompactDisc (suitable for tree structure testing) - refactored Model class
to be more generic
Modified:
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/bean/Model.java
===================================================================
---
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/bean/Model.java 2010-11-03
13:42:19 UTC (rev 19910)
+++
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/bean/Model.java 2010-11-03
14:24:39 UTC (rev 19911)
@@ -22,14 +22,11 @@
package org.richfaces.tests.metamer.bean;
-import org.richfaces.tests.metamer.model.*;
-
import java.net.URL;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
-import javax.annotation.PostConstruct;
import javax.faces.FacesException;
import javax.faces.bean.ApplicationScoped;
@@ -39,13 +36,17 @@
import javax.xml.bind.JAXBException;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.richfaces.tests.metamer.model.Capital;
+import org.richfaces.tests.metamer.model.Employee;
+import org.richfaces.tests.metamer.model.tree.CompactDiscXmlDescriptor;
+
/**
* Application scoped managed bean holding models usable e.g. in iteration components.
- *
- * @author Exadel, <a href="mailto:ppitonak@redhat.com">Pavol
Pitonak</a>
+ *
+ * @author Exadel
+ * @author <a href="mailto:ppitonak@redhat.com">Pavol Pitonak</a>
+ * @author <a href="mailto:lfryc@redhat.com">Lukas Fryc</a>
* @version $Revision$
*/
@ManagedBean
@@ -56,58 +57,57 @@
private List<Employee> employeesList;
private Set<String> jobTitles;
private List<SelectItem> jobTitlesSelectItems;
- private Logger logger;
+ private List<CompactDiscXmlDescriptor> compactDiscList;
- @PostConstruct
- public void init() {
- logger = LoggerFactory.getLogger(getClass());
- }
-
- @XmlRootElement(name = "capitals")
- private static final class CapitalsHolder {
-
- private List<Capital> capitals;
-
- @XmlElement(name = "capital")
- public List<Capital> getCapitals() {
- return capitals;
+ /**
+ * Model containing US states, their capitals and timezones.
+ *
+ * @return list of US states and their capitals
+ */
+ public synchronized List<Capital> getCapitals() {
+ if (capitalsList == null) {
+ try {
+ capitalsList = unmarshallCapitals();
+ } catch (JAXBException e) {
+ throw new FacesException(e.getMessage(), e);
+ }
}
- public void setCapitals(List<Capital> capitals) {
- this.capitals = capitals;
- }
+ return capitalsList;
}
- @XmlRootElement(name = "employees")
- private static final class EmployeesHolder {
-
- private List<Employee> employees;
-
- @XmlElement(name = "employee")
- public List<Employee> getEmployees() {
- return employees;
+ /**
+ * Model containing employees. Can be used to test various components inside
iteration components.
+ *
+ * @return list of employees
+ */
+ public synchronized List<Employee> getEmployees() {
+ if (employeesList == null) {
+ try {
+ employeesList = unmarshallEmployees();
+ } catch (JAXBException e) {
+ throw new FacesException(e.getMessage(), e);
+ }
}
- public void setEmployees(List<Employee> employees) {
- this.employees = employees;
- }
+ return employeesList;
}
/**
- * Model containing US states, their capitals and timezones.
+ * Model containing compact discs. Suitable to be used in Tree-structured
components.
*
- * @return list of US states and their capitals
+ * @return list of compact discs
*/
- public synchronized List<Capital> getCapitals() {
- if (capitalsList == null) {
+ public synchronized List<CompactDiscXmlDescriptor> getCompactDiscs() {
+ if (compactDiscList == null) {
try {
- capitalsList = unmarshallCapitals();
+ compactDiscList = unmarshallCompactDiscs();
} catch (JAXBException e) {
throw new FacesException(e.getMessage(), e);
}
}
- return capitalsList;
+ return compactDiscList;
}
/**
@@ -117,41 +117,83 @@
* @throws JAXBException
* if any unexpected errors occurs during unmarshalling
*/
- @SuppressWarnings("restriction")
public static final List<Capital> unmarshallCapitals() throws JAXBException {
+ return unmarshall(CapitalsHolder.class,
"org/richfaces/tests/metamer/model/capitals.xml");
+ }
+
+ public static final List<Employee> unmarshallEmployees() throws JAXBException
{
+ return unmarshall(EmployeesHolder.class,
"org/richfaces/tests/metamer/model/employees.xml");
+ }
+
+ public static final List<CompactDiscXmlDescriptor> unmarshallCompactDiscs()
throws JAXBException {
+ return unmarshall(CompactDiscsHolder.class,
"org/richfaces/tests/metamer/model/compact-discs.xml");
+ }
+
+ @SuppressWarnings("unchecked")
+ static final <R, T extends ListHolder<R>> List<R>
unmarshall(Class<T> rootElementType, String resourceURL)
+ throws JAXBException {
ClassLoader ccl = Thread.currentThread().getContextClassLoader();
- URL resource =
ccl.getResource("org/richfaces/tests/metamer/model/capitals.xml");
- JAXBContext context = JAXBContext.newInstance(CapitalsHolder.class);
- CapitalsHolder capitalsHolder = (CapitalsHolder)
context.createUnmarshaller().unmarshal(resource);
- return capitalsHolder.getCapitals();
+ URL resource = ccl.getResource(resourceURL);
+ JAXBContext context = JAXBContext.newInstance(rootElementType);
+ T holder = (T) context.createUnmarshaller().unmarshal(resource);
+ return holder.getList();
}
- /**
- * Model containing employees. Can be used to test various components inside
iteration components.
- *
- * @return list of employees
- */
- public synchronized List<Employee> getEmployees() {
- if (employeesList == null) {
- ClassLoader ccl = Thread.currentThread().getContextClassLoader();
- URL resource =
ccl.getResource("org/richfaces/tests/metamer/model/employees.xml");
+ private static interface ListHolder<T> {
- JAXBContext context;
- try {
- context = JAXBContext.newInstance(EmployeesHolder.class);
- EmployeesHolder employeesHolder = (EmployeesHolder)
context.createUnmarshaller().unmarshal(resource);
- employeesList = employeesHolder.getEmployees();
- } catch (JAXBException e) {
- throw new FacesException(e.getMessage(), e);
- }
+ public List<T> getList();
+
+ public void setList(List<T> list);
+ }
+
+ @XmlRootElement(name = "capitals")
+ private static final class CapitalsHolder implements ListHolder<Capital> {
+
+ private List<Capital> list;
+
+ @XmlElement(name = "capital")
+ public List<Capital> getList() {
+ return list;
}
- return employeesList;
+ public void setList(List<Capital> list) {
+ this.list = list;
+ }
}
+ @XmlRootElement(name = "employees")
+ private static final class EmployeesHolder implements ListHolder<Employee> {
+
+ private List<Employee> list;
+
+ @XmlElement(name = "employee")
+ public List<Employee> getList() {
+ return list;
+ }
+
+ public void setList(List<Employee> list) {
+ this.list = list;
+ }
+ }
+
+ @XmlRootElement(name = "CATALOG")
+ private static final class CompactDiscsHolder implements
ListHolder<CompactDiscXmlDescriptor> {
+
+ private List<CompactDiscXmlDescriptor> list;
+
+ @XmlElement(name = "CD")
+ public List<CompactDiscXmlDescriptor> getList() {
+ return list;
+ }
+
+ public void setList(List<CompactDiscXmlDescriptor> list) {
+ this.list = list;
+ }
+ }
+
/**
* Model containing various job titles, e.g. CEO, President, Director.
- *
+ *
* @return set of job titles
*/
public synchronized Set<String> getJobTitles() {
@@ -167,7 +209,7 @@
/**
* Model containing select items with various job titles.
- *
+ *
* @return set of job titles
*/
public synchronized List<SelectItem> getJobTitlesSelectItems() {
Added:
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/model/tree/CompactDisc.java
===================================================================
---
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/model/tree/CompactDisc.java
(rev 0)
+++
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/model/tree/CompactDisc.java 2010-11-03
14:24:39 UTC (rev 19911)
@@ -0,0 +1,96 @@
+package org.richfaces.tests.metamer.model.tree;
+
+import java.util.Enumeration;
+
+import javax.swing.tree.TreeNode;
+
+public class CompactDisc extends NamedNode implements TreeNode {
+ private Company company;
+ private String artist;
+ private String title;
+ private float price;
+ private int year;
+
+ public CompactDisc() {
+ this.setType("cd");
+ }
+
+ public CompactDisc(String title, String artist, Company company, float price, int
year) {
+ super();
+ this.setType("cd");
+ this.company = company;
+ this.artist = artist;
+ this.title = title;
+ this.price = price;
+ this.year = year;
+ }
+
+ public TreeNode getChildAt(int childIndex) {
+ return null;
+ }
+
+ public int getChildCount() {
+ return 0;
+ }
+
+ public TreeNode getParent() {
+ return company;
+ }
+
+ public int getIndex(TreeNode node) {
+ return 0;
+ }
+
+ public boolean getAllowsChildren() {
+ return false;
+ }
+
+ public boolean isLeaf() {
+ return true;
+ }
+
+ public Enumeration<TreeNode> children() {
+ return new Enumeration<TreeNode>() {
+
+ public boolean hasMoreElements() {
+ return false;
+ }
+
+ public TreeNode nextElement() {
+ return null;
+ }
+ };
+ }
+
+ public String getArtist() {
+ return artist;
+ }
+
+ public void setArtist(String artist) {
+ this.artist = artist;
+ }
+
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ public float getPrice() {
+ return price;
+ }
+
+ public void setPrice(float price) {
+ this.price = price;
+ }
+
+ public int getYear() {
+ return year;
+ }
+
+ public void setYear(int year) {
+ this.year = year;
+ }
+}
Added:
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/model/tree/CompactDiscXmlDescriptor.java
===================================================================
---
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/model/tree/CompactDiscXmlDescriptor.java
(rev 0)
+++
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/model/tree/CompactDiscXmlDescriptor.java 2010-11-03
14:24:39 UTC (rev 19911)
@@ -0,0 +1,69 @@
+package org.richfaces.tests.metamer.model.tree;
+
+import java.io.Serializable;
+
+import javax.xml.bind.annotation.XmlElement;
+
+public class CompactDiscXmlDescriptor implements Serializable {
+ private String artist;
+ private String title;
+ private String country;
+ private String company;
+ private float price;
+ private int year;
+
+ @XmlElement(name = "ARTIST")
+ public String getArtist() {
+ return artist;
+ }
+
+ public void setArtist(String artist) {
+ this.artist = artist;
+ }
+
+ @XmlElement(name = "TITLE")
+ public String getTitle() {
+ return title;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ @XmlElement(name = "COUNTRY")
+ public String getCountry() {
+ return country;
+ }
+
+ public void setCountry(String country) {
+ this.country = country;
+ }
+
+ @XmlElement(name = "COMPANY")
+ public String getCompany() {
+ return company;
+ }
+
+ public void setCompany(String company) {
+ this.company = company;
+ }
+
+ @XmlElement(name = "PRICE")
+ public float getPrice() {
+ return price;
+ }
+
+ public void setPrice(float price) {
+ this.price = price;
+ }
+
+ @XmlElement(name = "YEAR")
+ public int getYear() {
+ return year;
+ }
+
+ public void setYear(int year) {
+ this.year = year;
+ }
+
+}
Added:
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/model/tree/Company.java
===================================================================
---
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/model/tree/Company.java
(rev 0)
+++
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/model/tree/Company.java 2010-11-03
14:24:39 UTC (rev 19911)
@@ -0,0 +1,73 @@
+package org.richfaces.tests.metamer.model.tree;
+
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.List;
+
+import javax.swing.tree.TreeNode;
+
+import com.google.common.collect.Iterators;
+
+public class Company extends NamedNode implements TreeNode {
+ private String name;
+ private List<CompactDisc> compactDiscs = new ArrayList<CompactDisc>();
+
+ private Country country;
+
+ public Company() {
+ this.setType("company");
+ }
+
+ public TreeNode getChildAt(int childIndex) {
+ return compactDiscs.get(childIndex);
+ }
+
+ public int getChildCount() {
+ return compactDiscs.size();
+ }
+
+ public TreeNode getParent() {
+ return country;
+ }
+
+ public void setParent(Country country) {
+ this.country = country;
+ }
+
+ public int getIndex(TreeNode node) {
+ return compactDiscs.indexOf(node);
+ }
+
+ public boolean getAllowsChildren() {
+ return true;
+ }
+
+ public boolean isLeaf() {
+ return compactDiscs.isEmpty();
+ }
+
+ public Enumeration children() {
+ return Iterators.asEnumeration(compactDiscs.iterator());
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Country getCountry() {
+ return country;
+ }
+
+ public void setCountry(Country country) {
+ this.country = country;
+ }
+
+ public List<CompactDisc> getCds() {
+ return compactDiscs;
+ }
+
+}
Added:
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/model/tree/Country.java
===================================================================
---
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/model/tree/Country.java
(rev 0)
+++
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/model/tree/Country.java 2010-11-03
14:24:39 UTC (rev 19911)
@@ -0,0 +1,60 @@
+package org.richfaces.tests.metamer.model.tree;
+
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.List;
+
+import javax.swing.tree.TreeNode;
+
+import com.google.common.collect.Iterators;
+
+public class Country extends NamedNode implements TreeNode {
+
+ private String name;
+ private List<Company> companies = new ArrayList<Company>();
+
+ public Country() {
+ this.setType("country");
+ }
+
+ public TreeNode getChildAt(int childIndex) {
+ return companies.get(childIndex);
+ }
+
+ public int getChildCount() {
+ return companies.size();
+ }
+
+ public TreeNode getParent() {
+ return null;
+ }
+
+ public int getIndex(TreeNode node) {
+ return companies.indexOf(node);
+ }
+
+ public boolean getAllowsChildren() {
+ return true;
+ }
+
+ public boolean isLeaf() {
+ return companies.isEmpty();
+ }
+
+ public Enumeration<Company> children() {
+ return Iterators.asEnumeration(companies.iterator());
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public List<Company> getCompanies() {
+ return companies;
+ }
+
+}
Added:
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/model/tree/NamedNode.java
===================================================================
---
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/model/tree/NamedNode.java
(rev 0)
+++
modules/tests/metamer/trunk/application/src/main/java/org/richfaces/tests/metamer/model/tree/NamedNode.java 2010-11-03
14:24:39 UTC (rev 19911)
@@ -0,0 +1,13 @@
+package org.richfaces.tests.metamer.model.tree;
+
+public class NamedNode {
+ private String type;
+
+ public String getType() {
+ return type;
+ }
+
+ public void setType(String type) {
+ this.type = type;
+ }
+}
Added:
modules/tests/metamer/trunk/application/src/main/resources/org/richfaces/tests/metamer/model/compact-discs.xml
===================================================================
---
modules/tests/metamer/trunk/application/src/main/resources/org/richfaces/tests/metamer/model/compact-discs.xml
(rev 0)
+++
modules/tests/metamer/trunk/application/src/main/resources/org/richfaces/tests/metamer/model/compact-discs.xml 2010-11-03
14:24:39 UTC (rev 19911)
@@ -0,0 +1,211 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<CATALOG>
+ <CD>
+ <TITLE>Empire Burlesque</TITLE>
+ <ARTIST>Bob Dylan</ARTIST>
+ <COUNTRY>USA</COUNTRY>
+ <COMPANY>Columbia</COMPANY>
+ <PRICE>10.90</PRICE>
+ <YEAR>1985</YEAR>
+ </CD>
+ <CD>
+ <TITLE>Hide your heart</TITLE>
+ <ARTIST>Bonnie Tylor</ARTIST>
+ <COUNTRY>United Kingdom</COUNTRY>
+ <COMPANY>CBS Records</COMPANY>
+ <PRICE>9.90</PRICE>
+ <YEAR>1988</YEAR>
+ </CD>
+ <CD>
+ <TITLE>Greatest Hits</TITLE>
+ <ARTIST>Dolly Parton</ARTIST>
+ <COUNTRY>USA</COUNTRY>
+ <COMPANY>RCA</COMPANY>
+ <PRICE>9.90</PRICE>
+ <YEAR>1982</YEAR>
+ </CD>
+ <CD>
+ <TITLE>Still got the blues</TITLE>
+ <ARTIST>Gary More</ARTIST>
+ <COUNTRY>United Kingdom</COUNTRY>
+ <COMPANY>Virgin redords</COMPANY>
+ <PRICE>10.20</PRICE>
+ <YEAR>1990</YEAR>
+ </CD>
+ <CD>
+ <TITLE>Eros</TITLE>
+ <ARTIST>Eros Ramazzotti</ARTIST>
+ <COUNTRY>Europe</COUNTRY>
+ <COMPANY>BMG</COMPANY>
+ <PRICE>9.90</PRICE>
+ <YEAR>1997</YEAR>
+ </CD>
+ <CD>
+ <TITLE>One night only</TITLE>
+ <ARTIST>Bee Gees</ARTIST>
+ <COUNTRY>United Kingdom</COUNTRY>
+ <COMPANY>Polydor</COMPANY>
+ <PRICE>10.90</PRICE>
+ <YEAR>1998</YEAR>
+ </CD>
+ <CD>
+ <TITLE>Sylvias Mother</TITLE>
+ <ARTIST>Dr.Hook</ARTIST>
+ <COUNTRY>United Kingdom</COUNTRY>
+ <COMPANY>CBS</COMPANY>
+ <PRICE>8.10</PRICE>
+ <YEAR>1973</YEAR>
+ </CD>
+ <CD>
+ <TITLE>Maggie May</TITLE>
+ <ARTIST>Rod Stewart</ARTIST>
+ <COUNTRY>United Kingdom</COUNTRY>
+ <COMPANY>Pickwick</COMPANY>
+ <PRICE>8.50</PRICE>
+ <YEAR>1990</YEAR>
+ </CD>
+ <CD>
+ <TITLE>Romanza</TITLE>
+ <ARTIST>Andrea Bocelli</ARTIST>
+ <COUNTRY>Europe</COUNTRY>
+ <COMPANY>Polydor</COMPANY>
+ <PRICE>10.80</PRICE>
+ <YEAR>1996</YEAR>
+ </CD>
+ <CD>
+ <TITLE>When a man loves a woman</TITLE>
+ <ARTIST>Percy Sledge</ARTIST>
+ <COUNTRY>USA</COUNTRY>
+ <COMPANY>Atlantic</COMPANY>
+ <PRICE>8.70</PRICE>
+ <YEAR>1987</YEAR>
+ </CD>
+ <CD>
+ <TITLE>Black angel</TITLE>
+ <ARTIST>Savage Rose</ARTIST>
+ <COUNTRY>Europe</COUNTRY>
+ <COMPANY>Mega</COMPANY>
+ <PRICE>10.90</PRICE>
+ <YEAR>1995</YEAR>
+ </CD>
+ <CD>
+ <TITLE>1999 Grammy Nominees</TITLE>
+ <ARTIST>Many</ARTIST>
+ <COUNTRY>USA</COUNTRY>
+ <COMPANY>Grammy</COMPANY>
+ <PRICE>10.20</PRICE>
+ <YEAR>1999</YEAR>
+ </CD>
+ <CD>
+ <TITLE>For the good times</TITLE>
+ <ARTIST>Kenny Rogers</ARTIST>
+ <COUNTRY>United Kingdom</COUNTRY>
+ <COMPANY>Mucik Master</COMPANY>
+ <PRICE>8.70</PRICE>
+ <YEAR>1995</YEAR>
+ </CD>
+ <CD>
+ <TITLE>Big Willie style</TITLE>
+ <ARTIST>Will Smith</ARTIST>
+ <COUNTRY>USA</COUNTRY>
+ <COMPANY>Columbia</COMPANY>
+ <PRICE>9.90</PRICE>
+ <YEAR>1997</YEAR>
+ </CD>
+ <CD>
+ <TITLE>Tupelo Honey</TITLE>
+ <ARTIST>Van Morrison</ARTIST>
+ <COUNTRY>United Kingdom</COUNTRY>
+ <COMPANY>Polydor</COMPANY>
+ <PRICE>8.20</PRICE>
+ <YEAR>1971</YEAR>
+ </CD>
+ <CD>
+ <TITLE>Soulsville</TITLE>
+ <ARTIST>Jorn Hoel</ARTIST>
+ <COUNTRY>Norway</COUNTRY>
+ <COMPANY>WEA</COMPANY>
+ <PRICE>7.90</PRICE>
+ <YEAR>1996</YEAR>
+ </CD>
+ <CD>
+ <TITLE>The very best of</TITLE>
+ <ARTIST>Cat Stevens</ARTIST>
+ <COUNTRY>United Kingdom</COUNTRY>
+ <COMPANY>Island</COMPANY>
+ <PRICE>8.90</PRICE>
+ <YEAR>1990</YEAR>
+ </CD>
+ <CD>
+ <TITLE>Stop</TITLE>
+ <ARTIST>Sam Brown</ARTIST>
+ <COUNTRY>United Kingdom</COUNTRY>
+ <COMPANY>A and M</COMPANY>
+ <PRICE>8.90</PRICE>
+ <YEAR>1988</YEAR>
+ </CD>
+ <CD>
+ <TITLE>Bridge of Spies</TITLE>
+ <ARTIST>T`Pau</ARTIST>
+ <COUNTRY>United Kingdom</COUNTRY>
+ <COMPANY>Siren</COMPANY>
+ <PRICE>7.90</PRICE>
+ <YEAR>1987</YEAR>
+ </CD>
+ <CD>
+ <TITLE>Private Dancer</TITLE>
+ <ARTIST>Tina Turner</ARTIST>
+ <COUNTRY>United Kingdom</COUNTRY>
+ <COMPANY>Capitol</COMPANY>
+ <PRICE>8.90</PRICE>
+ <YEAR>1983</YEAR>
+ </CD>
+ <CD>
+ <TITLE>Midt om natten</TITLE>
+ <ARTIST>Kim Larsen</ARTIST>
+ <COUNTRY>Europe</COUNTRY>
+ <COMPANY>Medley</COMPANY>
+ <PRICE>7.80</PRICE>
+ <YEAR>1983</YEAR>
+ </CD>
+ <CD>
+ <TITLE>Pavarotti Gala Concert</TITLE>
+ <ARTIST>Luciano Pavarotti</ARTIST>
+ <COUNTRY>United Kingdom</COUNTRY>
+ <COMPANY>DECCA</COMPANY>
+ <PRICE>9.90</PRICE>
+ <YEAR>1991</YEAR>
+ </CD>
+ <CD>
+ <TITLE>The dock of the bay</TITLE>
+ <ARTIST>Otis Redding</ARTIST>
+ <COUNTRY>USA</COUNTRY>
+ <COMPANY>Atlantic</COMPANY>
+ <PRICE>7.90</PRICE>
+ <YEAR>1987</YEAR>
+ </CD>
+ <CD>
+ <TITLE>Picture book</TITLE>
+ <ARTIST>Simply Red</ARTIST>
+ <COUNTRY>Europe</COUNTRY>
+ <COMPANY>Elektra</COMPANY>
+ <PRICE>7.20</PRICE>
+ <YEAR>1985</YEAR>
+ </CD>
+ <CD>
+ <TITLE>Red</TITLE>
+ <ARTIST>The Communards</ARTIST>
+ <COUNTRY>United Kingdom</COUNTRY>
+ <COMPANY>London</COMPANY>
+ <PRICE>7.80</PRICE>
+ <YEAR>1987</YEAR>
+ </CD>
+ <CD>
+ <TITLE>Unchain my heart</TITLE>
+ <ARTIST>Joe Cocker</ARTIST>
+ <COUNTRY>USA</COUNTRY>
+ <COMPANY>EMI</COMPANY>
+ <PRICE>8.20</PRICE>
+ <YEAR>1987</YEAR>
+ </CD>
+</CATALOG>
Show replies by date