View Javadoc

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