blob: b225cc254111050c7663ff908fe6fa7a7653a096 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. The ASF licenses this file to You
* under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License. For additional information regarding
* copyright in this work, please see the NOTICE file in the top level
* directory of this distribution.
*/
package org.apache.roller.weblogger.ui.struts2.editor;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.roller.util.RollerConstants;
import org.apache.roller.weblogger.business.BookmarkManager;
import org.apache.roller.weblogger.business.WebloggerFactory;
import org.apache.roller.weblogger.ui.struts2.util.UIAction;
import org.apache.roller.weblogger.util.cache.CacheManager;
import org.apache.struts2.convention.annotation.AllowedMethods;
/**
* Import opml file into bookmarks folder.
*/
// TODO: make this work @AllowedMethods({"execute","save"})
public final class BookmarksImport extends UIAction {
private static Log log = LogFactory.getLog(BookmarksImport.class);
// only write files out that are below this threshold
private static final long WRITE_THRESHOLD_IN_MB = 4;
private static final long WRITE_THRESHOLD = WRITE_THRESHOLD_IN_MB * 1024000;
// uploaded opml file
private File opmlFile = null;
// content type of uploaded file
private String opmlFileContentType = null;
// file name of uploaded file
private String opmlFileFileName = null;
public BookmarksImport() {
this.actionName = "bookmarksImport";
this.desiredMenu = "editor";
this.pageTitle = "bookmarksImport.title";
}
/**
* Request to import bookmarks
*/
public String execute() {
return INPUT;
}
/**
* Save imported bookmarks.
*/
public String save() {
BookmarkManager bm = WebloggerFactory.getWeblogger().getBookmarkManager();
InputStream stream = null;
if(getOpmlFile() != null && getOpmlFile().exists()) {
try {
//only write files out that are less than 4MB
if (getOpmlFile().length() < WRITE_THRESHOLD) {
stream = new FileInputStream(getOpmlFile());
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[RollerConstants.EIGHT_KB_IN_BYTES];
int bytesRead = 0;
while ((bytesRead=stream.read(buffer,0,RollerConstants.EIGHT_KB_IN_BYTES)) != -1) {
baos.write(buffer, 0, bytesRead);
}
String data = new String(baos.toByteArray());
SimpleDateFormat formatter =
new SimpleDateFormat("yyyyMMddHHmmss");
Date now = new Date();
String folderName = "imported-" + formatter.format(now);
// Use Roller BookmarkManager to import bookmarks
bm.importBookmarks(getActionWeblog(), folderName, data);
WebloggerFactory.getWeblogger().flush();
// notify caches
CacheManager.invalidate(getActionWeblog());
// message to user
addMessage("bookmarksImport.imported", folderName);
// destroy the temporary file created
getOpmlFile().delete();
return SUCCESS;
} else {
String data = "The file is greater than " + WRITE_THRESHOLD_IN_MB
+" MB, and has not been written to stream."
+" File Size: " + getOpmlFile().length() + " bytes. "
+" This is a limitation of this particular "
+" web application";
addError("bookmarksImport.error", data);
}
} catch (Exception ex) {
log.error("ERROR: importing bookmarks", ex);
addError("bookmarksImport.error", ex.toString());
} finally {
if (stream != null) {
try {
stream.close();
} catch (Exception e) {
log.error("Closing stream",e);
}
}
}
}
return INPUT;
}
public File getOpmlFile() {
return opmlFile;
}
public void setOpmlFile(File opmlFile) {
this.opmlFile = opmlFile;
}
public String getOpmlFileContentType() {
return opmlFileContentType;
}
public void setOpmlFileContentType(String opmlFileContentType) {
this.opmlFileContentType = opmlFileContentType;
}
public String getOpmlFileFileName() {
return opmlFileFileName;
}
public void setOpmlFileFileName(String opmlFileFileName) {
this.opmlFileFileName = opmlFileFileName;
}
}