001: /*
002: * JOnAS: Java(TM) Open Application Server
003: * Copyright (C) 1999-2005 Bull S.A.
004: * Contact: jonas-team@objectweb.org
005: *
006: * This library is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU Lesser General Public
008: * License as published by the Free Software Foundation; either
009: * version 2.1 of the License, or any later version.
010: *
011: * This library is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * Lesser General Public License for more details.
015: *
016: * You should have received a copy of the GNU Lesser General Public
017: * License along with this library; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
019: * USA
020: *
021: * Initial developer(s): Brice Ruzand
022: *
023: * --------------------------------------------------------------------------
024: * $Id$
025: * --------------------------------------------------------------------------
026: */
027: package emb.sample.servlet;
028:
029: import java.io.IOException;
030: import java.io.InputStream;
031: import java.io.PrintWriter;
032: import java.util.Collections;
033: import java.util.Iterator;
034: import java.util.LinkedList;
035: import java.util.List;
036: import java.util.Properties;
037:
038: import javax.emb.MediaEntityLocal;
039: import javax.servlet.ServletException;
040: import javax.servlet.http.HttpServletRequest;
041: import javax.servlet.http.HttpServletResponse;
042:
043: import emb.sample.MediaSampleException;
044: import emb.sample.session.MediaSampleSessionLocal;
045:
046: /**
047: * This servlet is intent to control requests to loading the sample media to the
048: * database.
049: */
050: public class LoadSampleMedia extends BaseSampleServlet {
051:
052: /**
053: * serialVersionUID
054: */
055: private static final long serialVersionUID = 3256441391566698802L;
056:
057: /**
058: * default dir where sample are stored
059: */
060: private static final String SAMPLES_DIR = "/samples/";
061:
062: /**
063: * The sample info file
064: */
065: private static final String SAMPLES_PROPERTIES = "samples.properties";
066:
067: /**
068: * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest,
069: * javax.servlet.http.HttpServletResponse)
070: * @inheritDoc
071: */
072: public void doGet(HttpServletRequest request,
073: HttpServletResponse response) throws ServletException,
074: IOException {
075:
076: response.setContentType("text/html;charset=ISO-8859-1");
077:
078: getServletConfig().getServletContext().getRequestDispatcher(
079: "/jsps/header.jsp").include(request, response);
080:
081: PrintWriter out = response.getWriter();
082: out.println("<h2>Initializing Sample DataBase</h2>");
083:
084: // Create Samples in DB
085: try {
086:
087: MediaSampleSessionLocal session = getSession(request);
088:
089: // get all MEB stored with the same Partial Desc
090: if (session.getMediaList().length > 0) {
091: out
092: .println("<h2>Samples already loaded... -> removing default Media</h2>");
093: session.removeDefaultMedia();
094: out.flush();
095: }
096:
097: out
098: .println("<h2>Adding new Samples to the DataBase...</h2>");
099: out.println("<ul>");
100: out.flush();
101:
102: // get the properties stream
103: InputStream propStream = getServletContext()
104: .getResourceAsStream(
105: SAMPLES_DIR + SAMPLES_PROPERTIES);
106:
107: if (propStream != null) {
108: try {
109:
110: // new properties
111: Properties prop = new Properties();
112:
113: // load properties from stream
114: prop.load(propStream);
115:
116: List sortList = new LinkedList(prop.keySet());
117:
118: Collections.sort(sortList);
119:
120: for (Iterator i = sortList.iterator(); i.hasNext();) {
121:
122: // Get class name and file extension
123: String sampleNameWSuffix = (String) i.next();
124:
125: if (sampleNameWSuffix.endsWith(".file")) {
126: String sampleName = getPrefixFileName(sampleNameWSuffix);
127:
128: String sampleFile = prop
129: .getProperty(sampleName + ".file");
130: String sampleDesc = prop
131: .getProperty(sampleName + ".desc");
132: String sampleShowS = prop
133: .getProperty(sampleName + ".show");
134: boolean sampleShow = Boolean.valueOf(
135: sampleShowS).booleanValue();
136:
137: byte status = MediaSampleSessionLocal.DONT_SHOW;
138: if (sampleShow) {
139: status = MediaSampleSessionLocal.SHOW_IN_LIST;
140: }
141:
142: createNewSample(
143: session,
144: out,
145: sampleFile,
146: sampleDesc,
147: getServletContext()
148: .getResourceAsStream(
149: SAMPLES_DIR
150: + sampleFile),
151: sampleName, status);
152:
153: }
154: }
155:
156: } catch (IOException e) {
157: // error while loading properties
158: new MediaSampleException(
159: "Unable to load sample properties due to : "
160: + e.getLocalizedMessage(), e);
161: }
162: } else {
163: // error while open properties stream
164: new MediaSampleException(
165: "Unable to load sample properties due to : "
166: + SAMPLES_PROPERTIES
167: + " has no been found");
168: }
169:
170: out.println("</ul>");
171: out.println("<h2>Media loaded.</h2>");
172:
173: getServletConfig().getServletContext()
174: .getRequestDispatcher("/jsps/footer.jsp").include(
175: request, response);
176:
177: } catch (Throwable e) {
178: exceptionHandler(e, getClass(), request, response);
179: }
180:
181: }
182:
183: /**
184: * Create a MEB sample with given param
185: *
186: * @param session the session which control medi creation
187: * @param out out writer
188: * @param name name of the MEB
189: * @param description description desc of the MEB
190: * @param contentStream contentStream content of the EMB
191: * @param registeredName the name to access to it
192: * @param status status is ones of {@link MediaSampleSessionLocal#DONT_SHOW},
193: * {@link MediaSampleSessionLocal#SHOW_IN_LIST},
194: * {@link MediaSampleSessionLocal#USER_ADDED}
195: * @return the media entity
196: */
197: private MediaEntityLocal createNewSample(
198: MediaSampleSessionLocal session, PrintWriter out,
199: String name, String description, InputStream contentStream,
200: String registeredName, byte status) {
201: // Create MEB sample
202: out.println("<li>");
203: MediaEntityLocal meb = null;
204: try {
205:
206: meb = session.createMediaEntity(contentStream, name,
207: description, status, registeredName);
208:
209: out.println(name);
210:
211: } catch (Throwable e) {
212:
213: try {
214: if (meb != null) {
215: meb.remove();
216: }
217: } catch (Throwable e1) {
218: // do nothing
219: }
220:
221: meb = null;
222:
223: String err = "Error while creating sample \"" + name
224: + "\" : " + e.getLocalizedMessage();
225: out.println("<span class=\"error\">" + err + "</span>");
226: // System.err.println("LoadSampleMedia : " + err);
227: // e.printStackTrace();
228: }
229: out.println("</li>");
230: out.flush();
231: return meb;
232: }
233:
234: /**
235: * Get name of a file name without extension
236: *
237: * @param name name of the file
238: * @return file name without extension
239: */
240: public static String getPrefixFileName(String name) {
241: int lastDotPosition = name.lastIndexOf('.');
242:
243: if (lastDotPosition == -1) {
244: return name;
245: }
246: return name.substring(0, lastDotPosition);
247:
248: }
249: }
|