package me.pbox.site.captions.model; import org.nocturne.main.ApplicationContext; import java.util.*; /** * @author Maxim Shipko (sladethe@gmail.com) * Date: 06.05.11 */ public final class CaptionEntity implements Comparable<CaptionEntity> { private static final ApplicationContext APPLICATION_CONTEXT = ApplicationContext.getInstance(); private static final Map<String, String> EMPTY_ADDITIONAL_FIELDS = Collections.unmodifiableMap(new LinkedHashMap<String, String>()); private static final Set<String> EMPTY_IMPORTANT_FIELD_NAMES = Collections.unmodifiableSet(new LinkedHashSet<String>()); private final long id; private final String name; private final String caption; private final Map<String, String> additionalFields; private final Set<String> importantFieldNames; private volatile int hash; public CaptionEntity(long id, String name, Map<String, String> additionalFields, Set<String> importantFieldNames) { this(id, name, APPLICATION_CONTEXT.$(name), additionalFields, importantFieldNames); } public CaptionEntity(long id, String name, String caption, Map<String, String> additionalFields, Set<String> importantFieldNames) { this.id = id; this.name = name; this.caption = caption; this.additionalFields = additionalFields == null ? EMPTY_ADDITIONAL_FIELDS : Collections.unmodifiableMap(new LinkedHashMap<>(additionalFields)); this.importantFieldNames = importantFieldNames == null ? EMPTY_IMPORTANT_FIELD_NAMES : Collections.unmodifiableSet(new LinkedHashSet<>(importantFieldNames)); } public long getId() { return id; } public String getName() { return name; } public String getCaption() { return caption; } @SuppressWarnings({"ReturnOfCollectionOrArrayField"}) public Map<String, String> getAdditionalFields() { return additionalFields; } @SuppressWarnings({"ReturnOfCollectionOrArrayField"}) public Set<String> getImportantFieldNames() { return importantFieldNames; } @Override public int compareTo(CaptionEntity o) { int captionComparison = caption.compareTo(o.caption); if (captionComparison != 0) { return captionComparison; } return ((Long) id).compareTo(o.id); } @Override public boolean equals(Object o) { return this == o || o != null && getClass() == o.getClass() && id == ((CaptionEntity) o).id; } @SuppressWarnings({"NonFinalFieldReferencedInHashCode"}) @Override public int hashCode() { int h = hash; if (h == 0) { h = ((Long) id).hashCode(); hash = h; } return h; } public static Comparator<CaptionEntity> getByNameComparator() { return new Comparator<CaptionEntity>() { @Override public int compare(CaptionEntity o1, CaptionEntity o2) { int nameComparison = o1.getName().compareTo(o2.getName()); if (nameComparison != 0) { return nameComparison; } return ((Long) o1.getId()).compareTo(o2.getId()); } }; } }