/*
* Copyright (C) 2003-2012 eXo Platform SAS.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either version 3
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see<http://www.gnu.org/licenses/>.
*/
package org.exoplatform.forum.extras.injection.forum;
import java.io.ByteArrayInputStream;
import java.util.ArrayList;
import java.util.HashMap;
import org.exoplatform.forum.service.BufferAttachment;
import org.exoplatform.forum.service.Category;
import org.exoplatform.forum.service.Forum;
import org.exoplatform.forum.service.ForumAttachment;
import org.exoplatform.forum.service.MessageBuilder;
import org.exoplatform.forum.service.Post;
import org.exoplatform.forum.service.Topic;
import org.exoplatform.forum.service.Utils;
import org.exoplatform.forum.extras.injection.utils.LoremIpsum4J;
/**
* @author <a href="mailto:thanhvc@exoplatform.com">Thanh Vu</a>
* @version $Revision$
*/
public class AttachmentInjector extends AbstractForumInjector {
/** . */
private static final String NUMBER = "number";
/** . */
private static final String FROM_POST = "fromPost";
/** . */
private static final String TO_POST = "toPost";
/** . */
private static final String POST_PREFIX = "postPrefix";
/** . */
private static final String BYTE_SIZE = "byteSize";
@Override
public void inject(HashMap<String, String> params) throws Exception {
//
int number = param(params, NUMBER);
String postPrefix = params.get(POST_PREFIX);
//
int fromPost = param(params, FROM_POST);
int toPost = param(params, TO_POST);
int byteSize = param(params, BYTE_SIZE);
if (byteSize < 0 || byteSize > 99) {
getLog().info("ByteSize is invalid with '" + byteSize + "' wrong. Please set it exactly in range 0 - 99 (words). Aborting injection ..." );
return;
}
lorem = new LoremIpsum4J();
init(null, null, null, null, postPrefix, byteSize);
//
for (int i = fromPost; i <= toPost; ++i) {
//
String postName = postBase + i;
Post post = getPostByName(postName);
if (post == null) {
getLog().info("post name is '" + postName + "' wrong. Please set it exactly. Aborting injection ..." );
return;
}
Topic topic = getTopicByPostName(postName);
Forum forum = getForumByTopicName(topic.getTopicName());
Category cat = getCategoryByForumName(forum.getForumName());
//
generateAttachments(post, POST_PREFIX, number, byteSize);
forumService.savePost(cat.getId(), forum.getId(), topic.getId(), post, false, new MessageBuilder());
//
getLog().info("Uploads " + number + " attachments into '" + postName + "' with each attachment's " + byteSize + " byte(s)");
}
}
private void generateAttachments(Post post, String prefix, int number, int byteSize) throws Exception {
if (post.getNumberAttach() == 0) {
post.setAttachments(new ArrayList<ForumAttachment>());
}
int baseNumber = (int) post.getNumberAttach() ;
//
String rs = createTextResource(byteSize);
for (int i = 0; i < number; i++) {
String attId = generateId(prefix + baseNumber, Utils.ATTACHMENT, byteSize, i);
BufferAttachment att = new BufferAttachment();
att.setId(attId);
att.setName(attId);
att.setInputStream(new ByteArrayInputStream(rs.getBytes("UTF-8")));
att.setMimeType("text/plain");
long fileSize = (long) byteSize * 1024;
att.setSize(fileSize);
post.getAttachments().add(att);
baseNumber++;
}
//
post.setNumberAttach(baseNumber);
}
private String generateId(String prefix, String entity, int byteSize, int order) {
StringBuilder sb = new StringBuilder();
sb.append(entity)
.append("-")
.append(prefix)
.append("_")
.append(lorem.getCharacters(byteSize))
.append("_")
.append(order);
return sb.toString();
}
}