Package be.dnsbelgium.rdap.jackson

Source Code of be.dnsbelgium.rdap.jackson.ContactSerializer

/**
* Copyright 2014 DNS Belgium vzw
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package be.dnsbelgium.rdap.jackson;

import be.dnsbelgium.vcard.Contact;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.map.JsonSerializer;
import org.codehaus.jackson.map.SerializerProvider;
import org.codehaus.jackson.map.TypeSerializer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.util.Iterator;
import java.util.Locale;
import java.util.Set;

public class ContactSerializer extends JsonSerializer<Contact> {

  private static final Logger LOGGER = LoggerFactory.getLogger(ContactSerializer.class);


  @Override
  public Class<Contact> handledType() {
    return Contact.class;
  }

  @Override
  public void serialize(Contact contact, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
    jsonGenerator.writeStartArray();
    // start write version
    jsonGenerator.writeStartArray();
    jsonGenerator.writeString("version");
    jsonGenerator.writeStartObject();
    jsonGenerator.writeEndObject();
    jsonGenerator.writeString("text");
    jsonGenerator.writeString("4.0");
    jsonGenerator.writeEndArray();
    // end write version
    for (Contact.Property property : contact.getProperties()) {
      // start write property
      jsonGenerator.writeStartArray();
      // start write property name
      String key = (property.getGroup() == null) ? property.getName() : property.getGroup() + "." + property.getName();
      jsonGenerator.writeString(property.getName().toLowerCase(Locale.ENGLISH));
      // end write property name
      // start write property parameters
      jsonGenerator.writeStartObject();
      if (property.getGroup() != null) {
        jsonGenerator.writeFieldName("group");
        jsonGenerator.writeString(property.getGroup());
      }
      if (property.getParameters() != null) {

        Iterator<String> it = property.getParameters().keys();
        while (it.hasNext()) {
          String k = it.next();
          if (k.equalsIgnoreCase("value")) {
            continue;
          }
          Set<String> values = property.getParameters().get(k);
          if (values.size() == 0) {
            // no parameters for this property, skip this step
            continue;
          }
          jsonGenerator.writeFieldName(k.toLowerCase(Locale.ENGLISH));
          if (values.size() == 1) {
            jsonGenerator.writeString(values.toArray(new String[values.size()])[0]);
            continue;
          }
          // start write all property parameter values (array)
          jsonGenerator.writeStartArray();
          for (String str : property.getParameters().get(k)) {
            jsonGenerator.writeString(str);
          }
          jsonGenerator.writeEndArray();
          // end write all property parameter values (array)

        }
      }
      jsonGenerator.writeEndObject();
      // end write property parameters
      // start write property type
      String value = "text";
      if (property.getParameters() != null) {
        Set<String> types = property.getParameters().get("VALUE");
        if (types != null) {
          value = types.iterator().next();
        }
      }
      jsonGenerator.writeString(value);
      // end write property type
      // start write property value
      JsonSerializer s = serializerProvider.findValueSerializer(property.getValue().getClass(), null);
      s.serialize(property.getValue(), jsonGenerator, serializerProvider);
      // end write property value
      jsonGenerator.writeEndArray();
      // end write property
    }
    jsonGenerator.writeEndArray();
  }

  @Override
  public void serializeWithType(Contact value, JsonGenerator jgen, SerializerProvider provider, TypeSerializer typeSer) throws IOException {
    super.serializeWithType(value, jgen, provider, typeSer);
  }
}
TOP

Related Classes of be.dnsbelgium.rdap.jackson.ContactSerializer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.