KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jboss > portal > core > deployment > jboss > InstanceDeployment


1 /*****************************************
2  * *
3  * JBoss Portal: The OpenSource Portal *
4  * *
5  * Distributable under LGPL license. *
6  * See terms of license at gnu.org. *
7  * *
8  *****************************************/

9 package org.jboss.portal.core.deployment.jboss;
10
11 import org.jboss.portal.server.deployment.jboss.Deployment;
12 import org.jboss.portal.server.deployment.PortalWebApp;
13 import org.jboss.portal.server.metadata.InstanceMetaData;
14 import org.jboss.portal.server.metadata.PreferencesMetaData;
15 import org.jboss.portal.server.metadata.PreferenceMetaData;
16 import org.jboss.portal.server.ServerObjectID;
17 import org.jboss.portal.server.PortalConstants;
18 import org.jboss.portal.server.ServerManager;
19 import org.jboss.portal.common.util.XML;
20 import org.jboss.portal.common.util.Tools;
21 import org.jboss.portal.core.metadata.AccessControllerMetaData;
22 import org.jboss.deployment.DeploymentException;
23 import org.w3c.dom.Element JavaDoc;
24 import org.w3c.dom.Document JavaDoc;
25 import org.apache.log4j.Logger;
26
27 import javax.xml.parsers.DocumentBuilder JavaDoc;
28 import java.net.URL JavaDoc;
29 import java.io.InputStream JavaDoc;
30 import java.util.Iterator JavaDoc;
31 import java.util.List JavaDoc;
32
33 /**
34  * @author <a HREF="mailto:julien@jboss.org">Julien Viet</a>
35  * @version $Revision: 1.4 $
36  */

37 public class InstanceDeployment extends Deployment
38 {
39
40    private InstanceMetaData[] instanceMDs;
41
42    public InstanceDeployment(ServerManager serverManager, URL JavaDoc url, PortalWebApp pwa, String JavaDoc appName)
43    {
44       super(serverManager, url, pwa, appName);
45    }
46
47    public void create() throws DeploymentException
48    {
49       InputStream JavaDoc in = null;
50       try
51       {
52          in = url.openStream();
53          DocumentBuilder JavaDoc builder = XML.getDocumentBuilderFactory().newDocumentBuilder();
54          Document JavaDoc doc = builder.parse(in);
55          Element JavaDoc instancesElt = doc.getDocumentElement();
56          List JavaDoc instanceElts = XML.getChildren(instancesElt, "instance");
57          instanceMDs = new InstanceMetaData[instanceElts.size()];
58          for (int i = 0;i < instanceElts.size();i++)
59          {
60             Element JavaDoc instanceElt = (Element JavaDoc)instanceElts.get(i);
61             instanceMDs[i] = buildInstanceMetaData(instanceElt, appName, log);
62          }
63
64          for (int i = 0; i < instanceMDs.length; i++)
65          {
66             InstanceMetaData instanceMD = instanceMDs[i];
67             getServerManager().deploy(instanceMD);
68          }
69       }
70       catch (Exception JavaDoc e)
71       {
72          e.printStackTrace();
73       }
74       finally
75       {
76          Tools.safeClose(in);
77       }
78    }
79
80    public void destroy() throws DeploymentException
81    {
82       for (int i = 0; i < instanceMDs.length; i++)
83       {
84          InstanceMetaData instanceMD = instanceMDs[i];
85          getServerManager().undeploy(instanceMD.getID());
86       }
87    }
88
89    public static InstanceMetaData buildInstanceMetaData(Element JavaDoc instanceElt, String JavaDoc appName, Logger log)
90    {
91       String JavaDoc instanceName = XML.asString(XML.getUniqueChild(instanceElt, "instance-name", true));
92       String JavaDoc componentRef = XML.asString(XML.getUniqueChild(instanceElt, "component-ref", true));
93
94       //
95
ServerObjectID componentID = ServerObjectID.createComponentID(appName, componentRef);
96
97       // Create the instance
98
InstanceMetaData instanceMD = new InstanceMetaData(instanceName, componentID);
99
100       // Configure security
101
AccessControllerMetaData accessControllerMD = new AccessControllerMetaData();
102
103       // Parse XMl content
104
Element JavaDoc securityElt = XML.getUniqueChild(instanceElt, "security", false);
105       if (securityElt != null)
106       {
107          // Configure authorized roles if any
108
Element JavaDoc authorizedRolesElt = XML.getUniqueChild(securityElt, "authorized-roles", false);
109          if (authorizedRolesElt != null)
110          {
111             log.debug("Found authorized roles section for " + instanceMD);
112             accessControllerMD.setUnchecked(false);
113             List JavaDoc roleNameElts = XML.getChildren(authorizedRolesElt, "role-name");
114             for (int i = 0;i < roleNameElts.size();i++)
115             {
116                Element JavaDoc roleNameElt = (Element JavaDoc)roleNameElts.get(i);
117                String JavaDoc role = XML.asString(roleNameElt);
118                log.debug("Adding authorized role " + role + " for instance " + instanceMD);
119                accessControllerMD.addRole(role);
120             }
121          }
122          else
123          {
124             accessControllerMD.setUnchecked(true);
125          }
126       }
127
128       // Configure preferences override
129
PreferencesMetaData preferencesMD = new PreferencesMetaData();
130       Element JavaDoc preferencesElt = XML.getUniqueChild(instanceElt, "preferences", false);
131       if (preferencesElt != null)
132       {
133          for (Iterator JavaDoc i = PortletAppDeployment.buildPreferencesMetaData(preferencesElt).values().iterator();i.hasNext();)
134          {
135             PreferenceMetaData preferenceMD = (PreferenceMetaData)i.next();
136             preferencesMD.addPreference(preferenceMD);
137          }
138       }
139
140       instanceMD.addPlugin("AC", accessControllerMD);
141       instanceMD.addPlugin(PortalConstants.PLUGIN_PREFS, preferencesMD);
142
143       return instanceMD;
144    }
145 }
146
Popular Tags