View Javadoc

1   //
2   //  ========================================================================
3   //  Copyright (c) 1995-2013 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       * Get ContextHandler for the App.
88       * 
89       * Create it if needed.
90       * 
91       * @return the {@link ContextHandler} to use for the App when fully started.
92       *         (Portions of which might be ignored when App is not yet 
93       *         {@link AppLifeCycle#DEPLOYED} or {@link AppLifeCycle#STARTED})
94       * @throws Exception
95       */
96      public ContextHandler getContextHandler() throws Exception
97      {
98          if (_context == null)
99          {
100             _context = getAppProvider().createContextHandler(this);
101             
102             AttributesMap attributes = _manager.getContextAttributes();
103             if (attributes!=null && attributes.size()>0)
104             {
105                 // Merge the manager attributes under the existing attributes
106                 attributes = new AttributesMap(attributes);
107                 attributes.addAll(_context.getAttributes());
108                 _context.setAttributes(attributes);
109             }
110         }
111         return _context;
112     }
113 
114     
115     /**
116      * The context path {@link App} relating to how it is installed on the
117      * jetty server side.
118      * 
119      * NOTE that although the method name indicates that this is a unique
120      * identifier, it is not, as many contexts may have the same contextPath,
121      * yet different virtual hosts.
122      * 
123      * @deprecated Use getContextPath instead.
124      * @return the context path for the App
125      */
126     public String getContextId()
127     {
128         return getContextPath();
129     }
130     
131     
132     /**
133      * The context path {@link App} relating to how it is installed on the
134      * jetty server side.
135      * 
136      * @return the contextPath for the App
137      */
138     public String getContextPath()
139     {
140         if (this._context == null)
141         {
142             return null;
143         }
144         return this._context.getContextPath();
145     }
146 
147 
148     /**
149      * The origin of this {@link App} as specified by the {@link AppProvider}
150      * 
151      * @return String representing the origin of this app.
152      */
153     public String getOriginId()
154     {
155         return this._originId;
156     }
157 
158     @Override
159     public String toString()
160     {
161         return "App[" + _context + "," + _originId + "]";
162     }
163 }