*/
package org.mxchange.jcountry.data;
+import java.text.MessageFormat;
+import java.util.GregorianCalendar;
import java.util.List;
import javax.ejb.Singleton;
import javax.ejb.Startup;
+import javax.persistence.NoResultException;
import javax.persistence.Query;
import org.mxchange.jcoreee.database.BaseDatabaseBean;
+import org.mxchange.jcountry.exceptions.CountryAlreadyAddedException;
/**
* A singleton bean for country informations
*/
private static final long serialVersionUID = 15_846_983_298_691_207L;
+ @Override
+ public void addCountry (final Country country) throws CountryAlreadyAddedException {
+ // Is it already there?
+ if (null == country) {
+ // Throw NPE
+ throw new NullPointerException("country is null"); //NOI18N
+ } else if (country.getCountryCode().isEmpty()) {
+ // Code is not set
+ throw new IllegalArgumentException("country.countryCode is empty"); //NOI18N
+ } else if (country.getCountryI18nkey().isEmpty()) {
+ // I18n key is not set
+ throw new IllegalArgumentException("country.countryI18nKey is empty"); //NOI18N
+ } else if (country.getCountryId() != null) {
+ // Should be null
+ throw new IllegalArgumentException(MessageFormat.format("country.countryId is not null ({0})", country.getCountryId())); //NOI18N
+ } else if (this.isCountryAdded(country)) {
+ // Yes, then abort here
+ throw new CountryAlreadyAddedException(country);
+ }
+
+ // Add timestamp
+ country.setCountryEntryCreated(new GregorianCalendar());
+
+ // It is not added, so persist it
+ this.getEntityManager().persist(country);
+
+ // Flush it to get id number back, maybe it is directly needed?
+ this.getEntityManager().flush();
+ }
+
@Override
@SuppressWarnings ("unchecked")
public List<Country> allCountries () {
return query.getResultList();
}
+ /**
+ * Checks whether given country is already added by i18n key or country
+ * code, what comes first.
+ * <p>
+ * @param country Country instance to check
+ * <p>
+ * @return Whether the country was found
+ */
+ private boolean isCountryAdded (final Country country) {
+ if (null == country) {
+ // Throw NPE
+ throw new NullPointerException("country is null"); //NOI18N
+ } else if (country.getCountryCode().isEmpty()) {
+ // Code is not set
+ throw new IllegalArgumentException("country.countryCode is empty"); //NOI18N
+ } else if (country.getCountryI18nkey().isEmpty()) {
+ // I18n key is not set
+ throw new IllegalArgumentException("country.countryI18nKey is empty"); //NOI18N
+ } else if (country.getCountryId() != null) {
+ // Should be null
+ throw new IllegalArgumentException(MessageFormat.format("country.countryId is not null ({0})", country.getCountryId())); //NOI18N
+ }
+
+ // Default is not found
+ boolean isAdded = false;
+
+ // Get query instance
+ Query query = this.getEntityManager().createNamedQuery("SearchCountryByCodeI18nKey", CountryData.class); //NOI18N
+
+ // Assign all parameters
+ query.setParameter("code", country.getCountryCode()); //NOI18N
+ query.setParameter("key", country.getCountryI18nkey()); //NOI18N
+
+ // Try to get a single result
+ try {
+ // Get single result
+ Country foundCountry = (Country) query.getSingleResult();
+
+ // Found it?
+ isAdded = (foundCountry instanceof Country);
+ } catch (final NoResultException ex) {
+ // Not found, don't log this
+ }
+
+ // Return result
+ return isAdded;
+ }
+
}