package com.sun.identity.saml2.profile;

import com.sun.identity.plugin.session.SessionException;
import com.sun.identity.plugin.session.SessionManager;
import com.sun.identity.plugin.session.SessionProvider;
import com.sun.identity.saml2.common.SAML2Utils;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

public class IDPSessionCopy implements Serializable {
   private final String ssoTokenID;
   private final List<NameIDandSPpair> nameIDandSPpairs;
   private String pendingLogoutRequestID;
   private String originatingLogoutRequestID;
   private String originatingLogoutSPEntityID;
   private String metaAlias;

   public IDPSessionCopy(IDPSession idpSession) {
      SessionProvider sessionProvider = null;

      try {
         sessionProvider = SessionManager.getProvider();
      } catch (SessionException se) {
         SAML2Utils.DEBUG.error("Error retrieving session provider.", se);
         throw new IllegalStateException(se);
      }

      this.ssoTokenID = sessionProvider.getSessionID(idpSession.getSession());
      this.nameIDandSPpairs = new ArrayList<>();
      this.nameIDandSPpairs.addAll(idpSession.getNameIDandSPpairs());
      this.pendingLogoutRequestID = idpSession.getPendingLogoutRequestID();
      this.originatingLogoutRequestID = idpSession.getOriginatingLogoutRequestID();
      this.originatingLogoutSPEntityID = idpSession.getOriginatingLogoutSPEntityID();
      this.metaAlias = idpSession.getMetaAlias();
   }

   public String getSSOToken() {
      return this.ssoTokenID;
   }

   public List<NameIDandSPpair> getNameIDandSPpairs() {
      return this.nameIDandSPpairs;
   }

   public void setPendingLogoutRequestID(String id) {
      this.pendingLogoutRequestID = id;
   }

   public String getPendingLogoutRequestID() {
      return this.pendingLogoutRequestID;
   }

   public void setOriginatingLogoutRequestID(String id) {
      this.originatingLogoutRequestID = id;
   }

   public String getOriginatingLogoutRequestID() {
      return this.originatingLogoutRequestID;
   }

   public void setOriginatingLogoutSPEntityID(String id) {
      this.originatingLogoutSPEntityID = id;
   }

   public String getOriginatingLogoutSPEntityID() {
      return this.originatingLogoutSPEntityID;
   }

   public void setMetaAlias(String metaAlias) {
      this.metaAlias = metaAlias;
   }

   public String getMetaAlias() {
      return this.metaAlias;
   }
}
