Skip to content

Commit

Permalink
Merge branch 'develop' of https://github.com/geonetwork/core-geonetwork
Browse files Browse the repository at this point in the history
… into develop
  • Loading branch information
josegar74 committed Nov 29, 2013
2 parents 7711b3b + 08e10be commit 7d36d71
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 12 deletions.
25 changes: 19 additions & 6 deletions domain/src/main/java/org/fao/geonet/domain/GeonetEntity.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import org.springframework.beans.BeanWrapperImpl;

import javax.annotation.Nonnull;
import javax.persistence.Embeddable;
import java.beans.PropertyDescriptor;
import java.util.List;
import java.util.Map;
Expand Down Expand Up @@ -32,17 +33,21 @@ public class GeonetEntity {
*/
@Nonnull
public Element asXml() {
return asXml(this);
}

private static Element asXml(Object obj) {
Element record = new Element(RECORD_EL_NAME);
BeanWrapperImpl wrapper = new BeanWrapperImpl(this);
BeanWrapperImpl wrapper = new BeanWrapperImpl(obj);

for (PropertyDescriptor desc : wrapper.getPropertyDescriptors()) {
try {
if (desc.getReadMethod() != null && desc.getReadMethod().getDeclaringClass() == getClass()) {
if (desc.getReadMethod() != null && desc.getReadMethod().getDeclaringClass() == obj.getClass()) {
final String descName = desc.getName();
if (descName.equalsIgnoreCase("labelTranslations")) {
Element labelEl = new Element(LABEL_EL_NAME);

Map<String, String> labels = (Map<String, String>) desc.getReadMethod().invoke(this);
Map<String, String> labels = (Map<String, String>) desc.getReadMethod().invoke(obj);
if (labels != null) {
for (Map.Entry<String, String> entry : labels.entrySet()) {
labelEl.addContent(new Element(entry.getKey().toLowerCase()).setText(entry.getValue()));
Expand All @@ -51,7 +56,7 @@ public Element asXml() {

record.addContent(labelEl);
} else {
final Object rawData = desc.getReadMethod().invoke(this);
final Object rawData = desc.getReadMethod().invoke(obj);
if (rawData != null) {
final Element element = propertyToElement(descName, rawData);
record.addContent(element);
Expand All @@ -66,12 +71,16 @@ public Element asXml() {
return record;
}

private Element propertyToElement(String descName, Object rawData) {
private static Element propertyToElement(String descName, Object rawData) {
final Element element = new Element(descName.toLowerCase());
if (rawData instanceof GeonetEntity) {
final Element element1 = ((GeonetEntity) rawData).asXml();
final List list = element1.removeContent();
element.addContent(list);
} else if (hasEmbeddableAnnotation(rawData)) {
final Element element1 = asXml(rawData);
final List list = element1.removeContent();
element.addContent(list);
} else if (rawData instanceof Iterable) {
String childName = pluralToSingular(descName);
for (Object o : (Iterable<?>) rawData) {
Expand All @@ -83,7 +92,11 @@ private Element propertyToElement(String descName, Object rawData) {
return element;
}

private String pluralToSingular(String descName) {
private static boolean hasEmbeddableAnnotation(Object obj) {
return obj.getClass().getAnnotation(Embeddable.class) != null;
}

private static String pluralToSingular(String descName) {
if (descName.endsWith("es")) {
return descName.substring(0, descName.length() - 2);
} else if (descName.endsWith("s")) {
Expand Down
8 changes: 6 additions & 2 deletions domain/src/main/java/org/fao/geonet/domain/User.java
Original file line number Diff line number Diff line change
Expand Up @@ -143,8 +143,12 @@ public User setName(@Nullable String name) {
*/
@Transient
public String getEmail() {
if (_email != null && !_email.isEmpty()) {
return _email.iterator().next();
if (_email != null) {
for (String email : _email) {
if (email.contains("@")) {
return email;
}
}
}
return null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public class UserSecurity extends GeonetEntity implements Serializable {
public
@Nonnull
char[] getPassword() {
return _password.clone();
return _password == null ? new char[0] : _password.clone();
}

/**
Expand Down
7 changes: 4 additions & 3 deletions domain/src/test/java/org/fao/geonet/domain/UserTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,9 @@ public void testAsXml() throws Exception {
.setCountry(country2)
.setState(state2)
.setZip(zip2));
String email1 = "email1";
String email2 = "email2";
String email1 = "email1@c2c.com";
String email2 = "email2@c2c.com";
user.getEmailAddresses().add("invalidEmail");
user.getEmailAddresses().add(email1);
user.getEmailAddresses().add(email2);

Expand All @@ -84,7 +85,7 @@ public String apply(@Nullable Object input) {
return ((Element)input).getTextTrim();
}
});
Assert.assertEquals(2, emailAddresses.size());
Assert.assertEquals(3, emailAddresses.size());
Assert.assertTrue(emailAddressesAsStrings.contains(email1));
Assert.assertTrue(emailAddressesAsStrings.contains(email2));

Expand Down

0 comments on commit 7d36d71

Please sign in to comment.