/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
* Copyright (c) 2013, MPL CodeInside http://codeinside.ru
*/
package ru.codeinside.gses.cert;
import com.google.common.base.Splitter;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import java.util.List;
final public class NameParts {
public String getCommonName() {
return getPart("CN");
}
public String getOrganization() {
return getPart("O");
}
public String getGivenName() {
return getPart("GIVENNAME");
}
public String getSurName() {
return getPart("SURNAME");
}
public String getPart(String key) {
return parts.get(key);
}
public String getShortName() {
final String commonName = getCommonName();
final String organization = getOrganization();
final String surName = getSurName();
final String givenName = getGivenName();
if (commonName == null && organization == null && surName == null && givenName == null) {
return original;
}
final StringBuilder sb = new StringBuilder();
if (surName != null && givenName != null) {
sb.append(surName).append(' ').append(givenName);
} else if (commonName != null) {
sb.append(commonName);
}
if (organization != null) {
if (commonName != null || (surName != null && givenName != null)) {
sb.append(' ');
}
sb.append('(').append(organization).append(')');
}
return sb.toString();
}
public NameParts(final String dn) {
final ImmutableMap.Builder<String, String> builder = ImmutableMap.builder();
for (final String chunk : Splitter.on(',').trimResults().split(dn)) {
List<String> pairs = ImmutableList.copyOf(Splitter.on('=').trimResults().split(chunk));
if (pairs.size() == 2) {
builder.put(pairs.get(0), pairs.get(1));
}
}
original = dn;
parts = builder.build();
}
final private ImmutableMap<String, String> parts;
final private String original;
}