Commit ebef8c42 authored by Ryan Graham's avatar Ryan Graham Committed by ryang

added support for sending user export directly to the screen / need to bulletproof and test


git-svn-id: http://svn.igniterealtime.org/svn/repos/messenger/trunk@1517 b35dd754-fafc-0310-a699-88a17e54d16e
parent 787f2628
...@@ -3,6 +3,7 @@ package org.jivesoftware.messenger.plugin; ...@@ -3,6 +3,7 @@ package org.jivesoftware.messenger.plugin;
import java.io.File; import java.io.File;
import java.io.FileWriter; import java.io.FileWriter;
import java.io.IOException; import java.io.IOException;
import java.io.StringWriter;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
...@@ -48,12 +49,33 @@ public class ImportExportPlugin implements Plugin { ...@@ -48,12 +49,33 @@ public class ImportExportPlugin implements Plugin {
private static UserProvider provider; private static UserProvider provider;
private static String serverName; private static String serverName;
private static String exportDirectory;
public ImportExportPlugin() { public ImportExportPlugin() {
userManager = XMPPServer.getInstance().getUserManager(); userManager = XMPPServer.getInstance().getUserManager();
provider = UserManager.getUserProvider(); provider = UserManager.getUserProvider();
serverName = XMPPServer.getInstance().getServerInfo().getName(); serverName = XMPPServer.getInstance().getServerInfo().getName();
if (exportDirectory == null) {
if (JiveGlobals.getHomeDirectory() != null) {
File messengerHome = new File(JiveGlobals.getHomeDirectory());
if (messengerHome.exists() && messengerHome.canWrite()) {
exportDirectory = (new File(messengerHome, "export")).toString();
}
}
}
if (!exportDirectory.endsWith(File.separator)) {
exportDirectory = exportDirectory + File.separator;
}
// Make sure the export directory exists. If not, make it:
File exportDir = new File(exportDirectory);
if (!exportDir.exists()) {
exportDir.mkdir();
}
} }
public void initializePlugin(PluginManager manager, File pluginDirectory) { public void initializePlugin(PluginManager manager, File pluginDirectory) {
...@@ -64,6 +86,8 @@ public class ImportExportPlugin implements Plugin { ...@@ -64,6 +86,8 @@ public class ImportExportPlugin implements Plugin {
userManager = null; userManager = null;
pluginManager = null; pluginManager = null;
provider = null; provider = null;
serverName = null;
exportDirectory = null;
} }
public boolean isUserProviderReadOnly() { public boolean isUserProviderReadOnly() {
...@@ -71,38 +95,51 @@ public class ImportExportPlugin implements Plugin { ...@@ -71,38 +95,51 @@ public class ImportExportPlugin implements Plugin {
} }
public static String exportDirectory() { public static String exportDirectory() {
return JiveGlobals.getHomeDirectory() + File.separator + "export"; return exportDirectory;
}
public boolean exportUserData(String file) throws IOException {
if (!createExportDirectory()) {
return false;
} }
public boolean exportUsersToFile(String file) throws IOException {
if (!file.endsWith(".xml")) { if (!file.endsWith(".xml")) {
file += ".xml"; file += ".xml";
} }
String exportFilePath = exportDirectory() + File.separator + file; String exportFilePath = exportDirectory + file;
XMLWriter writer = new XMLWriter(new FileWriter(exportFilePath), OutputFormat.createPrettyPrint()); XMLWriter writer = null;
try {
writer = new XMLWriter(new FileWriter(exportFilePath), OutputFormat.createPrettyPrint());
writer.write(exportUsers()); writer.write(exportUsers());
} catch (IOException ioe) {
Log.error(ioe);
throw ioe;
} finally {
if (writer != null) {
writer.close(); writer.close();
}
}
return true; return true;
} }
private boolean createExportDirectory() { public String exportUsersToString() throws IOException {
boolean isDirReady = true; StringWriter stringWriter = new StringWriter();
XMLWriter writer = null;
if (!(new File(exportDirectory())).exists()) { try {
isDirReady = (new File(exportDirectory())).mkdirs(); writer = new XMLWriter(stringWriter, OutputFormat.createPrettyPrint());
writer.write(exportUsers());
} catch (IOException ioe) {
Log.error(ioe);
throw ioe;
} finally {
if (writer != null) {
writer.close();
}
} }
return isDirReady; return stringWriter.toString();
} }
public boolean validateImportFile(String file) { public boolean validateImportFile(String file) {
String importFilePath = exportDirectory() + File.separator + file; String importFilePath = exportDirectory + file;
try { try {
return new UserSchemaValidator(importFilePath, "messenger-user-schema.xsd.xml").validate(); return new UserSchemaValidator(importFilePath, "messenger-user-schema.xsd.xml").validate();
...@@ -114,7 +151,7 @@ public class ImportExportPlugin implements Plugin { ...@@ -114,7 +151,7 @@ public class ImportExportPlugin implements Plugin {
} }
public List importUserData(String file) throws MalformedURLException, DocumentException { public List importUserData(String file) throws MalformedURLException, DocumentException {
String importFilePath = exportDirectory() + File.separator + file; String importFilePath = exportDirectory + File.separator + file;
SAXReader reader = new SAXReader(); SAXReader reader = new SAXReader();
Document document = reader.read(new File(importFilePath).toURL()); Document document = reader.read(new File(importFilePath).toURL());
...@@ -129,9 +166,20 @@ public class ImportExportPlugin implements Plugin { ...@@ -129,9 +166,20 @@ public class ImportExportPlugin implements Plugin {
for (User user : users) { for (User user : users) {
Element userElement = root.addElement("User"); Element userElement = root.addElement("User");
String userName = user.getUsername(); String userName = user.getUsername();
// if (userName != null) {
// try {
// userName = URLEncoder.encode(userName, "UTF-8");
// } catch (UnsupportedEncodingException e) {
// Log.error(e);
// userName = "";
// }
// } else {
// userName = "";
// }
userElement.addElement("Jid").addText(userName); userElement.addElement("Jid").addText(userName);
try { try {
userElement.addElement("Password").addText(provider.getPassword(userName)); userElement.addElement("Password").addText(provider.getPassword(user.getUsername()));
} }
catch (UserNotFoundException e) { catch (UserNotFoundException e) {
//this should never happen //this should never happen
...@@ -139,7 +187,19 @@ public class ImportExportPlugin implements Plugin { ...@@ -139,7 +187,19 @@ public class ImportExportPlugin implements Plugin {
userElement.addElement("Password").addText(userName); userElement.addElement("Password").addText(userName);
} }
userElement.addElement("Email").addText(user.getEmail() == null ? "" : user.getEmail()); userElement.addElement("Email").addText(user.getEmail() == null ? "" : user.getEmail());
userElement.addElement("Name").addText(user.getName() == null ? "" : user.getName());
String name = user.getName();
// if (name != null) {
// try {
// name = URLEncoder.encode(name, "UTF-8");
// } catch (UnsupportedEncodingException e) {
// Log.error(e);
// name = "";
// }
// } else {
// name = "";
// }
userElement.addElement("Name").addText(name == null ? "" : name);
//creation and modified datte are not used as part of the import process but are exported //creation and modified datte are not used as part of the import process but are exported
//for historical purposes, should they be formatted differently? //for historical purposes, should they be formatted differently?
......
...@@ -15,10 +15,15 @@ ...@@ -15,10 +15,15 @@
boolean exportUsers = request.getParameter("exportUsers") != null; boolean exportUsers = request.getParameter("exportUsers") != null;
boolean success = request.getParameter("success") != null; boolean success = request.getParameter("success") != null;
boolean exportToFile = ParamUtils.getBooleanParameter(request, "exporttofile", false);
ImportExportPlugin plugin = (ImportExportPlugin) XMPPServer.getInstance().getPluginManager().getPlugin("userimportexport"); ImportExportPlugin plugin = (ImportExportPlugin) XMPPServer.getInstance().getPluginManager().getPlugin("userimportexport");
String exportText = null;
Map errors = new HashMap(); Map errors = new HashMap();
if (exportUsers) { if (exportUsers) {
if (exportToFile) {
String file = ParamUtils.getParameter(request, "exportFile"); String file = ParamUtils.getParameter(request, "exportFile");
if ((file == null) || (file.length() <= 0)) { if ((file == null) || (file.length() <= 0)) {
errors.put("missingFile","missingFile"); errors.put("missingFile","missingFile");
...@@ -27,7 +32,7 @@ ...@@ -27,7 +32,7 @@
else { else {
try { try {
//todo this could take some, redirect to a progress page? //todo this could take some, redirect to a progress page?
if (plugin.exportUserData(file)) { if (plugin.exportUsersToFile(file)) {
response.sendRedirect("export-user-data.jsp?success=true"); response.sendRedirect("export-user-data.jsp?success=true");
return; return;
} }
...@@ -40,6 +45,10 @@ ...@@ -40,6 +45,10 @@
} }
} }
} }
else {
exportText = plugin.exportUsersToString();
}
}
%> %>
...@@ -47,7 +56,7 @@ ...@@ -47,7 +56,7 @@
<% // Title of this page and breadcrumbs <% // Title of this page and breadcrumbs
String title = "Export User Data"; String title = "Export User Data";
pageinfo.setTitle(title); pageinfo.setTitle(title);
pageinfo.getBreadcrumbs().add(new AdminPageBean.Breadcrumb("Main", "index.jsp")); pageinfo.getBreadcrumbs().add(new AdminPageBean.Breadcrumb("Main", "../../index.jsp"));
pageinfo.getBreadcrumbs().add(new AdminPageBean.Breadcrumb(title, "export-user-data.jsp")); pageinfo.getBreadcrumbs().add(new AdminPageBean.Breadcrumb(title, "export-user-data.jsp"));
pageinfo.setPageID("import-export-selection"); pageinfo.setPageID("import-export-selection");
%> %>
...@@ -91,30 +100,49 @@ ...@@ -91,30 +100,49 @@
<% } %> <% } %>
<form action="export-user-data.jsp?exportUsers" method="post"> <form action="export-user-data.jsp?exportUsers" method="post">
<div class="jive-table">
<table cellpadding="0" cellspacing="0" border="0" width="100%"> <fieldset>
<thead> <legend>Export Options</legend>
<div>
<table cellpadding="3" cellspacing="0" border="0" width="100%">
<tbody>
<tr>
<td width="1%">
<input type="radio" name="exporttofile" value="true" selected id="rb01">
</td>
<td width="99%">
<label for="rb01"><b>To File</b></label> - Save user data to the specified file location.
</td>
<tr> <tr>
<th>Export Properties</th> <td width="1%">&nbsp;</td>
<td width="99%">
<%= plugin.exportDirectory() %>
</td>
</tr> </tr>
</thead> <tr>
<tr class="jive-even"> <td width="1%">&nbsp;</td>
<td style="border-right:1px #ccc solid;">Export Location:</td> <td width="99%">Export File Name:&nbsp;<input type="text" size="30" maxlength="150" name="exportFile"></td>
</tr> </tr>
<tr class="jive-odd">
<td style="border-right:1px #ccc solid;"><%= plugin.exportDirectory() %></td>
</tr> </tr>
<tr class="jive-even"> <tr>
<td style="border-right:1px #ccc solid;">Export File Name:</td> <td width="1%">
<input type="radio" name="exporttofile" value="false" id="rb02">
</td>
<td width="99%">
<label for="rb02"><b>To Screen</b></label> - Dispaly user data in the text area below.
</td>
</tr> </tr>
<tr class="jive-odd"> <tr>
<td style="border-right:1px #ccc solid;"> <td width="1%">&nbsp;</td>
<input type="text" size="30" maxlength="150" name="exportFile"> <td width="99%">
<textarea cols="80" rows="20" wrap=off><%=(exportText == null) ? "" : exportText %></textarea>
</td> </td>
</tr> </tr>
</table> </tbody>
</div> </table>
</div>
</fieldset>
<br><br> <br><br>
<input type="submit" value="Export"> <input type="submit" value="Export">
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
<% // Title of this page and breadcrumbs <% // Title of this page and breadcrumbs
String title = "Import/Export Selection"; String title = "Import/Export Selection";
pageinfo.setTitle(title); pageinfo.setTitle(title);
pageinfo.getBreadcrumbs().add(new AdminPageBean.Breadcrumb("Main", "index.jsp")); pageinfo.getBreadcrumbs().add(new AdminPageBean.Breadcrumb("Main", "../../index.jsp"));
pageinfo.getBreadcrumbs().add(new AdminPageBean.Breadcrumb(title, "import-export-selection.jsp")); pageinfo.getBreadcrumbs().add(new AdminPageBean.Breadcrumb(title, "import-export-selection.jsp"));
pageinfo.setPageID("import-export-selection"); pageinfo.setPageID("import-export-selection");
......
...@@ -55,7 +55,7 @@ ...@@ -55,7 +55,7 @@
<% // Title of this page and breadcrumbs <% // Title of this page and breadcrumbs
String title = "Import User Data"; String title = "Import User Data";
pageinfo.setTitle(title); pageinfo.setTitle(title);
pageinfo.getBreadcrumbs().add(new AdminPageBean.Breadcrumb("Main", "index.jsp")); pageinfo.getBreadcrumbs().add(new AdminPageBean.Breadcrumb("Main", "../../index.jsp"));
pageinfo.getBreadcrumbs().add(new AdminPageBean.Breadcrumb(title, "import-user-data.jsp")); pageinfo.getBreadcrumbs().add(new AdminPageBean.Breadcrumb(title, "import-user-data.jsp"));
pageinfo.setPageID("import-export-selection"); pageinfo.setPageID("import-export-selection");
%> %>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment