001: /* ***** BEGIN LICENSE BLOCK *****
002: * Version: MPL 1.1
003: * The contents of this file are subject to the Mozilla Public License Version
004: * 1.1 (the "License"); you may not use this file except in compliance with
005: * the License. You may obtain a copy of the License at
006: * http://www.mozilla.org/MPL/
007: *
008: * Software distributed under the License is distributed on an "AS IS" basis,
009: * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
010: * for the specific language governing rights and limitations under the
011: * License.
012: *
013: * The Original Code is Riot.
014: *
015: * The Initial Developer of the Original Code is
016: * Neteye GmbH.
017: * Portions created by the Initial Developer are Copyright (C) 2007
018: * the Initial Developer. All Rights Reserved.
019: *
020: * Contributor(s):
021: * Jan-Frederic Linde [jfl at neteye dot de]
022: *
023: * ***** END LICENSE BLOCK ***** */
024: package org.riotfamily.riot.list.export;
025:
026: import java.io.PrintWriter;
027: import java.text.SimpleDateFormat;
028: import java.util.Collection;
029: import java.util.Date;
030: import java.util.Iterator;
031:
032: import javax.servlet.http.HttpServletRequest;
033: import javax.servlet.http.HttpServletResponse;
034:
035: import org.riotfamily.riot.dao.ListParams;
036: import org.riotfamily.riot.editor.EditorDefinitionUtils;
037: import org.riotfamily.riot.editor.EditorRepository;
038: import org.riotfamily.riot.editor.ListDefinition;
039: import org.riotfamily.riot.list.ListConfig;
040: import org.riotfamily.riot.list.support.ListParamsImpl;
041: import org.springframework.beans.BeanWrapper;
042: import org.springframework.beans.BeanWrapperImpl;
043: import org.springframework.web.bind.ServletRequestUtils;
044: import org.springframework.web.servlet.ModelAndView;
045: import org.springframework.web.servlet.mvc.Controller;
046:
047: public class CsvExportController implements Controller {
048:
049: private EditorRepository editorRepository;
050:
051: private String encoding = "UTF-8";
052:
053: private String delimiter = ";";
054:
055: public CsvExportController(EditorRepository editorRepository) {
056: this .editorRepository = editorRepository;
057: }
058:
059: public void setDelimiter(String delimiter) {
060: this .delimiter = delimiter;
061: }
062:
063: public void setEncoding(String encoding) {
064: this .encoding = encoding;
065: }
066:
067: public ModelAndView handleRequest(HttpServletRequest request,
068: HttpServletResponse response) throws Exception {
069:
070: generateCsv(request, response);
071: return null;
072: }
073:
074: public void generateCsv(HttpServletRequest request,
075: HttpServletResponse response) throws Exception {
076:
077: String listId = ServletRequestUtils.getStringParameter(request,
078: "listId");
079: String commandId = ServletRequestUtils.getStringParameter(
080: request, "commandId");
081: String parentId = ServletRequestUtils.getStringParameter(
082: request, "parentId");
083:
084: CsvExportCommand command = (CsvExportCommand) editorRepository
085: .getListRepository().getCommand(commandId);
086:
087: String fileEncoding = encoding;
088: if (command.getEncoding() != null) {
089: fileEncoding = command.getEncoding();
090: }
091:
092: SimpleDateFormat sdf = new SimpleDateFormat(
093: "yyyy-MM-dd-HH:mm:ss");
094:
095: String fileName = listId + '-' + sdf.format(new Date())
096: + ".csv";
097:
098: response.setContentType("text/csv; charset=" + fileEncoding);
099: response.setCharacterEncoding(encoding);
100: response.setHeader("Content-Disposition",
101: "attachment; filename=" + fileName);
102:
103: PrintWriter out = response.getWriter();
104:
105: for (int i = 0; i < command.getProperties().size(); i++) {
106: out.print(command.getProperties().get(i));
107: out.print(delimiter);
108: }
109: out.println();
110:
111: ListDefinition listDefinition = editorRepository
112: .getListDefinition(listId);
113: ListConfig listConfig = listDefinition.getListConfig();
114:
115: Object parent = EditorDefinitionUtils.loadParent(
116: listDefinition, parentId);
117:
118: ListParams params = new ListParamsImpl();
119: Collection beans = listConfig.getDao().list(parent, params);
120: Iterator beanIterator = beans.iterator();
121: while (beanIterator.hasNext()) {
122: BeanWrapper bean = new BeanWrapperImpl(beanIterator.next());
123: for (int i = 0; i < command.getProperties().size(); i++) {
124: String propertyName = (String) command.getProperties()
125: .get(i);
126: Object value = bean.getPropertyValue(propertyName);
127: if (value instanceof Collection) {
128: Iterator it = ((Collection) value).iterator();
129: while (it.hasNext()) {
130: out.print(it.next());
131: out.print(' ');
132: }
133: } else if (value != null) {
134: out.print(value);
135: }
136:
137: out.print(delimiter);
138: }
139: out.println();
140: }
141: }
142:
143: }
|