All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.google.transconsole.common.messages..svn.text-base.MessageProperties.svn-base Maven / Gradle / Ivy

Go to download

Google XML Pages (GXP) is a templating system used to generate XML/SGML markup (most often HTML).

The newest version!
/*
 * Copyright (C) 2008 Google Inc.
 *
 * 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 com.google.transconsole.common.messages;

import com.google.common.base.Objects;
import com.google.common.base.Preconditions;
import com.google.common.collect.Sets;

import java.util.Set;

/**
 * Properties associated with a message, other than its content.
 *
 * TODO(pdoyle): Missing support for:
 * - "seq" (do we need this at all?)
 */
final class MessageProperties {

  private String contentType;
  private String description;
  private String meaning;
  private String name;
  private final Set sources;
  private boolean isHidden;
  private boolean isObsolete;

  public MessageProperties() {
    contentType = null;
    description = null;
    name = null;
    sources = Sets.newTreeSet();
    meaning = null;             // ID generator defines null == empty meaning
    isHidden = false;
    isObsolete = false;
  }

  /**
   * Note: does not copy arguments, so caller should make defensive copies if
   * appropriate.
   */
  private MessageProperties(String contentType, String description,
                            String meaning, String name, Set sources,
                            boolean isHidden, boolean isObsolete) {
    this.contentType = contentType;
    this.description = description;
    this.name = name;
    this.sources = sources;
    this.meaning = meaning;
    this.isHidden = isHidden;
    this.isObsolete = isObsolete;
  }

  /**
   * Copy constructor
   */
  protected MessageProperties(MessageProperties original) {
    this.contentType = original.contentType;
    this.description = original.description;
    this.name = original.name;
    this.sources = Sets.newTreeSet(original.sources);
    this.meaning = original.meaning;
    this.isHidden = original.isHidden;
    this.isObsolete = original.isObsolete;
  }

  protected void setContentType(String contentType) {
    this.contentType = Preconditions.checkNotNull(contentType);
  }

  public String getContentType() {
    return contentType;
  }

  /**
   * Sets the engineer's description of the purpose of the message.  The
   * description cannot be null.
   *
   * @param description of the message
   */
  protected void setDescription(String description) {
    this.description = Preconditions.checkNotNull(description);
  }

  public String getDescription() {
    return description;
  }

  protected void setMeaning(String meaning) {
    this.meaning = meaning;
  }

  public String getMeaning() {
    return meaning;
  }

  protected void setHidden(boolean hidden) {
    this.isHidden = hidden;
  }

  public boolean isHidden() {
    return isHidden;
  }
  
  public void setName(String name) {
    this.name = name;
  }

  public String getName() {
    return this.name;
  }

  public void setObsolete(boolean obsolete) {
    this.isObsolete = obsolete;
  }

  public boolean isObsolete() {
    return this.isObsolete;
  }

  public void addSource(String source) {
    this.sources.add(source);
  }

  public Set getSources() {
    return this.sources;
  }

  /**
   * Merges this MessageProperties with the supplied MessageProperties to
   * produce a "merged" one.
   *
   * @throws IllegalArgumentException if the message IDs are not the same.
   * @throws InvalidMessageException if any of the message attributes are
   * incompatible.
   */
  MessageProperties merge(MessageProperties that)
      throws InvalidMessageException {

    String mergedContentType = contentType;
    if (!Objects.equal(contentType, that.contentType)) {
      try {
        throw new InvalidMessageException(
            "Cannot merge messages with incompatible content-types.");
      } catch (InvalidMessageException e) {
        e.printStackTrace();
        throw e;
      }
    }

    String mergedDescription;
    if (Objects.equal(description, that.description)
        || null == that.description) {
      mergedDescription = description;
    } else if (null == description) {
        mergedDescription = that.description;
    } else {
      mergedDescription = that.description.length() > description.length() ?
          that.description : description;
    }

    String mergedMeaning;
    if (Objects.equal(meaning, that.meaning)) {
      mergedMeaning = meaning;
    } else {
      throw new InvalidMessageException(
          "Cannot merge messages with different meanings.");
    }

    String mergedName;
    if (Objects.equal(name, that.name) || null == that.name) {
      mergedName = name;
    } else if (null == name) {
      mergedName = that.name;
    } else {
      mergedName = that.name.length() > name.length() ? that.name : name;
    }

    Set mergedSources = Sets.newTreeSet();
    mergedSources.addAll(sources);
    mergedSources.addAll(that.sources);

    boolean mergedIsHidden = isHidden && that.isHidden;
    boolean mergedIsObsolete = isObsolete && that.isObsolete;

    return new MessageProperties(mergedContentType, mergedDescription,
                                 mergedMeaning, mergedName, mergedSources,
                                 mergedIsHidden, mergedIsObsolete);
  }

  @Override
  public int hashCode() {
    return Objects.hashCode(contentType, description, meaning,
                            name, sources, isHidden, isObsolete);
  }

  @Override
  public boolean equals(Object other) {
    if (other == this) {
      return true;
    }
    if (!(other instanceof MessageProperties)) {
      return false;
    }
    MessageProperties otherProperties = (MessageProperties) other;
    return (Objects.equal(contentType, otherProperties.contentType)
            && Objects.equal(description, otherProperties.description)
            && Objects.equal(meaning, otherProperties.meaning)
            && Objects.equal(name, otherProperties.name)
            && Objects.equal(sources, otherProperties.sources)
            && Objects.equal(isHidden, otherProperties.isHidden)
            && Objects.equal(isObsolete, otherProperties.isObsolete));
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy