001 /*
002 * Cumulus4j - Securing your data in the cloud - http://cumulus4j.org
003 * Copyright (C) 2011 NightLabs Consulting GmbH
004 *
005 * This program is free software: you can redistribute it and/or modify
006 * it under the terms of the GNU Affero General Public License as
007 * published by the Free Software Foundation, either version 3 of the
008 * License, or (at your option) any later version.
009 *
010 * This program is distributed in the hope that it will be useful,
011 * but WITHOUT ANY WARRANTY; without even the implied warranty of
012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
013 * GNU Affero General Public License for more details.
014 *
015 * You should have received a copy of the GNU Affero General Public License
016 * along with this program. If not, see <http://www.gnu.org/licenses/>.
017 */
018 package org.cumulus4j.keymanager.back.shared;
019
020 import javax.xml.bind.annotation.XmlRootElement;
021
022 /**
023 * Super-class for all requests sent from app-server to key-manager.
024 *
025 * @author Marco หงุ่ยตระกูล-Schulze - marco at nightlabs dot de
026 * @see Response
027 */
028 @XmlRootElement
029 public abstract class Request extends Message
030 {
031 private static final long serialVersionUID = 1L;
032
033 private String cryptoSessionID;
034
035 public Request() { }
036
037 public Request(String cryptoSessionID)
038 {
039 if (cryptoSessionID == null)
040 throw new IllegalArgumentException("cryptoSessionID == null");
041
042 setRequestID(IdentifierUtil.createRandomID());
043 this.cryptoSessionID = cryptoSessionID;
044 }
045
046 public String getCryptoSessionID() {
047 return cryptoSessionID;
048 }
049 public void setCryptoSessionID(String cryptoSessionID) {
050 this.cryptoSessionID = cryptoSessionID;
051 }
052
053 /**
054 * Get the session-id-prefix that is used for routing of messages.
055 * <p>
056 * See <code>org.cumulus4j.keymanager.Session</code> and <code>org.cumulus4j.keymanager.SessionManager</code>
057 * for its creation.
058 * @return the session-id-prefix that is used for routing of messages.
059 */
060 public String getCryptoSessionIDPrefix()
061 {
062 String id = cryptoSessionID;
063 if (id == null)
064 return null;
065
066 int dotIdx = id.indexOf('*');
067 if (dotIdx < 0)
068 throw new IllegalStateException("cryptoSessionID does not contain a dot ('*')!!!");
069
070 return id.substring(0, dotIdx);
071 }
072
073 @Override
074 public String toString() {
075 return super.toString() + '[' + getRequestID() + ',' + cryptoSessionID + ']';
076 }
077 }