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;
019
020 import org.cumulus4j.keymanager.channel.KeyManagerChannelManager;
021
022 /**
023 * <p>
024 * An <code>AppServer</code> represents a logical application server. This logical application server
025 * might be a cluster/cloud consisting of many physical machines.
026 * </p>
027 * <p>
028 * An <code>AppServer</code> knows how to contact the application server (or more precisely the key-manager-channel-REST-service
029 * running on this application server) in order to establish a communication channel. See
030 * <a target="_blank" href="http://cumulus4j.org/1.2.0/documentation/deployment-scenarios.html">Deployment scenarios</a>.
031 * </p>
032 * <p>
033 * Since {@link Session}s are managed per <code>AppServer</code> (in case one single key-store is used for multiple
034 * application servers), this serves as a scope for sessions (thus every <code>AppServer</code> has one instance of
035 * {@link SessionManager}).
036 * </p>
037 * <p>
038 * This is not API! Use the classes and interfaces provided by <code>org.cumulus4j.keymanager.api</code> instead.
039 * </p>
040 *
041 * @author Marco หงุ่ยตระกูล-Schulze - marco at nightlabs dot de
042 */
043 public class AppServer
044 {
045 private AppServerManager appServerManager;
046 private String appServerID;
047 private String appServerBaseURL;
048 private SessionManager sessionManager;
049 private KeyManagerChannelManager keyManagerChannelManager;
050
051 public AppServer(AppServerManager appServerManager, String appServerID, String appServerBaseURL)
052 {
053 if (appServerManager == null)
054 throw new IllegalArgumentException("appServerManager == null");
055
056 // if (appServerID == null) // this is now allowed! the appServerID will be assigned when putting this into the AppServerManager.
057 // throw new IllegalArgumentException("appServerID == null");
058
059 if (appServerBaseURL == null)
060 throw new IllegalArgumentException("appServerBaseURL == null");
061
062 this.appServerManager = appServerManager;
063 this.appServerID = appServerID;
064 this.appServerBaseURL = appServerBaseURL;
065 this.sessionManager = new SessionManager(appServerManager.getKeyStore());
066 this.keyManagerChannelManager = new KeyManagerChannelManager(sessionManager, appServerBaseURL);
067 }
068
069 public String getAppServerID() {
070 return appServerID;
071 }
072
073 public void setAppServerID(String appServerID)
074 {
075 if (this.appServerID != null && !this.appServerID.equals(appServerID))
076 throw new IllegalArgumentException("this.appServerID is already assigned and new value differs from old value! Cannot modify it afterwards!");
077
078 this.appServerID = appServerID;
079 }
080
081 public String getAppServerBaseURL() {
082 return appServerBaseURL;
083 }
084
085 public AppServerManager getAppServerManager() {
086 return appServerManager;
087 }
088
089 public SessionManager getSessionManager() {
090 return sessionManager;
091 }
092
093 public KeyManagerChannelManager getKeyManagerChannelManager() {
094 return keyManagerChannelManager;
095 }
096 }