Package org.dayatang.observer

Source Code of org.dayatang.observer.Observer

package org.dayatang.observer;

import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import org.dayatang.domain.AbstractEntity;
import org.dayatang.domain.NamedParameters;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

@SuppressWarnings("rawtypes")
@Entity
@Table(name = "COMMONS_OBSERVER")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "OBSERVER_CATEGORY", discriminatorType = DiscriminatorType.STRING)
public abstract class Observer<T extends Subject> extends AbstractEntity {

  /**
   *
   */
  private static final long serialVersionUID = 4841919329150188032L;

  private static final Logger logger = LoggerFactory
      .getLogger(Observer.class);

    @ElementCollection
    @CollectionTable(name = "COMMONS_OBSERVER_SUBJECTKEY", joinColumns = @JoinColumn(name = "OBSERVER_ID"))
    @Column(name = "SUBJECT_KEY")
  private Set<String> subjectKeys = new HashSet<String>();

  public Set<String> getSubjectKeys() {
    return subjectKeys;
  }

  public void setSubjectKeys(Set<String> subjectKeys) {
    this.subjectKeys = subjectKeys;
  }

  @Override
  public String toString() {
    return ToStringBuilder.reflectionToString(this,
        ToStringStyle.SHORT_PREFIX_STYLE);
  }

  /*
   * =======================================
   *
   * action
   *
   * ========================================
   */

  public abstract void process(T subject);

  public static Observer get(Long id) {
    return getRepository().get(Observer.class, id);
  }

  public static List<Observer> findBySubject(Subject subject) {
    String queryString = "select o from Observer o where :subjectKey in elements(o.subjectKeys))";
                NamedParameters params = NamedParameters.create().add("subjectKey", subject.getSubjectKey());
    List<Object> observers = getRepository().createJpqlQuery(queryString)
                .addParameter("subjectKey", subject.getSubjectKey()).list();

    if (logger.isDebugEnabled()) {
      if (observers.isEmpty()) {
        logger.debug("没有找到一个观察者:subjectKey为【{}】",
            subject.getSubjectKey());
      } else {
        for (Object observer : observers) {
          logger.debug("找到一个观察者:subjectKey为【{}】,observer为【{}】",
              subject.getSubjectKey(), observer);
        }
      }
    }
    List<Observer> results = new ArrayList<Observer>();
    for (Object observer : observers) {
      results.add((Observer) observer);
    }
    return results;
  }
}
TOP

Related Classes of org.dayatang.observer.Observer

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.