1 //
2 // ========================================================================
3 // Copyright (c) 1995-2015 Mort Bay Consulting Pty. Ltd.
4 // ------------------------------------------------------------------------
5 // All rights reserved. This program and the accompanying materials
6 // are made available under the terms of the Eclipse Public License v1.0
7 // and Apache License v2.0 which accompanies this distribution.
8 //
9 // The Eclipse Public License is available at
10 // http://www.eclipse.org/legal/epl-v10.html
11 //
12 // The Apache License v2.0 is available at
13 // http://www.opensource.org/licenses/apache2.0.php
14 //
15 // You may elect to redistribute this code under either of these licenses.
16 // ========================================================================
17 //
18
19 package org.eclipse.jetty.deploy;
20
21 import org.eclipse.jetty.server.handler.ContextHandler;
22 import org.eclipse.jetty.util.AttributesMap;
23
24 /**
25 * The information about an App that is managed by the {@link DeploymentManager}
26 */
27 public class App
28 {
29 private final DeploymentManager _manager;
30 private final AppProvider _provider;
31 private final String _originId;
32 private ContextHandler _context;
33
34 /**
35 * Create an App with specified Origin ID and archivePath
36 *
37 * @param originId
38 * the origin ID (The ID that the {@link AppProvider} knows
39 * about)
40 * @see App#getOriginId()
41 * @see App#getContextPath()
42 */
43 public App(DeploymentManager manager, AppProvider provider, String originId)
44 {
45 _manager = manager;
46 _provider = provider;
47 _originId = originId;
48 }
49
50 /**
51 * Create an App with specified Origin ID and archivePath
52 *
53 * @param originId
54 * the origin ID (The ID that the {@link AppProvider} knows
55 * about)
56 * @see App#getOriginId()
57 * @see App#getContextPath()
58 * @param context
59 * Some implementations of AppProvider might have to use an
60 * already created ContextHandler.
61 */
62 public App(DeploymentManager manager, AppProvider provider, String originId, ContextHandler context)
63 {
64 this(manager,provider,originId);
65 _context = context;
66 }
67
68 /* ------------------------------------------------------------ */
69 /**
70 * @return The deployment manager
71 */
72 public DeploymentManager getDeploymentManager()
73 {
74 return _manager;
75 }
76
77 /* ------------------------------------------------------------ */
78 /**
79 * @return The AppProvider
80 */
81 public AppProvider getAppProvider()
82 {
83 return _provider;
84 }
85
86 /* ------------------------------------------------------------ */
87 /**
88 * Get ContextHandler for the App.
89 *
90 * Create it if needed.
91 *
92 * @return the {@link ContextHandler} to use for the App when fully started.
93 * (Portions of which might be ignored when App is not yet
94 * {@link AppLifeCycle#DEPLOYED} or {@link AppLifeCycle#STARTED})
95 * @throws Exception
96 */
97 public ContextHandler getContextHandler() throws Exception
98 {
99 if (_context == null)
100 {
101 _context = getAppProvider().createContextHandler(this);
102
103 AttributesMap attributes = _manager.getContextAttributes();
104 if (attributes!=null && attributes.size()>0)
105 {
106 // Merge the manager attributes under the existing attributes
107 attributes = new AttributesMap(attributes);
108 attributes.addAll(_context.getAttributes());
109 _context.setAttributes(attributes);
110 }
111 }
112 return _context;
113 }
114
115
116 /**
117 * The context path {@link App} relating to how it is installed on the
118 * jetty server side.
119 *
120 * NOTE that although the method name indicates that this is a unique
121 * identifier, it is not, as many contexts may have the same contextPath,
122 * yet different virtual hosts.
123 *
124 * @deprecated Use getContextPath instead.
125 * @return the context path for the App
126 */
127 public String getContextId()
128 {
129 return getContextPath();
130 }
131
132
133 /**
134 * The context path {@link App} relating to how it is installed on the
135 * jetty server side.
136 *
137 * @return the contextPath for the App
138 */
139 public String getContextPath()
140 {
141 if (this._context == null)
142 {
143 return null;
144 }
145 return this._context.getContextPath();
146 }
147
148
149 /**
150 * The origin of this {@link App} as specified by the {@link AppProvider}
151 *
152 * @return String representing the origin of this app.
153 */
154 public String getOriginId()
155 {
156 return this._originId;
157 }
158
159 @Override
160 public String toString()
161 {
162 return "App[" + _context + "," + _originId + "]";
163 }
164 }