View Javadoc

1   //
2   //  ========================================================================
3   //  Copyright (c) 1995-2016 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 manager the deployment manager 
38       * @param provider the app provider
39       * @param originId
40       *            the origin ID (The ID that the {@link AppProvider} knows
41       *            about)
42       * @see App#getOriginId()
43       * @see App#getContextPath()
44       */
45      public App(DeploymentManager manager, AppProvider provider, String originId)
46      {
47          _manager = manager;
48          _provider = provider;
49          _originId = originId;
50      }
51  
52      /**
53       * Create an App with specified Origin ID and archivePath
54       * 
55       * @param manager the deployment manager 
56       * @param provider the app provider
57       * @param originId
58       *            the origin ID (The ID that the {@link AppProvider} knows
59       *            about)
60       * @see App#getOriginId()
61       * @see App#getContextPath()
62       * @param context
63       *            Some implementations of AppProvider might have to use an
64       *            already created ContextHandler.
65       */
66      public App(DeploymentManager manager, AppProvider provider, String originId, ContextHandler context)
67      {
68          this(manager,provider,originId);
69          _context = context;
70      }
71  
72      /* ------------------------------------------------------------ */
73      /**
74       * @return The deployment manager
75       */
76      public DeploymentManager getDeploymentManager()
77      {
78          return _manager;
79      }
80  
81      /* ------------------------------------------------------------ */
82      /**
83       * @return The AppProvider
84       */
85      public AppProvider getAppProvider()
86      {
87          return _provider;
88      }
89  
90      /* ------------------------------------------------------------ */
91      /**
92       * Get ContextHandler for the App.
93       * 
94       * Create it if needed.
95       * 
96       * @return the {@link ContextHandler} to use for the App when fully started.
97       *         (Portions of which might be ignored when App is not yet 
98       *         {@link AppLifeCycle#DEPLOYED} or {@link AppLifeCycle#STARTED})
99       * @throws Exception if unable to get the context handler
100      */
101     public ContextHandler getContextHandler() throws Exception
102     {
103         if (_context == null)
104         {
105             _context = getAppProvider().createContextHandler(this);
106             
107             AttributesMap attributes = _manager.getContextAttributes();
108             if (attributes!=null && attributes.size()>0)
109             {
110                 // Merge the manager attributes under the existing attributes
111                 attributes = new AttributesMap(attributes);
112                 attributes.addAll(_context.getAttributes());
113                 _context.setAttributes(attributes);
114             }
115         }
116         return _context;
117     }
118 
119     
120     /**
121      * The context path {@link App} relating to how it is installed on the
122      * jetty server side.
123      * 
124      * NOTE that although the method name indicates that this is a unique
125      * identifier, it is not, as many contexts may have the same contextPath,
126      * yet different virtual hosts.
127      * 
128      * @deprecated Use getContextPath instead.
129      * @return the context path for the App
130      */
131     public String getContextId()
132     {
133         return getContextPath();
134     }
135     
136     
137     /**
138      * The context path {@link App} relating to how it is installed on the
139      * jetty server side.
140      * 
141      * @return the contextPath for the App
142      */
143     public String getContextPath()
144     {
145         if (this._context == null)
146         {
147             return null;
148         }
149         return this._context.getContextPath();
150     }
151 
152 
153     /**
154      * The origin of this {@link App} as specified by the {@link AppProvider}
155      * 
156      * @return String representing the origin of this app.
157      */
158     public String getOriginId()
159     {
160         return this._originId;
161     }
162 
163     @Override
164     public String toString()
165     {
166         return "App[" + _context + "," + _originId + "]";
167     }
168 }