001: //$HeadURL: https://svn.wald.intevation.org/svn/deegree/base/trunk/src/org/deegree/portal/standard/context/control/ContextLoadListener.java $
002: /*---------------- FILE HEADER ------------------------------------------
003:
004: This file is part of deegree.
005: Copyright (C) 2001-2008 by:
006: EXSE, Department of Geography, University of Bonn
007: http://www.giub.uni-bonn.de/deegree/
008: lat/lon GmbH
009: http://www.lat-lon.de
010:
011: This library is free software; you can redistribute it and/or
012: modify it under the terms of the GNU Lesser General Public
013: License as published by the Free Software Foundation; either
014: version 2.1 of the License, or (at your option) any later version.
015:
016: This library is distributed in the hope that it will be useful,
017: but WITHOUT ANY WARRANTY; without even the implied warranty of
018: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
019: Lesser General Public License for more details.
020:
021: You should have received a copy of the GNU Lesser General Public
022: License along with this library; if not, write to the Free Software
023: Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
024:
025: Contact:
026:
027: Andreas Poth
028: lat/lon GmbH
029: Aennchenstr. 19
030: 53115 Bonn
031: Germany
032: E-Mail: poth@lat-lon.de
033:
034: Klaus Greve
035: Department of Geography
036: University of Bonn
037: Meckenheimer Allee 166
038: 53115 Bonn
039: Germany
040: E-Mail: klaus.greve@uni-bonn.de
041:
042:
043: ---------------------------------------------------------------------------*/
044:
045: package org.deegree.portal.standard.context.control;
046:
047: import java.io.File;
048: import java.util.ArrayList;
049: import java.util.Arrays;
050: import java.util.List;
051:
052: import org.deegree.enterprise.control.FormEvent;
053: import org.deegree.enterprise.control.RPCMember;
054: import org.deegree.enterprise.control.RPCMethodCall;
055: import org.deegree.enterprise.control.RPCParameter;
056: import org.deegree.enterprise.control.RPCStruct;
057: import org.deegree.enterprise.control.RPCUtils;
058: import org.deegree.enterprise.control.RPCWebEvent;
059: import org.deegree.framework.log.ILogger;
060: import org.deegree.framework.log.LoggerFactory;
061: import org.deegree.i18n.Messages;
062: import org.deegree.portal.PortalException;
063:
064: /**
065: * This listener generates a list of availavle ViewContexts.
066: * The only parameter passed is the user name.Currently only
067: * .xml files are being accepted as contexts and it's also
068: * also assumed that those are available under
069: * WEB-INF/xml/users/some_user user directories
070: *
071: * @author <a href="mailto:taddei@lat-lon.de">Ugo Taddei</a>
072: * @author <a href="mailto:poth@lat-lon.de">Andreas Poth</a>
073: * @author last edited by: $Author: apoth $
074: *
075: * @version $Revision: 9346 $, $Date: 2007-12-27 08:39:07 -0800 (Thu, 27 Dec 2007) $
076: */
077: public class ContextLoadListener extends AbstractContextListener {
078:
079: private static String userDir = "WEB-INF/conf/igeoportal/users/";
080: private static final ILogger LOG = LoggerFactory
081: .getLogger(ContextLoadListener.class);
082:
083: /* (non-Javadoc)
084: * @see org.deegree.enterprise.control.WebListener#actionPerformed(org.deegree.enterprise.control.FormEvent)
085: */
086: @Override
087: public void actionPerformed(FormEvent event) {
088:
089: RPCWebEvent rpc = (RPCWebEvent) event;
090: try {
091: validate(rpc);
092: } catch (PortalException e) {
093: LOG.logError(e.getMessage(), e);
094: gotoErrorPage(Messages.getMessage(
095: "IGEO_STD_CNTXT_INVALID_RPC", "ContextLoad", e
096: .getMessage()));
097: return;
098: }
099:
100: String userName = extractUserName(rpc);
101: List contextList = getContextList(userName);
102:
103: getRequest().setAttribute("CONTEXT_LIST", contextList);
104: getRequest().setAttribute("USER", userName);
105:
106: }
107:
108: /**
109: * reads the session ID from the passed RPC and gets the assigned
110: * user name from a authentification service
111: * @param event
112: * @return the user name
113: */
114: private String extractUserName(RPCWebEvent event) {
115: RPCMethodCall mc = event.getRPCMethodCall();
116: RPCParameter[] pars = mc.getParameters();
117: RPCStruct struct = (RPCStruct) pars[0].getValue();
118:
119: String name = "default";
120: try {
121: name = getUserName(RPCUtils.getRpcPropertyAsString(struct,
122: "sessionID"));
123: if (name == null) {
124: name = "default";
125: }
126: } catch (Exception e) {
127: }
128: // get map context value
129: return name;
130: }
131:
132: /**
133: * returns a list of all available context documents assigned to the
134: * passed user
135: *
136: * @param userName
137: * @return the list of available context documents
138: */
139: private List<String> getContextList(String userName) {
140:
141: String path2Dir = getHomePath() + userDir + userName;
142:
143: File dir = new File(path2Dir);
144: File[] files = dir.listFiles();
145: List<String> contextList = new ArrayList<String>();
146: for (int i = 0; i < files.length; i++) {
147: String s = files[i].getName();
148: if (files[i].isFile() && s.endsWith(".xml")) {
149: contextList.add(files[i].getName());
150: }
151: }
152: String[] list = contextList.toArray(new String[contextList
153: .size()]);
154: Arrays.sort(list);
155: return new ArrayList<String>(Arrays.asList(list));
156: }
157:
158: /**
159: * validates if the passed RPC call containes the required variables
160: *
161: * @param rpc
162: * @throws PortalException
163: */
164: private void validate(RPCWebEvent rpc) throws PortalException {
165: RPCMethodCall mc = rpc.getRPCMethodCall();
166: RPCParameter param = mc.getParameters()[0];
167: RPCStruct struct = (RPCStruct) param.getValue();
168: RPCMember sessionID = struct.getMember("sessionID");
169: if (sessionID == null) {
170: throw new PortalException(Messages.getMessage(
171: "IGEO_STD_CNTXT_MISSING_PARAM", "sessionID",
172: "ContextLoad"));
173: }
174: }
175:
176: }
|