Representation rep = vf .createRepresentation(
id);
Map<String,Representation> representations = new HashMap<String,Representation>();
representations.put(rep.getId(), rep);
//add the type
Mapping typeMapping = mappings.get(
entityType == EntityType.person ? VCARD_PERSON : VCARD_ORGANIZATION);
if(typeMapping != null){
rep.add(NamespaceEnum.rdf+"type", typeMapping.uri);
}
log.debug("vCard [type: {} | name: '{}' | id: '{}']",
new Object[]{entityType,name,rep.getId()});
for(Property property : vCard.getProperties()){
Property.Id propertyId = property.getId();
String propName = propertyId.getPropertyName();
if(mappings.containsKey(propName)){ //there is a mapping for this property
//the Representation to write the Information of the current Property
Representation current;
//the Map with the mappings to be used for processing the current
//Property
Map<String,Mapping> currentMappings;
Mapping mapping = mappings.get(propName); //May be null!!
if(mapping == null || mapping.subMappings == null){
current = rep; //add to the base Representation
currentMappings = mappings; //and use the parsed mappings
} else {
current = null; //indicates we need to create a new Representation
currentMappings = mapping.subMappings; //and use the sub mappings
}
switch (propertyId) {
case N:
N n = (N)property;
String given = n.getGivenName();
String family = n.getFamilyName();
if((given == null || given.isEmpty()) && (family == null
|| family.isEmpty())){
log.warn("'N' property '{}'does not define given nor family name -> ignored",
n.getValue());
} else {
if(current == null){ //create new Representation
current = createSubRepresentation(rep, ".name",
representations.keySet(), mapping);
representations.put(current.getId(), current);
}
Mapping subPropertyMapping = currentMappings.get(N_GIVEN);
if(subPropertyMapping != null && given != null && !given.isEmpty()){
current.addNaturalText(subPropertyMapping.uri, StringUtils.chomp(given).trim());
}
subPropertyMapping = currentMappings.get(N_FAMILY);
if(subPropertyMapping != null & family != null && !family.isEmpty()){
current.addNaturalText(subPropertyMapping.uri, StringUtils.chomp(family).trim());
}
String[] additional = n.getAdditionalNames();
subPropertyMapping = currentMappings.get(N_ADDITIONAL);
if(subPropertyMapping != null & additional != null && additional.length>0){
for(String value : additional){
if(value != null && !value.isEmpty()){
current.addNaturalText(subPropertyMapping.uri, StringUtils.chomp(value).trim());
}
}
}
String[] prefixes = n.getPrefixes();
subPropertyMapping = currentMappings.get(N_PREFIX);
if(subPropertyMapping != null & prefixes != null && prefixes.length>0){
for(String value : prefixes){
if(value != null && !value.isEmpty()){
current.addNaturalText(subPropertyMapping.uri, StringUtils.chomp(value).trim());
}
}
}
String[] suffixes = n.getSuffixes();
subPropertyMapping = currentMappings.get(N_SUFFIX);
if(subPropertyMapping != null & suffixes != null && suffixes.length>0){
for(String value : suffixes){
if(value != null && !value.isEmpty()){
current.addNaturalText(subPropertyMapping.uri, StringUtils.chomp(value).trim());
}
}
}
}
break;
case ADR:
Address address = (Address)property;
if(address.getValue() != null &&
//check of the value does not only contain seperators (',')
!address.getValue().replace(';', ' ').trim().isEmpty()){
if(current == null){ //create new Representation
current = createSubRepresentation(rep, ".adr",
representations.keySet(), mapping);
representations.put(current.getId(), current);
}
Mapping subPropertyMapping = currentMappings.get(ADR_POST_OFFICE_ADDRESS);
String value = address.getPoBox();
if(subPropertyMapping != null && value != null && !value.isEmpty()){
//add string -> this is no natural language text
current.add(subPropertyMapping.uri, StringUtils.chomp(value).trim());
}
value = address.getExtended();
subPropertyMapping = currentMappings.get(ADR_EXTENDED);
if(subPropertyMapping != null && value != null && !value.isEmpty()){
current.addNaturalText(subPropertyMapping.uri, StringUtils.chomp(value).trim());
}
value = address.getStreet();
subPropertyMapping = currentMappings.get(ADR_STREET);
if(subPropertyMapping != null && value != null && !value.isEmpty()){
current.addNaturalText(subPropertyMapping.uri, StringUtils.chomp(value).trim());
}
value = address.getLocality();
subPropertyMapping = currentMappings.get(ADR_LOCALITY);
if(subPropertyMapping != null && value != null && !value.isEmpty()){
current.addNaturalText(subPropertyMapping.uri, StringUtils.chomp(value).trim());
}
value = address.getRegion();
subPropertyMapping = currentMappings.get(ADR_REGION);
if(subPropertyMapping != null && value != null && !value.isEmpty()){
current.addNaturalText(subPropertyMapping.uri, StringUtils.chomp(value).trim());
}
value = address.getPostcode();
subPropertyMapping = currentMappings.get(ADR_POSTAL_CODE);
if(subPropertyMapping != null && value != null && !value.isEmpty()){
// add string -> this is no natural language text
current.add(subPropertyMapping.uri, StringUtils.chomp(value).trim());
}
value = address.getCountry();
subPropertyMapping = currentMappings.get(ADR_COUNTRY);
if(subPropertyMapping != null && value != null && !value.isEmpty()){
// add string -> based on the standard this should be the two letter code
current.add(subPropertyMapping.uri, StringUtils.chomp(value).trim());
}
} //else empty ADR field -> ignore
break;
case ORG:
Org org = (Org)property;
String[] unitHierarchy = org.getValues();
Mapping orgNameMapping = currentMappings.get(OntologyMappings.ORG_NAME);
if(unitHierarchy.length>0 && orgNameMapping != null &&
unitHierarchy[0] != null && unitHierarchy[0].trim().length()>0){
String orgName = unitHierarchy[0];
if(current == null){ //create new Representation for the Organisation
//Note: this is an Entity and no sub-Resource!